d6
Version:
An isomorphic JavaScript transport for conditional tier rendering
1 lines • 9.33 kB
JavaScript
!function(n){var t=function(){},e=t,r=t,o=function(){var t=n.XMLHttpRequest,e=n.ActiveXObject;return t?new t:e?new e("Microsoft.XMLHTTP"):!1},i=function(n,t,u,c){ot(t)&&(c=u,u=t,t=0);var a=o();return a&&(c=c||r,u=u||e,a.onreadystatechange=function(){if(4==a.readyState){j('[Jymin] Received response from "'+n+'". ('+i._WAITING+" in progress)."),--i._WAITING;var t=a.status,o=200==t,f=o?u||e:c||r,s=parse(a.responseText)||{};s._STATUS=t,s._REQUEST=a,f(s)}},a.open(t?"POST":"GET",n,!0),a.setRequestHeader("x-requested-with","XMLHttpRequest"),t&&a.setRequestHeader("content-type","application/x-www-form-urlencoded"),a._URL=n,t&&(a._BODY=t),a._TIME=getTime(),i._WAITING=(i._WAITING||0)+1,j('[Jymin] Sending request to "'+n+'". ('+i._WAITING+" in progress)."),a.send(t||null)),!0},u=function(n,t){if(n)for(var e=0,r=c(n);r>e;e++){var o=t(n[e],e,n);if(o===!1)break}},c=function(n){return it(n)||rt(n)?n.length:0},a=function(n,t){return ut(n)&&n.push(t),t},f=function(n){for(var t=function(t){n.push(t)},e=1,r=arguments.length;r>e;e++)u(arguments[e],t)},s=function(n,t){return c(arguments)<2&&(t=n,n=document),rt(t)?n.getElementById(t):t},l=function(n,t){return c(arguments)<2&&(t=n,n=document),n.getElementsByTagName(t||"*")},p=function(n,t){c(arguments)<2&&(t=n,n=document),t=t.split(".");var e,r=(t[0]||"*").toUpperCase(),o=t[1],i="*"==r;return o?(e=[],n.getElementsByClassName?u(n.getElementsByClassName(o),function(n){(i||n.tagName==r)&&e.push(n)}):u(l(n,r),function(n){R(n,o)&&e.push(n)})):e=l(n,r),e},v=function(n,t){var e=(s(n)||{}).parentNode;return t&&e&&e.tagName!=t&&(e=v(e,t)),e},d=function(n){var t=/^(svg|g|path|circle|line)$/.test(n),e="http://www.w3.org/"+(t?"2000/svg":"1999/xhtml");return document.createElementNS(e,n)},m=function(n){if(!rt(n))return n;n=n||"";var t=n.split("?"),e=t[0].split("."),r=e.slice(1).join(" "),o=e[0].split("#"),i=o[0]||"div",c=o[1],a=t[1],f=d[i]||(d[i]=d(i)),s=f.cloneNode(!0);return c&&(s.id=c),r&&(s.className=r),a&&(a=a.split("&"),u(a,function(n){var t=n.split("="),e=nt(t[0]),r=nt(t[1]);s[e]=r,s.setAttribute(e,r)})),s},g=function(n,t,e){var r=m(t);return n&&T(n,r,e),r},_=function(n){return s(n).childNodes},T=function(n,t,e){n=s(n),t=s(t),n&&t&&(et(e)&&(e=_(n)[e]),n.insertBefore(t,e||null))},h=function(n,t){n=s(n),n&&(n.innerHTML=t)},E=function(n,t){return n=s(n),n?n.getAttribute(t):void 0},D=function(n,t){return E(n,"data-"+t)},N=function(n){if(n=s(n)){var t=n.className||"";return t.baseVal||t}},R=function(n,t){var e=new RegExp("(^|\\s)"+t+"(\\s|$)");return e.test(N(n))},A=function(n,t){n=s(n),n&&!R(n,t)&&(n.className+=" "+t)},y=function(n,t){if(n=s(n)){var e=N(n).split(/\s/),r=[];u(e,function(n){n!=t&&r.push(n)}),n.className=r.join(" ")}},L=function(n,t){var e=l("head")[0],r=g(e,"script");t&&(r.onload=t,r.onreadystatechange=function(){G(r)&&t()}),r.src=n},I=function(n,t,e){(!t||ot(t))&&(e=t,t=n,n=document);var r;if($(t,",")){r=[];var o=K(t);u(o,function(t){var e=I(n,t);c(e)&&f(r,e)})}else if($(t," ")){var i=t.indexOf(" "),a=t.substr(0,i),l=t.substr(i+1);r=[],I(n,a,function(n){var t=I(n,l);f(r,t)})}else if("#"==t[0]){var d=t.substr(1),m=s(n.ownerDocument||document,d);if(m)for(var g=v(m);g;){if(g===n){r=[m];break}g=v(g)}}else r=p(n,t);return e&&u(r,e),r||[]},b=function(n,t,e){return I(n,t,e)[0]},C=function(t,e,r,o){var i=ut(c);if(i||$(e," ")){var c=i?e:Q(e);return void u(c,function(n){C(t,n,r,o)})}if(t=s(t)){var f=function(i){i=i||n.event;var u=i.target||i.srcElement;3==u.nodeType&&(u=v(u));var c=i.relatedTarget||i.toElement;if("mouseout"==e)for(;c=v(c);)if(c==u)return;var a=r(t,i,u,o);a===!1&&w(i)};t.addEventListener?t.addEventListener(e,f,!0):t.attachEvent?t.attachEvent("on"+e,f):t["on"+e]=f;var l=t._HANDLERS=t._HANDLERS||{},p=l[e]=l[e]||[];a(p,r)}},S=function(n,t,e,r,o){ot(t)?(o=e,r=t,e=n,t="",n=document):ot(e)&&(o=r,r=e,e=t,t=n,n=document);var i=t.split(","),c=function(n,t,e,o){u(i,function(i){var u=!1;if("#"+e.id==i)u=!0;else{var c=i.split("."),a=c[0].toUpperCase(),f=c[1];a&&e.tagName!=a||(!f||R(e,f))&&(u=!0)}if(u){var s=r(e,t,n,o);s===!1&&w(t)}}),e=v(e),e&&c(n,t,e,o)};C(n,e,c,o)},O=function(n){n?(n.cancelBubble=!0,n.stopPropagation&&n.stopPropagation()):W("[Jymin] Called stopPropagation on a non-event.",n)},w=function(n){n?n.preventDefault&&n.preventDefault():W("[Jymin] Called preventDefault on a non-event.",n)},G=function(n){var t=n.readyState;return"complete"==t||"script"==n.tagName&&"loaded"==t},H=function(n){return X(n.type)[0]},U=function(n){if(n=s(n)){var t=H(n),e=n.value,r=n.checked,o=n.options;return"c"==t||"r"==t?e=r?e:null:n.multiple?(e=[],u(o,function(n){n.selected&&a(e,n.value)})):o&&(e=U(o[n.selectedIndex])),e}},x=function(){var t=n.history||{};return u(["push","replace"],function(n){var e=t[n+"State"];t[n]=function(n){e&&e.apply(t,[null,null,n])}}),t},P=function(n){x().push(n)},k=function(n){x().replace(n)},B=function(t){C(n,"popstate",t)},W=function(){q("error",arguments)},j=function(){q("log",arguments)},q=function(t,e){var r=n.console;r&&r[t]&&r[t].apply(r,e)},M=function(n,t){if(n)for(var e in n){var r=t(e,n[e],n);if(r===!1)break}},V=function(n,t){return n&&t&&M(t,function(t,e){n[t]=e}),n},X=function(n){return rt(n)?n:""+n},$=function(n,t){return X(n).indexOf(t)>-1},F=function(n,t){return 0==X(n).indexOf(t)},J=function(n){return X(n).replace(/^\s+|\s+$/g,"")},K=function(n){return X(n).split(",")},Q=function(n){return X(n).split(" ")},Y=function(n,t,e){var r=n.match(t);r&&e.apply(n,r)},z=function(n){return X(n).toLowerCase()},Z=function(n){return encodeURIComponent(n)},nt=function(n){return decodeURIComponent(n)},tt=function(n,t){return typeof n==t},et=function(n){return tt(n,"number")},rt=function(n){return tt(n,"string")},ot=function(n){return tt(n,"function")},it=function(n,t){return n instanceof(t||Object)},ut=function(n){return it(n,Array)};!function(){if(!history.pushState)return void(n.D6={});var t=document.body,e=n.D6=function(n){V(r,n),c||f()},r=e._VIEWS={},o=e._CACHE={},c=(e._RENDER=function(n,t){return r[n].call(r,t||e._CONTEXT)},!1),f=function(){S("a","click",function(n,e){var r=E(n,"href"),o=l(n.href),i=e.which,u=!i||1==i;if(u)if(F(r,"#")){var c,a=0,f=r.substr(1);for(I("a",function(n){n.name==f&&(c=n)});c;)a+=c.offsetTop||0,c=c.offsetParent||0;m(a-(t._OFFSET_TOP||0)),k(o+r),w(e),O(e)}else o&&s(o)&&(w(e),_(o,0,n))}),S("a","mouseover",function(n){if(!R(n,"_NOPREFETCH")){var t=l(n.href),e=t!=l(location);e&&s(t)&&g(t)}}),S("input,select,textarea","change",function(n){var t=n.form;t&&(t._LAST_CHANGED=getTime())}),S("input,button","click",function(n){if("submit"==n.type){var t=n.form;t&&t._CLICKED_BUTTON!=n&&(t._CLICKED_BUTTON=n,t._LAST_CHANGED=getTime())}}),S("form","submit",function(n,t){var e=l(n.action||location.href.replace(/\?.*$/,"")),r=E(n,"enctype"),o="get"==z(n.method);if(s(e)&&!/multipart/.test(r)){w(t);var i=n._VALIDATE?n._VALIDATE():!0;if(!i)return;var c=[];I(n,"input,select,textarea,button",function(t){var e=t.name,r=t.type,o=U(t),i=!e;i=i||"radio"==r&&!o,i=i||"submit"==r&&t!=n._CLICKED_BUTTON,i||(rt(o)?a(c,Z(e)+"="+Z(o)):u(o,function(n){a(c,Z(e)+"="+Z(n))}))}),o?(e+=($(e,"?")?"&":"?")+c.join("&"),c=0):(e=v(e,n._LAST_CHANGED),c=c.join("&")),_(e,c,n)}});B(function(){_(location)}),c=!0},s=function(n){return F(n,location.protocol+"//"+location.host+"/")},l=function(n){return X(n).replace(/#.*$/,"")},p=function(n){return X(n).replace(/\?.*$/,"")},v=function(n,t){return n+($(n,"?")?"&":"?")+"d6="+(t||1)},d=function(n){return X(n).replace(/[&\?]d6=[r\d]+/g,"")},m=function(n){t.scrollTop=document.documentElement.scrollTop=n},g=function(n){o[n]||(j('[D6] Prefetching "'+n+'".'),o[n]=[function(t){j('[D6] Caching contents for prefetched URL "'+n+'".'),o[n]=t;var e=t.ttl||1e4;setTimeout(function(){ut(o[n])||(j('[D6] Removing "'+n+'" from prefetch cache.'),delete o[n])},e)}],T(n))},_=e._LOAD_URL=function(n,t,r){e._LOADING_URL=d(n),e._LOAD_STARTED=getTime();var i=D(r,"_D6_TARGET"),u=D(r,"_D6_VIEW");i&&I(i,function(n){A(n,"_D6_TARGET")}),j('[D6] Loading "'+n+'".'),I("._SPINNER",function(n){A(n,"_LOADING")});var c=function(n,t){N(n,t,i,u)},f=o[n];f?ut(f)?(j('[D6] Queueing callback for "'+n+'".'),a(f,c)):(j('[D6] Found precached response for "'+n+'".'),c(f,n)):(j('[D6] Creating callback queue for "'+n+'".'),o[n]=[c],T(n,t))},T=function(n,t){j('[D6] Fetching response for "'+n+'".');var e=v(n),r=function(t){var e=o[n];o[n]=t,j("[D6] Running "+e.length+' callback(s) for "'+n+'".'),u(e,function(e){e(t,n)})};i(e,t,r,r,1)},N=function(t,i,u,c){e._CONTEXT=t;var a,f=(t._ERROR,d(t.d6u||i)),s=c||t.d6||"error0",l=e._VIEW=r[s];if(i=d(i),i==e._LOADING_URL&&(I("._SPINNER,._D6_TARGET",function(n){y(n,"_LOADING")}),"<"==J(t)[0]?(a=t,j("[D6] Rendering HTML string")):l?(a=l.call(r,t),j('[D6] Rendering view "'+s+'".')):(W('[D6] View "'+s+'" not found. Changing location.'),n.location=f)),a){C(a,u);var v=p(f)==p(location.href),m=v?k:P;m(f),delete o[i]}},C=function(n,e){Y(n,/<title.*?>([\s\S]+)<\/title>/,function(n,t){document.title=t});var r=[];n=n.replace(/<script.*?>([\s\S]*?)<\/script>/g,function(n,t){return t&&(r.push(t),n=""),n}),e?(I(e,function(t){h(t,n)}),u(r,execute),I(e,function(n){onReady(n)})):(Y(n,/<body.*?>([\s\S]+)<\/body>/,function(n,e){h(t,e),m(0)}),u(r,execute),onReady(t))};setTimeout(function(){var n="";b("link,script",function(t){var e="?v=",r=X(t.src||t.href).split(e);r[1]&&(n=e+r[1])}),L("/d6.js"+n)},1)}()}(window);