123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- 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.appendChild(document.createTextNode(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;
- });
|