X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=Roo%2FHistory.js;h=91ae8d22f71197b3e0a5a4c5f89d7ca2f31ac0da;hb=0b69a11b1055a6d3a3fd0719bdd58b5a235de0e4;hp=a0876f0485d719b391cdd480348210174cf97ca7;hpb=8151f33e08b435f30a723801aa321270104fc376;p=roojs1 diff --git a/Roo/History.js b/Roo/History.js index a0876f0485..91ae8d22f7 100644 --- a/Roo/History.js +++ b/Roo/History.js @@ -1,17 +1,22 @@ /** * Originally based of this code... - refactored for Roo... - * + * https://github.com/browserstate/history.js + * History.js Core * @author Benjamin Arthur Lupton * @copyright 2010-2011 Benjamin Arthur Lupton * @license New BSD License + * + * Hackily modifyed by alan@roojs.com + * + * this is not initialized automatically.. + * must call Roo.History.init( { ... options... }); + * + * TOTALLY UNTESTED... + * + * Documentation to be done.... */ - -// this is not initialized automatically.. -// must call Roo.History.init( { ... options... }); - - Roo.History = { @@ -208,20 +213,14 @@ Roo.History = { Roo.apply(this,options) - // Check Load Status of Adapter - //if ( typeof this.Adapter === 'undefined' ) { - // return false; - //} - + // Check Load Status of Core - if ( typeof this.initCore !== 'undefined' ) { - this.initCore(); - } - + this.initCore(); + // Check Load Status of HTML4 Support - if ( typeof this.initHtml4 !== 'undefined' ) { - this.initHtml4(); - } + //if ( typeof this.initHtml4 !== 'undefined' ) { + // this.initHtml4(); + //} this.initEmulated(); @@ -241,7 +240,7 @@ Roo.History = { - this.Adapter.bind(window,'popstate',this.onPopState); + Roo.get(window).on('popstate',this.onPopState, this); /** @@ -258,8 +257,8 @@ Roo.History = { this.intervalList.push(setInterval(this.onUnload,this.storeInterval)); // For Other Browsers - this.Adapter.bind(window,'beforeunload',this.onUnload); - this.Adapter.bind(window,'unload',this.onUnload); + Roo.get(window).on('beforeunload',this.onUnload,this); + Roo.get(window).on('unload',this.onUnload, this); } else { this.onUnload = emptyFunction; @@ -270,7 +269,7 @@ Roo.History = { /** * Clear Intervals on exit to prevent memory leaks */ - this.Adapter.bind(window,"unload",this.clearAllIntervals); + Roo.get(window).on('unload',this.clearAllIntervals, this); /** * Create the initial State @@ -304,14 +303,14 @@ Roo.History = { */ // Setup Alias - this.Adapter.bind(window,'hashchange',function(){ - _this.Adapter.trigger(window,'popstate'); - }); + Roo.get(window).on('hashchange',function(){ + Roo.get(window).fireEvent('popstate'); + }, this); // Initialise Alias if ( this.getHash() ) { - this.Adapter.onDomLoad(function(){ - _this.Adapter.trigger(window,'hashchange'); + Roo.onReady(function(){ + Roo.get(window).fireEvent('hashchange'); }); } } @@ -1301,7 +1300,7 @@ Roo.History = { // Wait + Push to Queue //this.debug('this.setHash: we must wait', arguments); this.pushQueue({ - scope: this. + scope: this, callback: this.setHash, args: arguments, queue: queue @@ -1434,6 +1433,8 @@ Roo.History = { */ busy : function(value){ // Apply + + var _this = this; if ( typeof value !== 'undefined' ) { //this.debug('this.busy: changing ['+(this.busy.flag||false)+'] to ['+(value||false)+']', this.queues.length); this.busy_flag = value; @@ -1445,17 +1446,20 @@ Roo.History = { // Queue if ( !this.busy_flag ) { + + + // Execute the next item in the queue window.clearTimeout(this.busy.timeout); var fireNext = function(){ var i, queue, item; - if ( this.busy_flag ) return; - for ( i=this.queues.length-1; i >= 0; --i ) { - queue = this.queues[i]; + if ( _this.busy_flag ) return; + for ( i=_this.queues.length-1; i >= 0; --i ) { + queue = _this.queues[i]; if ( queue.length === 0 ) continue; item = queue.shift(); - this.fireQueueItem(item); - this.busy.timeout = window.setTimeout(fireNext,this.busyDelay); + _this.fireQueueItem(item); + _this.busy.timeout = window.setTimeout(fireNext,_this.busyDelay); } }; this.busy.timeout = window.setTimeout(fireNext,this.busyDelay); @@ -1568,7 +1572,9 @@ Roo.History = { * Create a double check * @return {Roo.History} */ - doubleCheck : function(tryAgain){ + doubleCheck : function(tryAgain) + { + var _this = this; // Reset this.stateChanged = false; this.doubleCheckClear(); @@ -1579,8 +1585,8 @@ Roo.History = { // Apply Check this.doubleChecker = window.setTimeout( function(){ - this.doubleCheckClear(); - if ( !this.stateChanged ) { + _this.doubleCheckClear(); + if ( !_this.stateChanged ) { //this.debug('History.doubleCheck: State has not yet changed, trying again', arguments); // Re-Attempt tryAgain(); @@ -1629,7 +1635,7 @@ Roo.History = { // Apply the New State //this.debug('this.safariStatePoll: trigger'); - this.Adapter.trigger(window,'popstate'); + Roo.get(window).fireEvent('popstate'); // Chain return this; @@ -1644,9 +1650,10 @@ Roo.History = { * Send the browser history back one item * @param {Integer} queue [optional] */ - back : function(queue){ + back : function(queue) + { //this.debug('this.back: called', arguments); - + var _this = this; // Handle Queueing if ( queue !== false && this.busy() ) { // Wait + Push to Queue @@ -1665,7 +1672,7 @@ Roo.History = { // Fix certain browser bugs that prevent the state from changing this.doubleCheck(function(){ - this.back(false); + _this.back(false); }); // Go back @@ -1778,7 +1785,7 @@ Roo.History = { else { // Traditional Anchor //this.debug('this.onPopState: traditional anchor', currentHash); - this.Adapter.trigger(window,'anchorchange'); + Roo.get(window).fireEvent('anchorchange'); this.busy(false); } @@ -1786,9 +1793,10 @@ Roo.History = { this.expectedStateId = false; return false; } + stateId = (event && event.browserEvent && event.browserEvent['state']) || (extra && extra['state']) || undefined; // Ensure - stateId = this.Adapter.extractEventData('state',event,extra) || false; + //stateId = this.Adapter.extractEventData('state',event,extra) || false; // Fetch State if ( stateId ) { @@ -1829,7 +1837,7 @@ Roo.History = { this.setTitle(newState); // Fire Our Event - this.Adapter.trigger(window,'statechange'); + Roo.get(window).fireEvent('statechange'); this.busy(false); // Return true @@ -1892,7 +1900,7 @@ Roo.History = { history.pushState(newState.id,newState.title,newState.url); // Fire HTML5 Event - this.Adapter.trigger(window,'popstate'); + Roo.get(window).fireEvent('popstate'); } // End pushState closure @@ -1949,7 +1957,7 @@ Roo.History = { history.replaceState(newState.id,newState.title,newState.url); // Fire HTML5 Event - this.Adapter.trigger(window,'popstate'); + Roo.get(window).fireEvent('popstate'); } // End replaceState closure @@ -2032,6 +2040,4 @@ Roo.History = { } } } -} - - \ No newline at end of file +}; \ No newline at end of file