148 lines
3.0 KiB
JavaScript
148 lines
3.0 KiB
JavaScript
/**
|
|
* Galleria History Plugin 2016-09-03
|
|
* http://galleria.io
|
|
*
|
|
* Copyright (c) 2010 - 2016 worse is better UG
|
|
* Licensed under the MIT license
|
|
* https://raw.github.com/worseisbetter/galleria/master/LICENSE
|
|
*
|
|
*/
|
|
|
|
(function( $, window ) {
|
|
|
|
/*global jQuery, Galleria, window */
|
|
|
|
Galleria.requires(1.25, 'The History Plugin requires Galleria version 1.2.5 or later.');
|
|
|
|
Galleria.History = (function() {
|
|
|
|
var onloads = [],
|
|
|
|
init = false,
|
|
|
|
loc = window.location,
|
|
|
|
doc = window.document,
|
|
|
|
ie = Galleria.IE,
|
|
|
|
support = 'onhashchange' in window && ( doc.mode === undefined || doc.mode > 7 ),
|
|
|
|
iframe,
|
|
|
|
get = function( winloc ) {
|
|
if( iframe && !support && Galleria.IE ) {
|
|
winloc = winloc || iframe.location;
|
|
} else {
|
|
winloc = loc;
|
|
}
|
|
return parseInt( winloc.hash.substr(2), 10 );
|
|
},
|
|
|
|
saved = get( loc ),
|
|
|
|
callbacks = [],
|
|
|
|
onchange = function() {
|
|
$.each( callbacks, function( i, fn ) {
|
|
fn.call( window, get() );
|
|
});
|
|
},
|
|
|
|
ready = function() {
|
|
$.each( onloads, function(i, fn) {
|
|
fn();
|
|
});
|
|
|
|
init = true;
|
|
},
|
|
|
|
setHash = function( val ) {
|
|
return '/' + val;
|
|
};
|
|
|
|
// always remove support if IE < 8
|
|
if ( support && ie < 8 ) {
|
|
support = false;
|
|
}
|
|
|
|
if ( !support ) {
|
|
|
|
$(function() {
|
|
|
|
var interval = window.setInterval(function() {
|
|
|
|
var hash = get();
|
|
|
|
if ( !isNaN( hash ) && hash != saved ) {
|
|
saved = hash;
|
|
loc.hash = setHash( hash );
|
|
onchange();
|
|
}
|
|
|
|
}, 50);
|
|
|
|
if ( ie ) {
|
|
|
|
$('<iframe tabindex="-1" title="empty">').hide().attr( 'src', 'about:blank' ).one('load', function() {
|
|
|
|
iframe = this.contentWindow;
|
|
|
|
ready();
|
|
|
|
}).insertAfter(doc.body);
|
|
|
|
} else {
|
|
ready();
|
|
}
|
|
});
|
|
} else {
|
|
ready();
|
|
}
|
|
|
|
return {
|
|
|
|
change: function( fn ) {
|
|
|
|
callbacks.push( fn );
|
|
|
|
if( support ) {
|
|
window.onhashchange = onchange;
|
|
}
|
|
},
|
|
|
|
set: function( val ) {
|
|
|
|
if ( isNaN( val ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( !support && ie ) {
|
|
|
|
this.ready(function() {
|
|
|
|
var idoc = iframe.document;
|
|
idoc.open();
|
|
idoc.close();
|
|
|
|
iframe.location.hash = setHash( val );
|
|
|
|
});
|
|
}
|
|
|
|
loc.hash = setHash( val );
|
|
},
|
|
|
|
ready: function(fn) {
|
|
if (!init) {
|
|
onloads.push(fn);
|
|
} else {
|
|
fn();
|
|
}
|
|
}
|
|
};
|
|
}());
|
|
|
|
}( jQuery, this ));
|
|
|