summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/app/module/history.js
diff options
context:
space:
mode:
authorTristan Zur <tzur@web.web.ccwn.org>2014-03-27 22:27:47 +0100
committerTristan Zur <tzur@web.web.ccwn.org>2014-03-27 22:27:47 +0100
commitb62676ca5d3d6f6ba3f019ea3f99722e165a98d8 (patch)
tree86722cb80f07d4569f90088eeaea2fc2f6e2ef94 /js/dojo/dojox/app/module/history.js
Initial commit of intern.ccwn.org contentsHEADmaster
Diffstat (limited to 'js/dojo/dojox/app/module/history.js')
-rw-r--r--js/dojo/dojox/app/module/history.js91
1 files changed, 91 insertions, 0 deletions
diff --git a/js/dojo/dojox/app/module/history.js b/js/dojo/dojox/app/module/history.js
new file mode 100644
index 0000000..56e6851
--- /dev/null
+++ b/js/dojo/dojox/app/module/history.js
@@ -0,0 +1,91 @@
+//>>built
+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));
+ }
+ });
+});