forked from devote/HTML5-History-API
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhistory.min.js
More file actions
34 lines (34 loc) · 9.42 KB
/
history.min.js
File metadata and controls
34 lines (34 loc) · 9.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*!
* History API JavaScript Library v4.1.2
*
* Support: IE6+, FF3+, Opera 9+, Safari, Chrome and other
*
* Copyright 2011-2013, Dmitrii Pakhtinov ( spb.piksel@gmail.com )
*
* http://spb-piksel.ru/
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* Update: 2014-04-29 15:30
*/
(function(e){var i=!0,j=null,o=!1;function I(){}function h(a,b,c){if(a!=j&&""!==a&&!b)var b=h(),c=b.e,g=b.h,a=""+a,a=/^(?:[\w0-9]+\:)?\/\//.test(a)?0===a.indexOf("/")?g+a:a:g+"//"+b.g+(0===a.indexOf("/")?a:0===a.indexOf("?")?c+a:0===a.indexOf("#")?c+b.f+a:c.replace(/[^\/]+$/g,"")+a);else if(a=b?a:d.href,!m||c)a=a.replace(/^[^#]*/,"")||"#",a=d.protocol.replace(/:.*$|$/,":")+"//"+d.host+k.basepath+a.replace(RegExp("^#[/]?(?:"+k.type+")?"),"");N.href=a;var a=/(?:([\w0-9]+:))?(?:\/\/(?:[^@]*@)?([^\/:\?#]+)(?::([0-9]+))?)?([^\?#]*)(?:(\?[^#]+)|\?)?(?:(#.*))?/.exec(N.href),b=
a[2]+(a[3]?":"+a[3]:""),c=a[4]||"/",g=a[5]||"",e="#"===a[6]?"":a[6]||"",f=c+g+e,t=c.replace(RegExp("^"+k.basepath,"i"),k.type)+g;return{a:a[1]+"//"+b+f,h:a[1],g:b,i:a[2],k:a[3]||"",e:c,f:g,b:e,c:f,j:t,d:t+e}}function Y(){var a;try{a=e.sessionStorage,a.setItem(D+"t","1"),a.removeItem(D+"t")}catch(b){a={getItem:function(a){a=f.cookie.split(a+"=");return 1<a.length&&a.pop().split(";").shift()||"null"},setItem:function(a){var b={};if(b[d.href]=l.state)f.cookie=a+"="+q.stringify(b)}}}try{p=q.parse(a.getItem(D))||
{}}catch(c){p={}}u(v+"unload",function(){a.setItem(D,q.stringify(p))},o)}function w(a,b,c,g){var c=c||{set:I},d=!c.set,f=!c.get,t={configurable:i,set:function(){d=1},get:function(){f=1}};try{B(a,b,t),a[b]=a[b],B(a,b,c)}catch(ha){}if(!d||!f)if(a.__defineGetter__&&(a.__defineGetter__(b,t.get),a.__defineSetter__(b,t.set),a[b]=a[b],c.get&&a.__defineGetter__(b,c.get),c.set&&a.__defineSetter__(b,c.set)),(!d||!f)&&a===e){try{var Z=a[b];a[b]=j}catch(ia){}if("execScript"in e)e.execScript("Public "+b,"VBScript"),
e.execScript("var "+b+";","JavaScript");else try{B(a,b,{value:I})}catch(ja){}a[b]=Z}else if(!d||!f)try{try{var x=E.create(a);B(E.getPrototypeOf(x)===a?x:a,b,c);for(var h in a)"function"===typeof a[h]&&(x[h]=a[h].bind(a));try{g.call(x,x,a)}catch(l){}a=x}catch(k){B(a.constructor.prototype,b,c)}}catch(n){return o}return a}function $(a,b,c){c=c||{};a=a===J?d:a;c.set=c.set||function(c){a[b]=c};c.get=c.get||function(){return a[b]};return c}function aa(a,b,c){a in y?y[a].push(b):3<arguments.length?u(a,b,
c,arguments[3]):u(a,b,c)}function ba(a,b,c){var e=y[a];if(e)for(a=e.length;--a;){if(e[a]===b){e.splice(a,1);break}}else O(a,b,c)}function F(a,b){var c=(""+("string"===typeof a?a:a.type)).replace(/^on/,""),g=y[c];if(g){b="string"===typeof a?b:a;if(b.target==j)for(var d=["target","currentTarget","srcElement","type"];a=d.pop();)b=w(b,a,{get:"type"===a?function(){return c}:function(){return e}});(("popstate"===c?e.onpopstate:e.onhashchange)||I).call(e,b);for(var d=0,f=g.length;d<f;d++)g[d].call(e,b);
return i}return ca(a,b)}function P(){var a=f.createEvent?f.createEvent("Event"):f.createEventObject();a.initEvent?a.initEvent("popstate",o,o):a.type="popstate";a.state=l.state;F(a)}function r(a,b,c,e){m||(b=h(b),b.c!==h().c&&(z=e,c?d.replace("#"+b.d):d.hash=b.d));!G&&a&&(p[d.href]=a);C=o}function K(a){var b=z;z=d.href;if(b){Q!==d.href&&P();var a=a||e.event,b=h(z,i),c=h();a.oldURL||(a.oldURL=b.a,a.newURL=c.a);b.b!==c.b&&F(a)}}function R(a){setTimeout(function(){u("popstate",function(a){Q=d.href;G||
(a=w(a,"state",{get:function(){return l.state}}));F(a)},o)},0);!m&&(a!==i&&l.location)&&(S(l.location.hash),C&&(C=o,P()))}function da(a){var a=a||e.event,b;a:{for(b=a.target||a.srcElement;b;){if("A"===b.nodeName)break a;b=b.parentNode}b=void 0}var c="defaultPrevented"in a?a.defaultPrevented:a.returnValue===o;b&&("A"===b.nodeName&&!c)&&(c=h(),b=h(b.getAttribute("href",2)),c.a.split("#").shift()===b.a.split("#").shift()&&b.b&&(c.b!==b.b&&(l.location.hash=b.b),S(b.b),a.preventDefault?a.preventDefault():
a.returnValue=o))}function S(a){var b=f.getElementById(a=(a||"").replace(/^#/,""));b&&(b.id===a&&"A"===b.nodeName)&&(a=b.getBoundingClientRect(),e.scrollTo(H.scrollLeft||0,a.top+(H.scrollTop||0)-(H.clientTop||0)))}function ea(){var a=f.getElementsByTagName("script"),a=(a[a.length-1]||{}).src||"";(-1!==a.indexOf("?")?a.split("?").pop():"").replace(/(\w+)(?:=([^&]*))?/g,function(a,b,c){k[b]=(c||("basepath"===b?"/":"")).replace(/^(0|false)$/,"")});fa();u(v+"hashchange",K,o);var b=[J,s,ga,e,T,l];G&&delete T.state;
for(var c=0;c<b.length;c+=2)for(var d in b[c])if(b[c].hasOwnProperty(d))if("function"===typeof b[c][d])b[c+1][d]=b[c][d];else{a=$(b[c],d,b[c][d]);if(!w(b[c+1],d,a,function(a,d){if(d===l)e.history=l=b[c+1]=a}))return O(v+"hashchange",K,o),o;b[c+1]===e&&(y[d]=y[d.substr(2)]=[])}k.redirect&&l.redirect();!G&&q&&Y();if(!m)f[L](v+"click",da,o);"complete"===f.readyState?R(i):(!m&&h().c!==k.basepath&&(C=i),u(v+"load",R,o));return i}function fa(){function a(a){var b=[],d="VBHistoryClass"+(new Date).getTime()+
c++,f=["Class "+d],g;for(g in a)if(a.hasOwnProperty(g)){var h=a[g];h&&(h.get||h.set)?(h.get&&f.push("Public "+("_"===g?"Default ":"")+"Property Get ["+g+"]","Call VBCVal([(accessors)].["+g+"].get.call(me),["+g+"])","End Property"),h.set&&f.push("Public Property Let ["+g+"](val)",h="Call [(accessors)].["+g+"].set.call(me,val)\nEnd Property","Public Property Set ["+g+"](val)",h)):(b.push(g),f.push("Public ["+g+"]"))}f.push("Private [(accessors)]","Private Sub Class_Initialize()","Set [(accessors)]="+
d+"FactoryJS()","End Sub","End Class","Function "+d+"Factory()","Set "+d+"Factory=New "+d,"End Function");e.execScript(f.join("\n"),"VBScript");e[d+"FactoryJS"]=function(){return a};d=e[d+"Factory"]();for(f=0;f<b.length;f++)d[b[f]]=a[b[f]];return d}function b(a){var b=/[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,c={"\u0008":"\\b","\t":"\\t","\n":"\\n","\u000c":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return b.test(a)?
'"'+a.replace(b,function(a){return a in c?c[a]:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}var c=e.eval&&eval("/*@cc_on 1;@*/");if(c&&!(f.documentMode&&7<f.documentMode)){var g=w,k=h().a,m=f.createElement("iframe");m.src="javascript:true;";m=H.firstChild.appendChild(m).contentWindow;e.execScript("Public history\nFunction VBCVal(o,r) If IsObject(o) Then Set r=o Else r=o End If End Function","VBScript");s={_:{get:J.toString}};l={back:n.back,forward:n.forward,go:n.go,emulate:j,
_:{get:function(){return"[object History]"}}};q={parse:function(a){try{return(new Function("","return "+a))()}catch(b){return j}},stringify:function(a){var c=(typeof a).charCodeAt(2);if(114===c)a=b(a);else if(109===c)a=isFinite(a)?""+a:"null";else if(111===c||108===c)a=""+a;else if(106===c)if(a){var d=(c="[object Array]"===E.prototype.toString.call(a))?"[":"{";if(c)for(var e=0;e<a.length;e++)d+=(0==e?"":",")+q.stringify(a[e]);else for(e in a)a.hasOwnProperty(e)&&(d+=(1==d.length?"":",")+b(e)+":"+
q.stringify(a[e]));a=d+(c?"]":"}")}else a="null";else a="void 0";return a}};r=function(a,b,c,e,f){var g=m.document,b=h(b);C=o;if(b.c===h().c&&!f)a&&(p[d.href]=a);else{z=e;if(c)m.lfirst?(history.back(),r(a,b.a,0,e,1)):d.replace("#"+b.d);else if(b.a!=k||f)m.lfirst?f&&(f=0,a=p[d.href]):(m.lfirst=1,r(a,k,0,e,1)),g.open(),g.write('<script>lfirst=1;parent.location.hash="'+b.d.replace(/"/g,'\\"')+'";<\/script>'),g.close();!f&&a&&(p[d.href]=a)}};w=function(b,c,d,f){g.apply(this,arguments)||(b===s?s[c]=d:
b===l?(l[c]=d,"state"===c&&(s=a(s),e.history=l=a(l),e.execScript("var history = window.history;","JavaScript"))):b[c]=d.get&&d.get());return b};setInterval(function(){var a=h().a;if(a!=k){var b=f.createEventObject();b.oldURL=k;b.newURL=k=a;b.type="hashchange";K(b)}},100);e.JSON=q}}if(e.history){var f=e.document,H=f.documentElement,E=e.Object,q=e.JSON,d=e.location,n=e.history,l=n,M=n.pushState,U=n.replaceState,m=!!M,G="state"in n,B=E.defineProperty,s=w({},"t")?{}:f.createElement("a"),v="",L=e.addEventListener?
"addEventListener":(v="on")&&"attachEvent",V=e.removeEventListener?"removeEventListener":"detachEvent",W=e.dispatchEvent?"dispatchEvent":"fireEvent",u=e[L],O=e[V],ca=e[W],k={basepath:"/",redirect:0,type:"/"},D="__historyAPI__",N=f.createElement("a"),z=d.href,Q="",C=o,p={},y={},A=f.title,ga={onhashchange:j,onpopstate:j},X=function(a,b){var c=e.history!==n;c&&(e.history=n);a.apply(n,b);c&&(e.history=l)},T={redirect:function(a,b){k.basepath=b=b==j?k.basepath:b;k.type=a=a==j?k.type:a;if(e.top==e.self){var c=
h(j,o,i).c,f=d.pathname+d.search;m?(f=f.replace(/([^\/])$/,"$1/"),c!=b&&RegExp("^"+b+"$","i").test(f)&&d.replace(c)):f!=b&&(f=f.replace(/([^\/])\?/,"$1/?"),RegExp("^"+b,"i").test(f)&&d.replace(b+"#"+f.replace(RegExp("^"+b,"i"),a)+d.hash))}},pushState:function(a,b,c){var d=f.title;A!=j&&(f.title=A);M&&X(M,arguments);r(a,c);f.title=d;A=b},replaceState:function(a,b,c){var e=f.title;A!=j&&(f.title=A);delete p[d.href];U&&X(U,arguments);r(a,c,i);f.title=e;A=b},location:{set:function(a){e.location=a},get:function(){return m?
d:s}},state:{get:function(){return p[d.href]||j}}},J={assign:function(a){0===(""+a).indexOf("#")?r(j,a):d.assign(a)},reload:function(){d.reload()},replace:function(a){0===(""+a).indexOf("#")?r(j,a,i):d.replace(a)},toString:function(){return this.href},href:{get:function(){return h().a}},protocol:j,host:j,hostname:j,port:j,pathname:{get:function(){return h().e}},search:{get:function(){return h().f}},hash:{set:function(a){r(j,(""+a).replace(/^(#|)/,"#"),o,z)},get:function(){return h().b}}};ea()&&(l.emulate=
!m,e[L]=aa,e[V]=ba,e[W]=F)}})(window);