Skip to content

Instantly share code, notes, and snippets.

@laukstein
Forked from alcides/gist:708202
Created November 25, 2010 21:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save laukstein/715944 to your computer and use it in GitHub Desktop.
Save laukstein/715944 to your computer and use it in GitHub Desktop.
/**
* http://www.20thingsilearned.com/js/twentythings.min.js
* 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 );
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment