summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/form/BusyButton.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo/dojox/form/BusyButton.js')
-rw-r--r--js/dojo/dojox/form/BusyButton.js135
1 files changed, 135 insertions, 0 deletions
diff --git a/js/dojo/dojox/form/BusyButton.js b/js/dojo/dojox/form/BusyButton.js
new file mode 100644
index 0000000..b3bbd14
--- /dev/null
+++ b/js/dojo/dojox/form/BusyButton.js
@@ -0,0 +1,135 @@
+//>>built
+define("dojox/form/BusyButton", [
+ "dojo/_base/lang",
+ "dojo/dom-attr",
+ "dojo/dom-class",
+ "dijit/form/Button",
+ "dijit/form/DropDownButton",
+ "dijit/form/ComboButton",
+ "dojo/i18n",
+ "dojo/i18n!dijit/nls/loading",
+ "dojo/_base/declare"
+], function(lang, domAttr, domClass, Button, DropDownButton, ComboButton, i18n, nlsLoading, declare){
+ /*=====
+ Button = dijit.form.Button;
+ DropDownButton = dijit.form.DropDownButton;
+ ComboButton = dijit.form.ComboButton;
+ =====*/
+var _BusyButtonMixin = declare("dojox.form._BusyButtonMixin", null, {
+
+ isBusy: false,
+ busyLabel: "", // text while button is busy
+ timeout: null, // timeout, should be controlled by xhr call
+ useIcon: true, // use a busy icon
+
+ postMixInProperties: function(){
+ this.inherited(arguments);
+ if(!this.busyLabel){
+ this.busyLabel = i18n.getLocalization("dijit", "loading", this.lang).loadingState;
+ }
+ },
+
+ postCreate: function(){
+ // summary:
+ // stores initial label and timeout for reference
+ this.inherited(arguments);
+ this._label = this.containerNode.innerHTML;
+ this._initTimeout = this.timeout;
+
+ // for initial busy buttons
+ if(this.isBusy){
+ this.makeBusy();
+ }
+ },
+
+ makeBusy: function(){
+ // summary:
+ // sets state from idle to busy
+ this.isBusy = true;
+ this.set("disabled", true);
+
+ this.setLabel(this.busyLabel, this.timeout);
+ },
+
+ cancel: function(){
+ // summary:
+ // if no timeout is set or for other reason the user can put the button back
+ // to being idle
+ this.set("disabled", false);
+ this.isBusy = false;
+ this.setLabel(this._label);
+ if(this._timeout){ clearTimeout(this._timeout); }
+ this.timeout = this._initTimeout;
+ },
+
+ resetTimeout: function(/*Int*/ timeout){
+ // summary:
+ // to reset existing timeout and setting a new timeout
+ if(this._timeout){
+ clearTimeout(this._timeout);
+ }
+
+ // new timeout
+ if(timeout){
+ this._timeout = setTimeout(lang.hitch(this, function(){
+ this.cancel();
+ }), timeout);
+ }else if(timeout == undefined || timeout === 0){
+ this.cancel();
+ }
+ },
+
+ setLabel: function(/*String*/ content, /*Int*/ timeout){
+ // summary:
+ // setting a label and optional timeout of the labels state
+
+ // this.inherited(arguments); FIXME: throws an Unknown runtime error
+
+ // Begin IE hack
+ // summary: reset the label (text) of the button; takes an HTML string
+ this.label = content;
+ // remove children
+ while(this.containerNode.firstChild){
+ this.containerNode.removeChild(this.containerNode.firstChild);
+ }
+ this.containerNode.innerHTML = this.label;
+
+ if(this.showLabel == false && !domAttr.get(this.domNode, "title")){
+ this.titleNode.title=lang.trim(this.containerNode.innerText || this.containerNode.textContent || '');
+ }
+ // End IE hack
+
+ // setting timeout
+ if(timeout){
+ this.resetTimeout(timeout);
+ }else{
+ this.timeout = null;
+ }
+
+ // create optional busy image
+ if(this.useIcon && this.isBusy){
+ var node = new Image();
+ node.src = this._blankGif;
+ domAttr.set(node, "id", this.id+"_icon");
+ domClass.add(node, "dojoxBusyButtonIcon");
+ this.containerNode.appendChild(node);
+ }
+ },
+
+ _onClick: function(e){
+ // summary:
+ // on button click the button state gets changed
+
+ // only do something if button is not busy
+ if(!this.isBusy){
+ this.inherited(arguments); // calls onClick()
+ this.makeBusy();
+ }
+ }
+});
+
+var BusyButton = declare("dojox.form.BusyButton", [Button, _BusyButtonMixin], {});
+declare("dojox.form.BusyComboButton", [ComboButton, _BusyButtonMixin], {});
+declare("dojox.form.BusyDropDownButton", [DropDownButton, _BusyButtonMixin], {});
+return BusyButton;
+}); \ No newline at end of file