Location: A review of cardiac cellular electrophysiology models @ f6a8f9030738 / dojo-presentation / js / dojo / dojox / widget / Loader.js

Author:
David Nickerson <nickerso@users.sourceforge.net>
Date:
2009-07-16 02:00:03+12:00
Desc:
the starting point for the HH tutorial example
Permanent Source URI:
https://models.fieldml.org/workspace/a1/rawfile/f6a8f90307388eb4b040ee3566b84d88b59247f7/dojo-presentation/js/dojo/dojox/widget/Loader.js

dojo.provide("dojox.widget.Loader");
dojo.experimental("dojox.widget.Loader"); 

dojo.require("dijit._Widget");
dojo.require("dijit._Templated"); 

dojo.declare("dojox.widget.Loader", [dijit._Widget,dijit._Templated], {
	// summary: a configurable global xhr-listener to display
	// a loading message during running xhr's or to simply provide 
	// base-level topic to subscribe to for custom loading messages 

	// loadIcon: String
	// 	location to the icon used. 
	loadIcon: dojo.moduleUrl("dojox.widget.Loader","icons/loading.gif"),

	// loadMessage: String
	//	string to use for progress loading
	loadMessage: 'Loading ...',

	// hasVisuals: Boolean
	// 	true to display a fixed loading message in TR cornder, false to unly provide
	//	"Loader" topic to subscribe to for your own custom loading message.	
	hasVisuals: true,

	// attachToPointer
	// 	true to use visual indicator where cursor is
	attachToPointer: true,

	// duration: Integer
	//	time in ms to toggle in/out the visual load indicator
	duration: 125,

	// _offset: Integer
	//	distance in px from the mouse pointer to show attachToPointer avatar
	_offset: 16, 

	// holder for mousemove connection
	_pointerConnect: null, 
	_xhrStart: null,
	_xhrEnd: null,

	templateString: '<div dojoAttachPoint="loadNode" class="dojoxLoader">'
		+'<img src="${loadIcon}" class="dojoxLoaderIcon"> <span dojoAttachPoint="loadMessageNode" class="dojoxLoaderMessage"></span>'
		+'</div>',
	
	postCreate: function(){
		// summary: setup the loader

		if(!this.hasVisuals){ 
			this.loadNode.style.display = "none"; // _destroy()?
		}else{
			if(this.attachToPointer){
				dojo.removeClass(this.loadNode,"dojoxLoader"); 
				dojo.addClass(this.loadNode,"dojoxLoaderPointer"); 
			}
			this._hide();
		}
		this._setMessage(this.loadMessage); 

		// FIXME: create our connections.  would be easier, and this might be redundant
		// if Deferred published something
		this._xhrStart = this.connect(dojo,"_ioSetArgs","_show"); 
		this._xhrEnd = this.connect(dojo.Deferred.prototype,"_fire","_hide"); 

	},

	_setMessage: function(/* String */ message){
		// summary: set's the message in the loader
		this.loadMessageNode.innerHTML = message;
	},

	_putLoader: function(/* Event */ e){
		// summary: place the floating loading element based on mousemove connection position
		dijit.placeOnScreen(this.loadNode,{ x: e.clientX+this._offset, y:e.clientY+this._offset }, ["TL","BR"]); 
	},

	_show: function(){
		// summary: publish and show progress indicator
		dojo.publish("Loader",[{ message: 'started' }]);
		if(this.hasVisuals){ 
			if(this.attachToPointer){
				this._pointerConnect = this.connect(document,"onmousemove","_putLoader");
			}
			dojo.style(this.loadNode, {
				opacity:0, display:""
			});
			dojo.fadeIn({ node: this.loadNode, duration:this.duration }).play(); 
		}
	},

	_hide: function(){
		// summary: publish "xhr ended" and hide progress indicator
		dojo.publish("Loader",[{ message: 'ended' }]);
		if(this.hasVisuals){ 
			if(this.attachToPointer){
				this.disconnect(this._pointerConnect); 
			}
			dojo.fadeOut({ 
				node: this.loadNode, 
				duration:this.duration,
				onEnd: dojo.partial(dojo.style, this.loadNode, "display", "none")
			}).play();
		}
	}

});