comparison gis_gui/lib/jquery.history.js @ 63:7f008e782563

add gui files to product via FileSystemSite
author casties
date Fri, 05 Nov 2010 18:52:55 +0100
parents
children
comparison
equal deleted inserted replaced
62:3905385c8854 63:7f008e782563
1 /**
2 * jQuery history event v0.1
3 * Copyright (c) 2008 Tom Rodenberg <tarodenberg gmail com>
4 * Licensed under the GPL (http://www.gnu.org/licenses/gpl.html) license.
5 */
6 (function($) {
7 var currentHash, previousNav, timer, hashTrim = /^.*#/;
8
9 var msie = {
10 iframe: null,
11 getDoc: function() {
12 return msie.iframe.contentWindow.document;
13 },
14 getHash: function() {
15 return msie.getDoc().location.hash;
16 },
17 setHash: function(hash) {
18 var d = msie.getDoc();
19 d.open();
20 d.close();
21 d.location.hash = hash;
22 }
23 };
24
25 var historycheck = function() {
26 var hash = msie.iframe ? msie.getHash() : location.hash;
27 if (hash != currentHash) {
28 currentHash = hash;
29 if (msie.iframe) {
30 location.hash = currentHash;
31 }
32 var current = $.history.getCurrent();
33 $.event.trigger('history', [current, previousNav]);
34 previousNav = current;
35 }
36 };
37
38 $.history = {
39 add: function(hash) {
40 hash = '#' + hash.replace(hashTrim, '');
41 if (currentHash != hash) {
42 var previous = $.history.getCurrent();
43 location.hash = currentHash = hash;
44 if (msie.iframe) {
45 msie.setHash(currentHash);
46 }
47 $.event.trigger('historyadd', [$.history.getCurrent(), previous]);
48 }
49 if (!timer) {
50 timer = setInterval(historycheck, 100);
51 }
52 },
53 getCurrent: function() {
54 return currentHash.replace(hashTrim, '');
55 }
56 };
57
58 $.fn.history = function(fn) {
59 $(this).bind('history', fn);
60 };
61
62 $.fn.historyadd = function(fn) {
63 $(this).bind('historyadd', fn);
64 };
65
66 $(function() {
67 currentHash = location.hash;
68 if ($.browser.msie) {
69 msie.iframe = $('<iframe style="display:none" src="javascript:false;"></iframe>').prependTo('body')[0];
70 msie.setHash(currentHash);
71 currentHash = msie.getHash();
72 }
73 });
74 })(jQuery);