| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | define("dojox/app/module/history", ["dojo/_base/kernel","dojo/_base/lang", "dojo/_base/declare", "dojo/on"],function(dojo,dlang,declare,listen){	return declare(null, {		postCreate: function(params,node){			this.inherited(arguments);			var hash=window.location.hash;			this._startView= ((hash && hash.charAt(0)=="#")?hash.substr(1):hash)||this.defaultView;			listen(this.domNode, "startTransition", dojo.hitch(this, "onStartTransition"));			listen(window,"popstate", dojo.hitch(this, "onPopState"));		},		startup: function(){			this.inherited(arguments);		},		onStartTransition: function(evt){			console.log("onStartTransition", evt.detail.href, history.state);			if (evt.preventDefault){				evt.preventDefault();			}			var target = evt.detail.target;			var regex = /#(.+)/;			if(!target && regex.test(evt.detail.href)){				target = evt.detail.href.match(regex)[1];			}						//prevent event from bubbling to window and being			//processed by dojox/mobile/ViewController			evt.cancelBubble = true;			if(evt.stopPropagation){			    evt.stopPropagation();			}						dojo.when(this.transition(target, dojo.mixin({reverse: false},evt.detail)), dojo.hitch(this, function(){				history.pushState(evt.detail,evt.detail.href, evt.detail.url);			}))			},		/*		onHashChange: function(evt){			var target = window.location.hash.substr(1);;			var evt = {target: window.location.hash, url: "#" + target,title:null};			//this.onStartTransition(evt);		},		*/		onPopState: function(evt){			// Check application status, if application status not STARTED, do nothing.			// when clean browser's cache then refresh the current page, it will trigger popState event. 			// but the application not start, it will throw an error.			if(this.getStatus() !== this.lifecycle.STARTED ){				return;			}			var state = evt.state;			if (!state){				if(!this._startView && window.location.hash){					state={						target: (location.hash && location.hash.charAt(0)=="#")?location.hash.substr(1):location.hash,						url: location.hash					}						}else{					state={};					}			}			var target = state.target || this._startView || this.defaultView;			if (this._startView){				this._startView=null;			}			var title = state.title||null;			var href = state.url || null;			if (evt._sim) {				history.replaceState(state, title, href );			}			/*			dojo.when(this.transition(window.history.state, {rev: true}), dojo.hitch(this, function(){				console.log('done transition from onPopState');			}))			*/			var currentState = history.state;			this.transition(target, dojo.mixin({reverse: true},state));			}	});	});
 |