/** * 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 ); //$('#pagination-next p.thing span').text( element.parent().index() + 1 ); //$('#pagination-next p.number span').text( $( "#pages section.current" ).index() + 1 ); } /** * */ 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 ); } } } }