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));
- }
- });
- });
|