forked from devote/HTML5-History-API
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhistory.iegte8.min.js
27 lines (27 loc) · 6.27 KB
/
history.iegte8.min.js
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
/*
* History API JavaScript Library v4.0.5
*
* Support: IE8+, 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: 20.08.13 21:16
*/
(function(e){var i=!0,j=null,n=!1;function D(){}function k(a,b,c){if(a&&!b)var b=k(),c=b.d,f=b.h,a=/^(?:[\w0-9]+\:)?\/\//.test(a)?0===a.indexOf("/")?f+a:a:f+"//"+b.g+(0===a.indexOf("/")?a:0===a.indexOf("?")?c+a:0===a.indexOf("#")?c+b.e+a:c.replace(/[^\/]+$/g,"")+a);else if(a=b?a:d.href,!p||c)a=a.replace(/^[^#]*/,"")||"#",a=d.protocol+"//"+d.host+l.basepath+a.replace(RegExp("^#[/]?(?:"+l.type+")?"),"");I.href=a;var a=/(?:([\w0-9]+:))?(?:\/\/(?:[^@]*@)?([^\/:\?#]+)(?::([0-9]+))?)?([^\?#]*)(?:(\?[^#]+)|\?)?(?:(#.*))?/.exec(I.href),b=
a[2]+(a[3]?":"+a[3]:""),c=a[4]||"/",f=a[5]||"",e="#"===a[6]?"":a[6]||"",g=c+f+e,h=c.replace(RegExp("^"+l.basepath,"i"),l.type)+f;return{b:a[1]+"//"+b+g,h:a[1],g:b,i:a[2],k:a[3]||"",d:c,e:f,a:e,c:g,j:h,f:h+e}}function W(){var a="";if(t)a+=t.getItem(x);else{var b=g.cookie.split(x+"=");1<b.length&&(a+=b.pop().split(";").shift()||"null")}try{m=y.parse(a)||{}}catch(c){m={}}o(r+"unload",function(){if(t)t.setItem(x,y.stringify(m));else{var a={};if(a[d.href]=h.state)g.cookie=x+"="+y.stringify(a)}},n)}function z(a,
b,c,f){var c=c||{set:D},d=!c.set,g=!c.get,h={configurable:i,set:function(){d=1},get:function(){g=1}};try{u(a,b,h),a[b]=a[b],u(a,b,c)}catch(k){}if(!d||!g)if(a.__defineGetter__&&(a.__defineGetter__(b,h.get),a.__defineSetter__(b,h.set),a[b]=a[b],c.get&&a.__defineGetter__(b,c.get),c.set&&a.__defineSetter__(b,c.set)),(!d||!g)&&a===e){try{var l=a[b];a[b]=j}catch(p){}if("execScript"in e)e.execScript("Public "+b,"VBScript");else try{u(a,b,{value:D})}catch(q){}a[b]=l}else if(!d||!g)try{try{var m=E.create(a);
u(E.getPrototypeOf(m)===a?m:a,b,c);for(var o in a)"function"===typeof a[o]&&(m[o]=a[o].bind(a));try{f.call(m,m,a)}catch(r){}a=m}catch(s){u(a.constructor.prototype,b,c)}}catch(t){return n}return a}function X(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 A(a,b){var c=(""+("string"===typeof a?a:a.type)).replace(/^on/,""),f=s[c];if(f){b="string"===typeof a?b:a;if(b.target==j)for(var d=["target","currentTarget","srcElement","type"];a=
d.pop();)b=z(b,a,{get:"type"===a?function(){return c}:function(){return e}});(("popstate"===c?e.onpopstate:e.onhashchange)||D).call(e,b);for(var d=0,g=f.length;d<g;d++)f[d].call(e,b);return i}return Y(a,b)}function K(){var a=g.createEvent?g.createEvent("Event"):g.createEventObject();a.initEvent?a.initEvent("popstate",n,n):a.type="popstate";a.state=h.state;A(a)}function v(a,b,c,f){p||(b=k(b),b.c!==k().c&&(w=f,c?d.replace("#"+b.f):d.hash=b.f));!B&&a&&(m[d.href]=a);C=n}function L(a){if(w){M!==d.href&&
K();var a=a||e.event,b=k(w,i),c=k();a.oldURL||(a.oldURL=b.b,a.newURL=c.b);b.a!==c.a&&A(a)}w=d.href}function N(a){setTimeout(function(){o("popstate",function(a){M=d.href;B||(a=z(a,"state",{get:function(){return h.state}}));A(a)},n)},0);!p&&a!==i&&h.location&&(O(h.location.hash),C&&(C=n,K()))}function Z(a){var a=a||e.event,b=a.target||a.srcElement,c="defaultPrevented"in a?a.defaultPrevented:a.returnValue===n;b&&"A"===b.nodeName&&!c&&(c=k(),b=k(b.getAttribute("href",2)),c.b.split("#").shift()===b.b.split("#").shift()&&
b.a&&(c.a!==b.a&&(h.location.hash=b.a),O(b.a),a.preventDefault?a.preventDefault():a.returnValue=n))}function O(a){var b=g.getElementById(a=(a||"").replace(/^#/,""));b&&b.id===a&&"A"===b.nodeName&&(a=b.getBoundingClientRect(),e.scrollTo(F.scrollLeft||0,a.top+(F.scrollTop||0)-(F.clientTop||0)))}if(e.history){var g=e.document,F=g.documentElement,t=j,E=e.Object,y=e.JSON,d=e.location,q=e.history,h=q,G=q.pushState,P=q.replaceState,p=!!G,B="state"in q,u=E.defineProperty,Q=z({},"t")?{}:g.createElement("a"),
r="",H=e.addEventListener?"addEventListener":(r="on")&&"attachEvent",R=e.removeEventListener?"removeEventListener":"detachEvent",S=e.dispatchEvent?"dispatchEvent":"fireEvent",o=e[H],T=e[R],Y=e[S],l={basepath:"/",redirect:0,type:"/"},x="__historyAPI__",I=g.createElement("a"),w=d.href,M="",C=n,m={},s={},$={onhashchange:j,onpopstate:j},U=function(a,b){var c=e.history!==q;c&&(e.history=q);a.apply(q,b);c&&(e.history=h)},V={redirect:function(a,b){l.basepath=b=b==j?l.basepath:b;l.type=a=a==j?l.type:a;if(e.top==
e.self){var c=k(j,n,i).c,f=d.pathname+d.search;p?(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){G&&U(G,arguments);v(a,c)},replaceState:function(a,b,c){delete m[d.href];P&&U(P,arguments);v(a,c,i)},location:{set:function(a){e.location=a},get:function(){return p?d:Q}},state:{get:function(){return m[d.href]||j}}},J={assign:function(a){0===
(""+a).indexOf("#")?v(j,a):d.assign(a)},reload:function(){d.reload()},replace:function(a){0===(""+a).indexOf("#")?v(j,a,i):d.replace(a)},toString:function(){return this.href},href:{get:function(){return k().b}},protocol:j,host:j,hostname:j,port:j,pathname:{get:function(){return k().d}},search:{get:function(){return k().e}},hash:{set:function(a){v(j,(""+a).replace(/^(#|)/,"#"),n,w)},get:function(){return k().a}}};(function(){var a=g.getElementsByTagName("script"),a=(a[a.length-1]||{}).src||"";(-1!==
a.indexOf("?")?a.split("?").pop():"").replace(/(\w+)(?:=([^&]*))?/g,function(a,b,c){l[b]=(c||("basepath"===b?"/":"")).replace(/^(0|false)$/,"")});try{t=e.sessionStorage}catch(b){}o(r+"hashchange",L,n);var c=[J,Q,$,e,V,h];B&&delete V.state;for(var f=0;f<c.length;f+=2)for(var d in c[f])if(c[f].hasOwnProperty(d))if("function"===typeof c[f][d])c[f+1][d]=c[f][d];else{a=X(c[f],d,c[f][d]);if(!z(c[f+1],d,a,function(a,b){if(b===h)e.history=h=c[f+1]=a}))return T(r+"hashchange",L,n),n;c[f+1]===e&&(s[d]=s[d.substr(2)]=
[])}l.redirect&&h.redirect();!B&&y&&W();if(!p)g[H](r+"click",Z,n);"complete"===g.readyState?N(i):(!p&&k().c!==l.basepath&&(C=i),o(r+"load",N,n));return i})()&&(h.emulate=!p,e[H]=function(a,b,c){a in s?s[a].push(b):3<arguments.length?o(a,b,c,arguments[3]):o(a,b,c)},e[R]=function(a,b,c){var d=s[a];if(d)for(a=d.length;--a;){if(d[a]===b){d.splice(a,1);break}}else T(a,b,c)},e[S]=A)}})(window);