summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/mobile/ProgressIndicator.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo/dojox/mobile/ProgressIndicator.js')
-rw-r--r--js/dojo/dojox/mobile/ProgressIndicator.js112
1 files changed, 112 insertions, 0 deletions
diff --git a/js/dojo/dojox/mobile/ProgressIndicator.js b/js/dojo/dojox/mobile/ProgressIndicator.js
new file mode 100644
index 0000000..1fd52f3
--- /dev/null
+++ b/js/dojo/dojox/mobile/ProgressIndicator.js
@@ -0,0 +1,112 @@
+//>>built
+define("dojox/mobile/ProgressIndicator", [
+ "dojo/_base/config",
+ "dojo/_base/declare",
+ "dojo/dom-construct",
+ "dojo/dom-style",
+ "dojo/has"
+], function(config, declare, domConstruct, domStyle, has){
+
+ // module:
+ // dojox/mobile/ProgressIndicator
+ // summary:
+ // A progress indication widget.
+
+ var cls = declare("dojox.mobile.ProgressIndicator", null, {
+ // summary:
+ // A progress indication widget.
+ // description:
+ // ProgressIndicator is a round spinning graphical representation
+ // that indicates the current task is on-going.
+
+ // interval: Number
+ // The time interval in milliseconds for updating the spinning
+ // indicator.
+ interval: 100,
+
+ // colors: Array
+ // An array of indicator colors.
+ colors: [
+ "#C0C0C0", "#C0C0C0", "#C0C0C0", "#C0C0C0",
+ "#C0C0C0", "#C0C0C0", "#B8B9B8", "#AEAFAE",
+ "#A4A5A4", "#9A9A9A", "#8E8E8E", "#838383"
+ ],
+
+ constructor: function(){
+ this._bars = [];
+ this.domNode = domConstruct.create("DIV");
+ this.domNode.className = "mblProgContainer";
+ if(config["mblAndroidWorkaround"] !== false && has("android") >= 2.2 && has("android") < 3){
+ // workaround to avoid the side effects of the fixes for android screen flicker problem
+ domStyle.set(this.domNode, "webkitTransform", "translate3d(0,0,0)");
+ }
+ this.spinnerNode = domConstruct.create("DIV", null, this.domNode);
+ for(var i = 0; i < this.colors.length; i++){
+ var div = domConstruct.create("DIV", {className:"mblProg mblProg"+i}, this.spinnerNode);
+ this._bars.push(div);
+ }
+ },
+
+ start: function(){
+ // summary:
+ // Starts the ProgressIndicator spinning.
+ if(this.imageNode){
+ var img = this.imageNode;
+ var l = Math.round((this.domNode.offsetWidth - img.offsetWidth) / 2);
+ var t = Math.round((this.domNode.offsetHeight - img.offsetHeight) / 2);
+ img.style.margin = t+"px "+l+"px";
+ return;
+ }
+ var cntr = 0;
+ var _this = this;
+ var n = this.colors.length;
+ this.timer = setInterval(function(){
+ cntr--;
+ cntr = cntr < 0 ? n - 1 : cntr;
+ var c = _this.colors;
+ for(var i = 0; i < n; i++){
+ var idx = (cntr + i) % n;
+ _this._bars[i].style.backgroundColor = c[idx];
+ }
+ }, this.interval);
+ },
+
+ stop: function(){
+ // summary:
+ // Stops the ProgressIndicator spinning.
+ if(this.timer){
+ clearInterval(this.timer);
+ }
+ this.timer = null;
+ if(this.domNode.parentNode){
+ this.domNode.parentNode.removeChild(this.domNode);
+ }
+ },
+
+ setImage: function(/*String*/file){
+ // summary:
+ // Sets an indicator icon image file (typically animated GIF).
+ // If null is specified, restores the default spinner.
+ if(file){
+ this.imageNode = domConstruct.create("IMG", {src:file}, this.domNode);
+ this.spinnerNode.style.display = "none";
+ }else{
+ if(this.imageNode){
+ this.domNode.removeChild(this.imageNode);
+ this.imageNode = null;
+ }
+ this.spinnerNode.style.display = "";
+ }
+ }
+ });
+
+ cls._instance = null;
+ cls.getInstance = function(){
+ if(!cls._instance){
+ cls._instance = new cls();
+ }
+ return cls._instance;
+ };
+
+ return cls;
+});