templates/jquery/history.html4.js in compass-jquery-plugin-0.3.2.8 vs templates/jquery/history.html4.js in compass-jquery-plugin-0.3.3.0
- old
+ new
@@ -5,602 +5,602 @@
* @copyright 2010-2011 Benjamin Arthur Lupton <contact@balupton.com>
* @license New BSD License <http://creativecommons.org/licenses/BSD/>
*/
(function(window, undefined) {
- "use strict";
+ "use strict";
- // --------------------------------------------------------------------------
- // Initialise
+ // --------------------------------------------------------------------------
+ // Initialise
- // Localise Globals
- var
- document = window.document, // Make sure we are using the correct document
- setTimeout = window.setTimeout || setTimeout,
- clearTimeout = window.clearTimeout || clearTimeout,
- setInterval = window.setInterval || setInterval,
- History = window.History = window.History || {}; // Public History Object
+ // Localise Globals
+ var
+ document = window.document, // Make sure we are using the correct document
+ setTimeout = window.setTimeout || setTimeout,
+ clearTimeout = window.clearTimeout || clearTimeout,
+ setInterval = window.setInterval || setInterval,
+ History = window.History = window.History || {}; // Public History Object
- // Check Existence
- if (typeof History.initHtml4 !== 'undefined') {
- throw new Error('History.js HTML4 Support has already been loaded...');
- }
+ // Check Existence
+ if (typeof History.initHtml4 !== 'undefined') {
+ throw new Error('History.js HTML4 Support has already been loaded...');
+ }
- // --------------------------------------------------------------------------
- // Initialise HTML4 Support
+ // --------------------------------------------------------------------------
+ // Initialise HTML4 Support
- // Initialise HTML4 Support
- History.initHtml4 = function() {
- // Initialise
- if (typeof History.initHtml4.initialized !== 'undefined') {
- // Already Loaded
- return false;
- }
- else {
- History.initHtml4.initialized = true;
- }
+ // Initialise HTML4 Support
+ History.initHtml4 = function() {
+ // Initialise
+ if (typeof History.initHtml4.initialized !== 'undefined') {
+ // Already Loaded
+ return false;
+ }
+ else {
+ History.initHtml4.initialized = true;
+ }
- // ----------------------------------------------------------------------
- // Properties
+ // ----------------------------------------------------------------------
+ // Properties
- /**
- * History.enabled
- * Is History enabled?
- */
- History.enabled = true;
+ /**
+ * History.enabled
+ * Is History enabled?
+ */
+ History.enabled = true;
- // ----------------------------------------------------------------------
- // Hash Storage
+ // ----------------------------------------------------------------------
+ // Hash Storage
- /**
- * History.savedHashes
- * Store the hashes in an array
- */
- History.savedHashes = [];
+ /**
+ * History.savedHashes
+ * Store the hashes in an array
+ */
+ History.savedHashes = [];
- /**
- * History.isLastHash(newHash)
- * Checks if the hash is the last hash
- * @param {string} newHash
- * @return {boolean} true
- */
- History.isLastHash = function(newHash) {
- // Prepare
- var oldHash = History.getHashByIndex();
+ /**
+ * History.isLastHash(newHash)
+ * Checks if the hash is the last hash
+ * @param {string} newHash
+ * @return {boolean} true
+ */
+ History.isLastHash = function(newHash) {
+ // Prepare
+ var oldHash = History.getHashByIndex();
- // Check
- var isLast = newHash === oldHash;
+ // Check
+ var isLast = newHash === oldHash;
- // Return isLast
- return isLast;
- };
+ // Return isLast
+ return isLast;
+ };
- /**
- * History.saveHash(newHash)
- * Push a Hash
- * @param {string} newHash
- * @return {boolean} true
- */
- History.saveHash = function(newHash) {
- // Check Hash
- if (History.isLastHash(newHash)) {
- return false;
- }
+ /**
+ * History.saveHash(newHash)
+ * Push a Hash
+ * @param {string} newHash
+ * @return {boolean} true
+ */
+ History.saveHash = function(newHash) {
+ // Check Hash
+ if (History.isLastHash(newHash)) {
+ return false;
+ }
- // Push the Hash
- History.savedHashes.push(newHash);
+ // Push the Hash
+ History.savedHashes.push(newHash);
- // Return true
- return true;
- };
+ // Return true
+ return true;
+ };
- /**
- * History.getHashByIndex()
- * Gets a hash by the index
- * @param {integer} index
- * @return {string}
- */
- History.getHashByIndex = function(index) {
- // Prepare
- var hash = null;
+ /**
+ * History.getHashByIndex()
+ * Gets a hash by the index
+ * @param {integer} index
+ * @return {string}
+ */
+ History.getHashByIndex = function(index) {
+ // Prepare
+ var hash = null;
- // Handle
- if (typeof index === 'undefined') {
- // Get the last inserted
- hash = History.savedHashes[History.savedHashes.length - 1];
- }
- else if (index < 0) {
- // Get from the end
- hash = History.savedHashes[History.savedHashes.length + index];
- }
- else {
- // Get from the beginning
- hash = History.savedHashes[index];
- }
+ // Handle
+ if (typeof index === 'undefined') {
+ // Get the last inserted
+ hash = History.savedHashes[History.savedHashes.length - 1];
+ }
+ else if (index < 0) {
+ // Get from the end
+ hash = History.savedHashes[History.savedHashes.length + index];
+ }
+ else {
+ // Get from the beginning
+ hash = History.savedHashes[index];
+ }
- // Return hash
- return hash;
- };
+ // Return hash
+ return hash;
+ };
- // ----------------------------------------------------------------------
- // Discarded States
+ // ----------------------------------------------------------------------
+ // Discarded States
- /**
- * History.discardedHashes
- * A hashed array of discarded hashes
- */
- History.discardedHashes = {};
+ /**
+ * History.discardedHashes
+ * A hashed array of discarded hashes
+ */
+ History.discardedHashes = {};
- /**
- * History.discardedStates
- * A hashed array of discarded states
- */
- History.discardedStates = {};
+ /**
+ * History.discardedStates
+ * A hashed array of discarded states
+ */
+ History.discardedStates = {};
- /**
- * History.discardState(State)
- * Discards the state by ignoring it through History
- * @param {object} State
- * @return {true}
- */
- History.discardState = function(discardedState, forwardState, backState) {
- //History.debug('History.discardState', arguments);
- // Prepare
- var discardedStateHash = History.getHashByState(discardedState);
+ /**
+ * History.discardState(State)
+ * Discards the state by ignoring it through History
+ * @param {object} State
+ * @return {true}
+ */
+ History.discardState = function(discardedState, forwardState, backState) {
+ //History.debug('History.discardState', arguments);
+ // Prepare
+ var discardedStateHash = History.getHashByState(discardedState);
- // Create Discard Object
- var discardObject = {
- 'discardedState': discardedState,
- 'backState': backState,
- 'forwardState': forwardState
- };
+ // Create Discard Object
+ var discardObject = {
+ 'discardedState': discardedState,
+ 'backState': backState,
+ 'forwardState': forwardState
+ };
- // Add to DiscardedStates
- History.discardedStates[discardedStateHash] = discardObject;
+ // Add to DiscardedStates
+ History.discardedStates[discardedStateHash] = discardObject;
- // Return true
- return true;
- };
+ // Return true
+ return true;
+ };
- /**
- * History.discardHash(hash)
- * Discards the hash by ignoring it through History
- * @param {string} hash
- * @return {true}
- */
- History.discardHash = function(discardedHash, forwardState, backState) {
- //History.debug('History.discardState', arguments);
- // Create Discard Object
- var discardObject = {
- 'discardedHash': discardedHash,
- 'backState': backState,
- 'forwardState': forwardState
- };
+ /**
+ * History.discardHash(hash)
+ * Discards the hash by ignoring it through History
+ * @param {string} hash
+ * @return {true}
+ */
+ History.discardHash = function(discardedHash, forwardState, backState) {
+ //History.debug('History.discardState', arguments);
+ // Create Discard Object
+ var discardObject = {
+ 'discardedHash': discardedHash,
+ 'backState': backState,
+ 'forwardState': forwardState
+ };
- // Add to discardedHash
- History.discardedHashes[discardedHash] = discardObject;
+ // Add to discardedHash
+ History.discardedHashes[discardedHash] = discardObject;
- // Return true
- return true;
- };
+ // Return true
+ return true;
+ };
- /**
- * History.discardState(State)
- * Checks to see if the state is discarded
- * @param {object} State
- * @return {bool}
- */
- History.discardedState = function(State) {
- // Prepare
- var StateHash = History.getHashByState(State);
+ /**
+ * History.discardState(State)
+ * Checks to see if the state is discarded
+ * @param {object} State
+ * @return {bool}
+ */
+ History.discardedState = function(State) {
+ // Prepare
+ var StateHash = History.getHashByState(State);
- // Check
- var discarded = History.discardedStates[StateHash] || false;
+ // Check
+ var discarded = History.discardedStates[StateHash] || false;
- // Return true
- return discarded;
- };
+ // Return true
+ return discarded;
+ };
- /**
- * History.discardedHash(hash)
- * Checks to see if the state is discarded
- * @param {string} State
- * @return {bool}
- */
- History.discardedHash = function(hash) {
- // Check
- var discarded = History.discardedHashes[hash] || false;
+ /**
+ * History.discardedHash(hash)
+ * Checks to see if the state is discarded
+ * @param {string} State
+ * @return {bool}
+ */
+ History.discardedHash = function(hash) {
+ // Check
+ var discarded = History.discardedHashes[hash] || false;
- // Return true
- return discarded;
- };
+ // Return true
+ return discarded;
+ };
- /**
- * History.recycleState(State)
- * Allows a discarded state to be used again
- * @param {object} data
- * @param {string} title
- * @param {string} url
- * @return {true}
- */
- History.recycleState = function(State) {
- //History.debug('History.recycleState', arguments);
- // Prepare
- var StateHash = History.getHashByState(State);
+ /**
+ * History.recycleState(State)
+ * Allows a discarded state to be used again
+ * @param {object} data
+ * @param {string} title
+ * @param {string} url
+ * @return {true}
+ */
+ History.recycleState = function(State) {
+ //History.debug('History.recycleState', arguments);
+ // Prepare
+ var StateHash = History.getHashByState(State);
- // Remove from DiscardedStates
- if (History.discardedState(State)) {
- delete History.discardedStates[StateHash];
- }
+ // Remove from DiscardedStates
+ if (History.discardedState(State)) {
+ delete History.discardedStates[StateHash];
+ }
- // Return true
- return true;
- };
+ // Return true
+ return true;
+ };
- // ----------------------------------------------------------------------
- // HTML4 HashChange Support
+ // ----------------------------------------------------------------------
+ // HTML4 HashChange Support
- if (History.emulated.hashChange) {
- /*
- * We must emulate the HTML4 HashChange Support by manually checking for hash changes
- */
+ if (History.emulated.hashChange) {
+ /*
+ * We must emulate the HTML4 HashChange Support by manually checking for hash changes
+ */
- /**
- * History.hashChangeInit()
- * Init the HashChange Emulation
- */
- History.hashChangeInit = function() {
- // Define our Checker Function
- History.checkerFunction = null;
+ /**
+ * History.hashChangeInit()
+ * Init the HashChange Emulation
+ */
+ History.hashChangeInit = function() {
+ // Define our Checker Function
+ History.checkerFunction = null;
- // Define some variables that will help in our checker function
- var
- lastDocumentHash = '';
+ // Define some variables that will help in our checker function
+ var
+ lastDocumentHash = '';
- // Handle depending on the browser
- if (History.isInternetExplorer()) {
- // IE6 and IE7
- // We need to use an iframe to emulate the back and forward buttons
+ // Handle depending on the browser
+ if (History.isInternetExplorer()) {
+ // IE6 and IE7
+ // We need to use an iframe to emulate the back and forward buttons
- // Create iFrame
- var
- iframeId = 'historyjs-iframe',
- iframe = document.createElement('iframe');
+ // Create iFrame
+ var
+ iframeId = 'historyjs-iframe',
+ iframe = document.createElement('iframe');
- // Adjust iFarme
- iframe.setAttribute('id', iframeId);
- iframe.style.display = 'none';
+ // Adjust iFarme
+ iframe.setAttribute('id', iframeId);
+ iframe.style.display = 'none';
- // Append iFrame
- document.body.appendChild(iframe);
+ // Append iFrame
+ document.body.appendChild(iframe);
- // Create initial history entry
- iframe.contentWindow.document.open();
- iframe.contentWindow.document.close();
+ // Create initial history entry
+ iframe.contentWindow.document.open();
+ iframe.contentWindow.document.close();
- // Define some variables that will help in our checker function
- var
- lastIframeHash = '',
- checkerRunning = false;
+ // Define some variables that will help in our checker function
+ var
+ lastIframeHash = '',
+ checkerRunning = false;
- // Define the checker function
- History.checkerFunction = function() {
- // Check Running
- if (checkerRunning) {
- return false;
- }
+ // Define the checker function
+ History.checkerFunction = function() {
+ // Check Running
+ if (checkerRunning) {
+ return false;
+ }
- // Update Running
- checkerRunning = true;
+ // Update Running
+ checkerRunning = true;
- // Fetch
- var
- documentHash = History.getHash() || '',
- iframeHash = History.unescapeHash(iframe.contentWindow.document.location.hash) || '';
+ // Fetch
+ var
+ documentHash = History.getHash() || '',
+ iframeHash = History.unescapeHash(iframe.contentWindow.document.location.hash) || '';
- // The Document Hash has changed (application caused)
- if (documentHash !== lastDocumentHash) {
- // Equalise
- lastDocumentHash = documentHash;
+ // The Document Hash has changed (application caused)
+ if (documentHash !== lastDocumentHash) {
+ // Equalise
+ lastDocumentHash = documentHash;
- // Create a history entry in the iframe
- if (iframeHash !== documentHash) {
- //History.debug('hashchange.checker: iframe hash change', 'documentHash (new):', documentHash, 'iframeHash (old):', iframeHash);
+ // Create a history entry in the iframe
+ if (iframeHash !== documentHash) {
+ //History.debug('hashchange.checker: iframe hash change', 'documentHash (new):', documentHash, 'iframeHash (old):', iframeHash);
- // Equalise
- lastIframeHash = iframeHash = documentHash;
+ // Equalise
+ lastIframeHash = iframeHash = documentHash;
- // Create History Entry
- iframe.contentWindow.document.open();
- iframe.contentWindow.document.close();
+ // Create History Entry
+ iframe.contentWindow.document.open();
+ iframe.contentWindow.document.close();
- // Update the iframe's hash
- iframe.contentWindow.document.location.hash = History.escapeHash(documentHash);
- }
+ // Update the iframe's hash
+ iframe.contentWindow.document.location.hash = History.escapeHash(documentHash);
+ }
- // Trigger Hashchange Event
- History.Adapter.trigger(window, 'hashchange');
- }
+ // Trigger Hashchange Event
+ History.Adapter.trigger(window, 'hashchange');
+ }
- // The iFrame Hash has changed (back button caused)
- else if (iframeHash !== lastIframeHash) {
- //History.debug('hashchange.checker: iframe hash out of sync', 'iframeHash (new):', iframeHash, 'documentHash (old):', documentHash);
+ // The iFrame Hash has changed (back button caused)
+ else if (iframeHash !== lastIframeHash) {
+ //History.debug('hashchange.checker: iframe hash out of sync', 'iframeHash (new):', iframeHash, 'documentHash (old):', documentHash);
- // Equalise
- lastIframeHash = iframeHash;
+ // Equalise
+ lastIframeHash = iframeHash;
- // Update the Hash
- History.setHash(iframeHash, false);
- }
+ // Update the Hash
+ History.setHash(iframeHash, false);
+ }
- // Reset Running
- checkerRunning = false;
+ // Reset Running
+ checkerRunning = false;
- // Return true
- return true;
- };
- }
- else {
- // We are not IE
- // Firefox 1 or 2, Opera
+ // Return true
+ return true;
+ };
+ }
+ else {
+ // We are not IE
+ // Firefox 1 or 2, Opera
- // Define the checker function
- History.checkerFunction = function() {
- // Prepare
- var documentHash = History.getHash();
+ // Define the checker function
+ History.checkerFunction = function() {
+ // Prepare
+ var documentHash = History.getHash();
- // The Document Hash has changed (application caused)
- if (documentHash !== lastDocumentHash) {
- // Equalise
- lastDocumentHash = documentHash;
+ // The Document Hash has changed (application caused)
+ if (documentHash !== lastDocumentHash) {
+ // Equalise
+ lastDocumentHash = documentHash;
- // Trigger Hashchange Event
- History.Adapter.trigger(window, 'hashchange');
- }
+ // Trigger Hashchange Event
+ History.Adapter.trigger(window, 'hashchange');
+ }
- // Return true
- return true;
- };
- }
+ // Return true
+ return true;
+ };
+ }
- // Apply the checker function
- setInterval(History.checkerFunction, History.options.hashChangeInterval);
+ // Apply the checker function
+ History.intervalList.push(setInterval(History.checkerFunction, History.options.hashChangeInterval));
- // Done
- return true;
- }; // History.hashChangeInit
+ // Done
+ return true;
+ }; // History.hashChangeInit
- // Bind hashChangeInit
- History.Adapter.onDomLoad(History.hashChangeInit);
+ // Bind hashChangeInit
+ History.Adapter.onDomLoad(History.hashChangeInit);
- } // History.emulated.hashChange
+ } // History.emulated.hashChange
- // ----------------------------------------------------------------------
- // HTML5 State Support
+ // ----------------------------------------------------------------------
+ // HTML5 State Support
- if (History.emulated.pushState) {
- /*
- * We must emulate the HTML5 State Management by using HTML4 HashChange
- */
+ if (History.emulated.pushState) {
+ /*
+ * We must emulate the HTML5 State Management by using HTML4 HashChange
+ */
- /**
- * History.onHashChange(event)
- * Trigger HTML5's window.onpopstate via HTML4 HashChange Support
- */
- History.onHashChange = function(event) {
- //History.debug('History.onHashChange', arguments);
+ /**
+ * History.onHashChange(event)
+ * Trigger HTML5's window.onpopstate via HTML4 HashChange Support
+ */
+ History.onHashChange = function(event) {
+ //History.debug('History.onHashChange', arguments);
- // Prepare
- var
- currentUrl = ((event && event.newURL) || document.location.href),
- currentHash = History.getHashByUrl(currentUrl),
- currentState = null,
- currentStateHash = null,
- currentStateHashExits = null;
+ // Prepare
+ var
+ currentUrl = ((event && event.newURL) || document.location.href),
+ currentHash = History.getHashByUrl(currentUrl),
+ currentState = null,
+ currentStateHash = null,
+ currentStateHashExits = null;
- // Check if we are the same state
- if (History.isLastHash(currentHash)) {
- // There has been no change (just the page's hash has finally propagated)
- //History.debug('History.onHashChange: no change');
- History.busy(false);
- return false;
- }
+ // Check if we are the same state
+ if (History.isLastHash(currentHash)) {
+ // There has been no change (just the page's hash has finally propagated)
+ //History.debug('History.onHashChange: no change');
+ History.busy(false);
+ return false;
+ }
- // Reset the double check
- History.doubleCheckComplete();
+ // Reset the double check
+ History.doubleCheckComplete();
- // Store our location for use in detecting back/forward direction
- History.saveHash(currentHash);
+ // Store our location for use in detecting back/forward direction
+ History.saveHash(currentHash);
- // Expand Hash
- if (currentHash && History.isTraditionalAnchor(currentHash)) {
- //History.debug('History.onHashChange: traditional anchor', currentHash);
- // Traditional Anchor Hash
- History.Adapter.trigger(window, 'anchorchange');
- History.busy(false);
- return false;
- }
+ // Expand Hash
+ if (currentHash && History.isTraditionalAnchor(currentHash)) {
+ //History.debug('History.onHashChange: traditional anchor', currentHash);
+ // Traditional Anchor Hash
+ History.Adapter.trigger(window, 'anchorchange');
+ History.busy(false);
+ return false;
+ }
- // Create State
- currentState = History.extractState(History.getFullUrl(currentHash || document.location.href, false), true);
+ // Create State
+ currentState = History.extractState(History.getFullUrl(currentHash || document.location.href, false), true);
- // Check if we are the same state
- if (History.isLastSavedState(currentState)) {
- //History.debug('History.onHashChange: no change');
- // There has been no change (just the page's hash has finally propagated)
- History.busy(false);
- return false;
- }
+ // Check if we are the same state
+ if (History.isLastSavedState(currentState)) {
+ //History.debug('History.onHashChange: no change');
+ // There has been no change (just the page's hash has finally propagated)
+ History.busy(false);
+ return false;
+ }
- // Create the state Hash
- currentStateHash = History.getHashByState(currentState);
+ // Create the state Hash
+ currentStateHash = History.getHashByState(currentState);
- // Check if we are DiscardedState
- var discardObject = History.discardedState(currentState);
- if (discardObject) {
- // Ignore this state as it has been discarded and go back to the state before it
- if (History.getHashByIndex(-2) === History.getHashByState(discardObject.forwardState)) {
- // We are going backwards
- //History.debug('History.onHashChange: go backwards');
- History.back(false);
- } else {
- // We are going forwards
- //History.debug('History.onHashChange: go forwards');
- History.forward(false);
- }
- return false;
- }
+ // Check if we are DiscardedState
+ var discardObject = History.discardedState(currentState);
+ if (discardObject) {
+ // Ignore this state as it has been discarded and go back to the state before it
+ if (History.getHashByIndex(-2) === History.getHashByState(discardObject.forwardState)) {
+ // We are going backwards
+ //History.debug('History.onHashChange: go backwards');
+ History.back(false);
+ } else {
+ // We are going forwards
+ //History.debug('History.onHashChange: go forwards');
+ History.forward(false);
+ }
+ return false;
+ }
- // Push the new HTML5 State
- //History.debug('History.onHashChange: success hashchange');
- History.pushState(currentState.data, currentState.title, currentState.url, false);
+ // Push the new HTML5 State
+ //History.debug('History.onHashChange: success hashchange');
+ History.pushState(currentState.data, currentState.title, currentState.url, false);
- // End onHashChange closure
- return true;
- };
- History.Adapter.bind(window, 'hashchange', History.onHashChange);
+ // End onHashChange closure
+ return true;
+ };
+ History.Adapter.bind(window, 'hashchange', History.onHashChange);
- /**
- * History.pushState(data,title,url)
- * Add a new State to the history object, become it, and trigger onpopstate
- * We have to trigger for HTML4 compatibility
- * @param {object} data
- * @param {string} title
- * @param {string} url
- * @return {true}
- */
- History.pushState = function(data, title, url, queue) {
- //History.debug('History.pushState: called', arguments);
+ /**
+ * History.pushState(data,title,url)
+ * Add a new State to the history object, become it, and trigger onpopstate
+ * We have to trigger for HTML4 compatibility
+ * @param {object} data
+ * @param {string} title
+ * @param {string} url
+ * @return {true}
+ */
+ History.pushState = function(data, title, url, queue) {
+ //History.debug('History.pushState: called', arguments);
- // Check the State
- if (History.getHashByUrl(url)) {
- throw new Error('History.js does not support states with fragement-identifiers (hashes/anchors).');
- }
+ // Check the State
+ if (History.getHashByUrl(url)) {
+ throw new Error('History.js does not support states with fragement-identifiers (hashes/anchors).');
+ }
- // Handle Queueing
- if (queue !== false && History.busy()) {
- // Wait + Push to Queue
- //History.debug('History.pushState: we must wait', arguments);
- History.pushQueue({
- scope: History,
- callback: History.pushState,
- args: arguments,
- queue: queue
- });
- return false;
- }
+ // Handle Queueing
+ if (queue !== false && History.busy()) {
+ // Wait + Push to Queue
+ //History.debug('History.pushState: we must wait', arguments);
+ History.pushQueue({
+ scope: History,
+ callback: History.pushState,
+ args: arguments,
+ queue: queue
+ });
+ return false;
+ }
- // Make Busy
- History.busy(true);
+ // Make Busy
+ History.busy(true);
- // Fetch the State Object
- var
- newState = History.createStateObject(data, title, url),
- newStateHash = History.getHashByState(newState),
- oldState = History.getState(false),
- oldStateHash = History.getHashByState(oldState),
- html4Hash = History.getHash();
+ // Fetch the State Object
+ var
+ newState = History.createStateObject(data, title, url),
+ newStateHash = History.getHashByState(newState),
+ oldState = History.getState(false),
+ oldStateHash = History.getHashByState(oldState),
+ html4Hash = History.getHash();
- // Store the newState
- History.storeState(newState);
- History.expectedStateId = newState.id;
+ // Store the newState
+ History.storeState(newState);
+ History.expectedStateId = newState.id;
- // Recycle the State
- History.recycleState(newState);
+ // Recycle the State
+ History.recycleState(newState);
- // Force update of the title
- History.setTitle(newState);
+ // Force update of the title
+ History.setTitle(newState);
- // Check if we are the same State
- if (newStateHash === oldStateHash) {
- //History.debug('History.pushState: no change', newStateHash);
- History.busy(false);
- return false;
- }
+ // Check if we are the same State
+ if (newStateHash === oldStateHash) {
+ //History.debug('History.pushState: no change', newStateHash);
+ History.busy(false);
+ return false;
+ }
- // Update HTML4 Hash
- if (newStateHash !== html4Hash && newStateHash !== History.getShortUrl(document.location.href)) {
- //History.debug('History.pushState: update hash', newStateHash, html4Hash);
- History.setHash(newStateHash, false);
- return false;
- }
+ // Update HTML4 Hash
+ if (newStateHash !== html4Hash && newStateHash !== History.getShortUrl(document.location.href)) {
+ //History.debug('History.pushState: update hash', newStateHash, html4Hash);
+ History.setHash(newStateHash, false);
+ return false;
+ }
- // Update HTML5 State
- History.saveState(newState);
+ // Update HTML5 State
+ History.saveState(newState);
- // Fire HTML5 Event
- //History.debug('History.pushState: trigger popstate');
- History.Adapter.trigger(window, 'statechange');
- History.busy(false);
+ // Fire HTML5 Event
+ //History.debug('History.pushState: trigger popstate');
+ History.Adapter.trigger(window, 'statechange');
+ History.busy(false);
- // End pushState closure
- return true;
- };
+ // End pushState closure
+ return true;
+ };
- /**
- * History.replaceState(data,title,url)
- * Replace the State and trigger onpopstate
- * We have to trigger for HTML4 compatibility
- * @param {object} data
- * @param {string} title
- * @param {string} url
- * @return {true}
- */
- History.replaceState = function(data, title, url, queue) {
- //History.debug('History.replaceState: called', arguments);
+ /**
+ * History.replaceState(data,title,url)
+ * Replace the State and trigger onpopstate
+ * We have to trigger for HTML4 compatibility
+ * @param {object} data
+ * @param {string} title
+ * @param {string} url
+ * @return {true}
+ */
+ History.replaceState = function(data, title, url, queue) {
+ //History.debug('History.replaceState: called', arguments);
- // Check the State
- if (History.getHashByUrl(url)) {
- throw new Error('History.js does not support states with fragement-identifiers (hashes/anchors).');
- }
+ // Check the State
+ if (History.getHashByUrl(url)) {
+ throw new Error('History.js does not support states with fragement-identifiers (hashes/anchors).');
+ }
- // Handle Queueing
- if (queue !== false && History.busy()) {
- // Wait + Push to Queue
- //History.debug('History.replaceState: we must wait', arguments);
- History.pushQueue({
- scope: History,
- callback: History.replaceState,
- args: arguments,
- queue: queue
- });
- return false;
- }
+ // Handle Queueing
+ if (queue !== false && History.busy()) {
+ // Wait + Push to Queue
+ //History.debug('History.replaceState: we must wait', arguments);
+ History.pushQueue({
+ scope: History,
+ callback: History.replaceState,
+ args: arguments,
+ queue: queue
+ });
+ return false;
+ }
- // Make Busy
- History.busy(true);
+ // Make Busy
+ History.busy(true);
- // Fetch the State Objects
- var
- newState = History.createStateObject(data, title, url),
- oldState = History.getState(false),
- previousState = History.getStateByIndex(-2);
+ // Fetch the State Objects
+ var
+ newState = History.createStateObject(data, title, url),
+ oldState = History.getState(false),
+ previousState = History.getStateByIndex(-2);
- // Discard Old State
- History.discardState(oldState, newState, previousState);
+ // Discard Old State
+ History.discardState(oldState, newState, previousState);
- // Alias to PushState
- History.pushState(newState.data, newState.title, newState.url, false);
+ // Alias to PushState
+ History.pushState(newState.data, newState.title, newState.url, false);
- // End replaceState closure
- return true;
- };
+ // End replaceState closure
+ return true;
+ };
- /**
- * Ensure initial state is handled correctly
- */
- if (History.getHash() && !History.emulated.hashChange) {
- History.Adapter.onDomLoad(function() {
- History.Adapter.trigger(window, 'hashchange');
- });
- }
+ /**
+ * Ensure initial state is handled correctly
+ */
+ if (History.getHash() && !History.emulated.hashChange) {
+ History.Adapter.onDomLoad(function() {
+ History.Adapter.trigger(window, 'hashchange');
+ });
+ }
- } // History.emulated.pushState
+ } // History.emulated.pushState
- }; // History.initHtml4
+ }; // History.initHtml4
- // Try and Initialise History
- History.init();
+ // Try and Initialise History
+ History.init();
})(window);