Skip to content

@jxson /twentythings.history.js
Created

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
/**
* The history class is in charge of the browser
* history and URL's.
*/
TT.history = {};
/** */
TT.history.TABLE_OF_CONTENTS = 'table-of-things';
TT.history.HOME = 'home';
TT.history.FOREWORD = 'foreword';
TT.history.THEEND = 'theend';
TT.history.CREDITS = 'credits';
TT.history.previousHash = '';
TT.history.hashCheckInterval = -1;
TT.history.stack = [];
/**
*
*/
TT.history.initialize = function() {
if( TT.history.supportsHistoryPushState() ) {
$( window ).bind( "popstate", TT.history.onHistoryChanged );
}
else {
TT.history.hashCheckInterval = setInterval( TT.history.onCheckHash, 200 );
}
}
/**
* Check for history.pushState support.
*/
TT.history.supportsHistoryPushState = function() {
return ('pushState' in window.history) && window.history['pushState'] !== null;
}
/**
* Called at an interval for browsers that do not support
* the history API. Checks if the hash has changed and issues
* a navigation if so.
*/
TT.history.onCheckHash = function() {
if( document.location.hash !== TT.history.previousHash ) {
TT.history.navigateToPath( document.location.hash.slice( 1 ) );
TT.history.previousHash = document.location.hash;
}
}
/**
*
*/
TT.history.pushState = function( url ) {
if ( TT.history.supportsHistoryPushState() ) {
window.history.pushState('', '', url);
}
else {
TT.history.previousHash = '#' + url;
document.location.hash = url;
}
// Google Analytics tracking
TT.track( url );
TT.history.stack.push( url );
}
/**
*
*/
TT.history.onHistoryChanged = function( event ) {
if ( TT.history.supportsHistoryPushState() ) {
TT.history.navigateToPath( document.location.pathname );
}
}
/**
*
*/
TT.history.navigateToPath = function( pathname ) {
TT.navigation.hideTableOfContents();
// Extract the path name parts
var part1 = pathname.split("/")[1]; // The article ID or home/credits
var part2 = pathname.split("/")[2]; // The page number
if( !part1 || part1 == TT.history.HOME ) {
TT.navigation.goToHome( true );
}
else if( part1 == TT.history.CREDITS ) {
TT.navigation.goToCredits( true );
}
else if( part1 == TT.history.TABLE_OF_CONTENTS ) {
TT.navigation.showTableOfContents( true );
}
else {
if( part1 ) {
if( part2 ) {
TT.navigation.goToPage( part1, part2, true );
}
else {
TT.navigation.goToPage( part1, "1", true );
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.