public
Created

  • Download Gist
twentythings.history.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
/**
* 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 );
}
}
}
}

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.