forked from asual/jquery-address
/
jquery.address-1.2.min.js
25 lines (25 loc) · 7.28 KB
/
jquery.address-1.2.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
/*
* jQuery Address Plugin v1.2
* http://www.asual.com/jquery/address/
*
* Copyright (c) 2009-2010 Rostislav Hristov
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Date: 2010-03-02 09:29:29 +0200 (Tue, 02 Mar 2010)
*/
(function(d){d.address=function(){var z=function(a){d(d.address).trigger(d.extend(d.Event(a),function(){for(var b={},g=d.address.parameterNames(),e=0,p=g.length;e<p;e++)b[g[e]]=d.address.parameter(g[e]);return{value:d.address.value(),path:d.address.path(),pathNames:d.address.pathNames(),parameterNames:g,parameters:b,queryString:d.address.queryString()}}.call(d.address)))},u=function(a,b,g){if(g||b)d(d.address).bind(a,g||b,g&&b);return d.address},s=function(){var a=c.href.indexOf("#");return a!=-1?
S(H(c.href.substr(a+1))):""},T=function(a,b){if(k.strict)a=b?a.substr(0,1)!="/"?"/"+a:a:a==""?"/":a;return a},I=function(a,b){return t&&c.protocol=="file:"?b?f.replace(/\?/,"%3F"):f.replace(/%253F/,"?"):a},U=function(a){for(var b,g,e=0,p=a.childNodes.length;e<p;e++){if(a.childNodes[e].src)b=String(a.childNodes[e].src);if(g=U(a.childNodes[e]))b=g}return b},F=function(){if(!J){var a=s(),b=f!=a;if(A&&l<523){if(B!=D.length){B=D.length;if(typeof v[B-1]!=w)f=v[B-1];E(m)}}else if(t&&l<7&&b)c.reload();else if(b){f=
a;E(m)}}},E=function(a){z("change");z(a?"internalChange":"externalChange");C(V,10)},V=function(){var a=(c.pathname+(/\/$/.test(c.pathname)?"":"/")+d.address.value()).replace(/\/\//,"/").replace(/^\/$/,""),b=window[k.tracker];if(typeof b==K)b(a);else if(typeof _gaq!=w&&typeof _gaq.push==K)_gaq.push(["_trackPageview",a]);else if(typeof pageTracker!=w&&typeof pageTracker._trackPageview==K)pageTracker._trackPageview(a);else typeof urchinTracker==K&&urchinTracker(a)},W=function(){var a=h.contentWindow.document;
a.open();a.write("<html><head><title>"+i.title+"</title><script>var "+q+' = "'+s()+'";<\/script></head></html>');a.close()},Y=function(){if(!X){X=j;if(t&&l<8){var a=i.getElementsByTagName("frameset")[0];h=i.createElement((a?"":"i")+"frame");if(a){a.insertAdjacentElement("beforeEnd",h);a[a.cols?"cols":"rows"]+=",0";h.src="javascript:false";h.noResize=j;h.frameBorder=h.frameSpacing=0}else{h.src="javascript:false";h.style.display="none";i.body.insertAdjacentElement("afterBegin",h)}C(function(){d(h).bind("load",
function(){var b=h.contentWindow;f=typeof b[q]!=w?b[q]:"";if(f!=s()){E(m);c.hash=I(f,j)}});typeof h.contentWindow[q]==w&&W()},50)}else if(A){if(l<418){d(i.body).append('<form id="'+q+'" style="position:absolute;top:-9999px;" method="get"></form>');M=i.getElementById(q)}if(typeof c[q]==w)c[q]={};if(typeof c[q][c.pathname]!=w)v=c[q][c.pathname].split(",")}C(function(){z("init");E(m)},1);if(t&&l>7||!t&&"on"+G in o)if(o.addEventListener)o.addEventListener(G,F,false);else o.attachEvent&&o.attachEvent("on"+
G,F);else ba(F,50);d("a[rel*=address:]").address()}},ca=function(){if(o.removeEventListener)o.removeEventListener(G,F,false);else o.detachEvent&&o.detachEvent("on"+G,F)},q="jQueryAddress",K="function",w="undefined",G="hashchange",j=true,m=false,n=d.browser,l=parseFloat(d.browser.version),Z=n.mozilla,t=n.msie,r=n.opera,A=n.safari,N=m,o=function(){try{return top.document!==undefined?top:window}catch(a){return window}}(),i=o.document,D=o.history,c=o.location,ba=setInterval,C=setTimeout,H=decodeURI,S=
encodeURI;n=navigator.userAgent;var h,M,x=U(document),$=x?x.indexOf("?"):-1,da=i.title,B=D.length,J=m,X=m,O=j,aa=j,L=m,v=[],f=s(),k={autoUpdate:j,history:j,strict:j};if(t){l=parseFloat(n.substr(n.indexOf("MSIE")+4));if(i.documentMode&&i.documentMode!=l)l=i.documentMode!=8?7:8}if(N=Z&&l>=1||t&&l>=6||r&&l>=9.5||A&&l>=312){for(n=1;n<B;n++)v.push("");v.push(s());if(t&&c.hash!=s())c.hash="#"+I(s(),j);if(r)history.navigationMode="compatible";if(x&&$!=-1){x=x.substr($+1).split("&");for(n=0;n<x.length;n++){r=
x[n].split("=");if(/^(autoUpdate|history|strict)$/.test(r[0]))k[r[0]]=isNaN(r[1])?/^(true|yes)$/i.test(r[1]):parseInt(r[1],10)!==0;if(/^tracker$/.test(r[0]))k[r[0]]=r[1]}}document.readyState=="complete"&&Y();d(Y);d(window).bind("unload",ca)}else if(!N&&c.href.indexOf("#")!=-1||A&&l<418&&c.href.indexOf("#")!=-1&&c.search!=""){i.open();i.write('<html><head><meta http-equiv="refresh" content="0;url='+c.href.substr(0,c.href.indexOf("#"))+'" /></head></html>');i.close()}else V();return{init:function(a,
b){return u("init",a,b)},change:function(a,b){return u("change",a,b)},internalChange:function(a,b){return u("internalChange",a,b)},externalChange:function(a,b){return u("externalChange",a,b)},baseURL:function(){var a=c.href;if(a.indexOf("#")!=-1)a=a.substr(0,a.indexOf("#"));if(a.substr(a.length-1)=="/")a=a.substr(0,a.length-1);return a},strict:function(a){if(a!==undefined){k.strict=a;return this}return k.strict},autoUpdate:function(a){if(a!==undefined){k.autoUpdate=a;return this}return k.autoUpdate},
update:function(){L=j;this.value(f);L=m;return this},history:function(a){if(a!==undefined){k.history=a;return this}return k.history},tracker:function(a){if(a!==undefined){k.tracker=a;return this}return k.tracker},title:function(a){if(a!==undefined){a=H(a);C(function(){da=i.title=a;if(aa&&h&&h.contentWindow&&h.contentWindow.document){h.contentWindow.document.title=a;aa=m}if(!O&&Z)c.replace(c.href.indexOf("#")!=-1?c.href:c.href+"#");O=m},50);return this}return i.title},value:function(a){if(a!==undefined){a=
S(H(T(a,j)));if(a=="/")a="";if(f==a&&!L)return;O=j;f=a;if(k.autoUpdate||L){J=j;E(j);v[D.length]=f;if(A)if(k.history){c[q][c.pathname]=v.toString();B=D.length+1;if(l<418){if(c.search==""){M.action="#"+f;M.submit()}}else if(l<523||f==""){a=i.createEvent("MouseEvents");a.initEvent("click",j,j);var b=i.createElement("a");b.href="#"+f;b.dispatchEvent(a)}else c.hash="#"+f}else c.replace("#"+f);else if(f!=s())if(k.history)c.hash="#"+I(f,j);else c.replace("#"+f);t&&l<8&&k.history&&C(W,50);if(A)C(function(){J=
m},1);else J=m}return this}if(!N)return null;return H(T(I(f,m),m))},path:function(a){if(a!==undefined){var b=this.queryString();this.value(a+(b?"?"+b:""));return this}a=this.value();return a.indexOf("?")!=-1?a.split("?")[0]:a},queryString:function(a){if(a!==undefined){this.value(this.path()+(a?"?"+a:""));return this}a=this.value();var b=a.indexOf("?");if(b!=-1&&b<a.length)return a.substr(b+1)},parameter:function(a,b,g){var e,p;if(b!==undefined){var P=this.parameterNames();p=[];for(e=0;e<P.length;e++){var Q=
P[e],y=this.parameter(Q);if(typeof y=="string")y=[y];if(Q==a)y=b===null||b==""?[]:g?y.concat([b]):[b];for(var R=0;R<y.length;R++)p.push(Q+"="+y[R])}d.inArray(a,P)==-1&&p.push(a+"="+b);this.queryString(p.join("&"));return this}b=this.value();e=b.indexOf("?");if(e!=-1){b=b.substr(e+1);p=b.split("&");b=[];for(e=0;e<p.length;e++){g=p[e].split("=");g[0]==a&&b.push(g[1])}if(b.length!==0)return b.length!=1?b:b[0]}},pathNames:function(){var a=this.path(),b=a.split("/");if(a.substr(0,1)=="/"||a.length===0)b.splice(0,
1);a.substr(a.length-1,1)=="/"&&b.splice(b.length-1,1);return b},parameterNames:function(){var a=this.value(),b=a.indexOf("?"),g=[];if(b!=-1){a=a.substr(b+1);if(a!=""&&a.indexOf("=")!=-1){a=a.split("&");for(b=0;b<a.length;b++){var e=a[b].split("=")[0];d.inArray(e,g)==-1&&g.push(e)}}}return g}}}();d.fn.address=function(z){var u=function(){var s=z?z.call(this):/address:/.test(d(this).attr("rel"))?d(this).attr("rel").split("address:")[1].split(" ")[0]:d(this).attr("href").replace(/^#/,"");d.address.value(s);
return false};d(this).click(u).live("click",u)}})(jQuery);