/**
* Originally based of this code... - refactored for Roo...
- *
+ * https://github.com/browserstate/history.js
+
* History.js Core
* @author Benjamin Arthur Lupton <contact@balupton.com>
* @copyright 2010-2011 Benjamin Arthur Lupton <contact@balupton.com>
* @license New BSD License <http://creativecommons.org/licenses/BSD/>
+ *
+ * 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 = {
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();
- this.Adapter.bind(window,'popstate',this.onPopState);
+ Roo.get(window).on('popstate',this.onPopState, this);
/**
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;
/**
* 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
*/
// 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');
});
}
}
*/
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;
// 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);
* Create a double check
* @return {Roo.History}
*/
- doubleCheck : function(tryAgain){
+ doubleCheck : function(tryAgain)
+ {
+ var _this = this;
// Reset
this.stateChanged = false;
this.doubleCheckClear();
// 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();
// Apply the New State
//this.debug('this.safariStatePoll: trigger');
- this.Adapter.trigger(window,'popstate');
+ Roo.get(window).fireEvent('popstate');
// Chain
return this;
* 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
// Fix certain browser bugs that prevent the state from changing
this.doubleCheck(function(){
- this.back(false);
+ _this.back(false);
});
// Go back
else {
// Traditional Anchor
//this.debug('this.onPopState: traditional anchor', currentHash);
- this.Adapter.trigger(window,'anchorchange');
+ Roo.get(window).fireEvent('anchorchange');
this.busy(false);
}
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 ) {
this.setTitle(newState);
// Fire Our Event
- this.Adapter.trigger(window,'statechange');
+ Roo.get(window).fireEvent('statechange');
this.busy(false);
// Return true
history.pushState(newState.id,newState.title,newState.url);
// Fire HTML5 Event
- this.Adapter.trigger(window,'popstate');
+ Roo.get(window).fireEvent('popstate');
}
// End pushState closure
history.replaceState(newState.id,newState.title,newState.url);
// Fire HTML5 Event
- this.Adapter.trigger(window,'popstate');
+ Roo.get(window).fireEvent('popstate');
}
// End replaceState closure
}
}
}
-};
-
-
\ No newline at end of file
+};
\ No newline at end of file