FokkeZB / nl.fokkezb.loading

The widget provides a simple loading mask that can be easily styled and configured.
93 stars 18 forks source link
alloy android appcelerator archived axway ios titanium

ARCHIVED Contact mail@fokkezb.nl if you'd like to take it over.

Loading Mask Widget

Overview

This is a widget for the Alloy MVC framework of Appcelerator's Titanium platform.

The widget provides a simple loading mask that can be easily styled and configured.

By default it uses the native ProgressIndicator for Android but you can easily switch to use the same cross-platform version on both iOS and Android.

Screenshot

Loading Mask Loading Mask

Features

Quick Start gitTio npm

Global vs Local

The Quick Start shows how to use the global-mode. You only have to create one global widget instance that will (try to) make sure that there's always one loading mask showing. You can also use one of the 3 available types of loading masks directly as a local instance, as we'll see when we look at the types.

Types

The widget exposes different types of loading masks. All types share the same API so you can easily switch between them.

Native Progress (Android-only)

The global default for Android is to use ProgressIndicator. You can disable this by setting the progress property of the global widget to false or using one of the 2 other types directly in a local instance. The Native Progress type itself can also be used as a local instance:

var myInstance = Alloy.createWidget('nl.fokkezb.loading', 'progress');
myInstance.show('My message', myCancelCallback);    

Window

The only available global mode for iOS is to show a Window. You can also create a local instance:

var myInstance = Alloy.createWidget('nl.fokkezb.loading', 'window');
myInstance.show('My message', myCancelCallback);

View

You can also create the widget as a local view which you can require in any (composite) layout. The typical use case for this is to display the widget over a modal window since the window-type would open behind such a window and be invisible.

index.xml

<Alloy>
    <Window>
    <Widget src="https://github.com/FokkeZB/nl.fokkezb.loading/raw/master/nl.fokkezb.loading" name="view" id="myInstance" />
    </Window>
</Alloy>

index.js

$.myInstance.show('My message', myCancelCallback);

Public API

All types share the same public API:

Attributes

Name Type Access Description
visible boolean read, write You'll get true if the loading mask is currently shown. If set to true or false it will call show() or hide().

Widget instantiation params

Name Values Description
progress (global-only) 'progress', true, false Set to false to use the cross-platform loading mask for Android instead of the default native ProgressIndicator.

Methods

Name Params Description
show ([message][, cancelable]) Shows the loading mask or updates the existing, if it's still the top window. If the second argument is a function, the mask is user-cancelable at which event this method would be called.
update ([message][, cancelable]) Updates the existing message and cancelable function. Not available in global-mode, where you'd simply call show() again.
hide null Hides the loading mask.

Styling

You can style all views from your app.tss. The default styles can be found in window.tss. Be aware that the default styles are applied to classses, but to override from your app.tss you need to following (identical) IDs:

Internationalization

You can override the default message (Loading..) by setting the loadingMessage in your strings.xml files.

Changelog

License

Copyright 2013-2014 Fokke Zandbergen

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.