123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- //>>built
- define("dojox/app/controllers/History",["dojo/_base/lang","dojo/_base/declare","dojo/on","../Controller","../utils/hash","dojo/topic"],function(_1,_2,on,_3,_4,_5){
- return _2("dojox.app.controllers.History",_3,{_currentPosition:0,currentState:{},constructor:function(){
- this.events={"app-domNode":this.onDomNodeChange};
- if(this.app.domNode){
- this.onDomNodeChange({oldNode:null,newNode:this.app.domNode});
- }
- this.bind(window,"popstate",_1.hitch(this,this.onPopState));
- },onDomNodeChange:function(_6){
- if(_6.oldNode!=null){
- this.unbind(_6.oldNode,"startTransition");
- }
- this.bind(_6.newNode,"startTransition",_1.hitch(this,this.onStartTransition));
- },onStartTransition:function(_7){
- var _8=window.location.hash;
- var _9=_4.getTarget(_8,this.app.defaultView);
- var _a=_4.getParams(_8);
- var _b=_1.clone(_7.detail);
- _b.target=_b.title=_9;
- _b.url=_8;
- _b.params=_a;
- _b.id=this._currentPosition;
- if(history.length==1){
- history.pushState(_b,_b.href,_8);
- }
- _b.bwdTransition=_b.transition;
- _1.mixin(this.currentState,_b);
- history.replaceState(this.currentState,this.currentState.href,_8);
- this._currentPosition+=1;
- _7.detail.id=this._currentPosition;
- var _c=_7.detail.url||"#"+_7.detail.target;
- if(_7.detail.params){
- _c=_4.buildWithParams(_c,_7.detail.params);
- }
- _7.detail.fwdTransition=_7.detail.transition;
- history.pushState(_7.detail,_7.detail.href,_c);
- this.currentState=_1.clone(_7.detail);
- _5.publish("/app/history/pushState",_7.detail.target);
- },onPopState:function(_d){
- if((this.app.getStatus()!==this.app.lifecycle.STARTED)||!_d.state){
- return;
- }
- var _e=_d.state.id<this._currentPosition;
- _e?this._currentPosition-=1:this._currentPosition+=1;
- var _f=_1.mixin({reverse:_e?true:false},_d.state);
- _f.transition=_e?_f.bwdTransition:_f.fwdTransition;
- this.app.emit("app-transition",{viewId:_d.state.target,opts:_f});
- _5.publish("/app/history/popState",_d.state.target);
- }});
- });
|