/js/jquery.history.js
https://github.com/jrub/silexslides · JavaScript · 113 lines · 93 code · 6 blank · 14 comment · 14 complexity · e34fe9dc5c2b54f3298f1308dca148c2 MD5 · raw file
- /*
- * jQuery history plugin
- *
- * sample page: http://www.serpere.info/jquery-history-plugin/samples/
- *
- * Copyright (c) 2006-2009 Taku Sano (Mikage Sawatari)
- * Copyright (c) 2010 Takayuki Miwa
- * Licensed under the MIT License:
- * http://www.opensource.org/licenses/mit-license.php
- *
- * Modified by Lincoln Cooper to add Safari support and only call the callback once during initialization
- * for msie when no initial hash supplied.
- */
-
- (function($) {
- var locationWrapper = {
- put: function(hash, win) {
- (win || window).location.hash = encodeURIComponent(hash);
- },
- get: function(win) {
- var hash = ((win || window).location.hash).replace(/^#/, '');
- return $.browser.fx ? hash : decodeURIComponent(hash);
- }
- };
-
- var iframeWrapper = {
- id: "__jQuery_history",
- init: function() {
- var html = '<iframe id="'+ this.id +'" style="display:none" src="javascript:false;" />';
- $("body").prepend(html);
- return this;
- },
- _document: function() {
- return $("#"+ this.id)[0].contentWindow.document;
- },
- put: function(hash) {
- var doc = this._document();
- doc.open();
- doc.close();
- locationWrapper.put(hash, doc);
- },
- get: function() {
- return locationWrapper.get(this._document());
- }
- };
-
- // public base interface
- var _ = {
- appState: undefined,
- callback: undefined,
- init: function(callback) {},
- check: function() {},
- load: function(hash) {}
- };
- $.history = _;
-
- var SimpleImpl = {
- init: function(callback) {
- _.callback = callback;
- var current_hash = locationWrapper.get();
- _.appState = current_hash;
- _.callback(current_hash);
- setInterval(_.check, 100);
- },
- check: function() {
- var current_hash = locationWrapper.get();
- if(current_hash != _.appState) {
- _.appState = current_hash;
- _.callback(current_hash);
- }
- },
- load: function(hash) {
- if(hash != _.appState) {
- locationWrapper.put(hash);
- _.appState = hash;
- _.callback(hash);
- }
- }
- };
-
- var IframeImpl = {
- init: function(callback) {
- _.callback = callback;
- var current_hash = locationWrapper.get();
- _.appState = current_hash;
- iframeWrapper.init().put(current_hash);
- _.callback(current_hash);
- setInterval(_.check, 100);
- },
- check: function() {
- var current_hash = iframeWrapper.get();
- if(current_hash != _.appState) {
- locationWrapper.put(current_hash);
- _.appState = current_hash;
- _.callback(current_hash);
- }
- },
- load: function(hash) {
- if(hash != _.appState) {
- locationWrapper.put(hash);
- iframeWrapper.put(hash);
- _.appState = hash;
- _.callback(hash);
- }
- }
- };
-
- if($.browser.msie && ($.browser.version < 8 || document.documentMode < 8)) {
- $.extend(_, IframeImpl);
- } else {
- $.extend(_, SimpleImpl);
- }
- })(jQuery);