-
Notifications
You must be signed in to change notification settings - Fork 0
/
asynclink.jquery.min.js
2 lines (2 loc) · 2.71 KB
/
asynclink.jquery.min.js
1
2
/*! jquery-asynclink v1.0.0 (2015-11-08) */
!function(a){function b(a){return function(b){e[b||0][a]()}}function c(a){return function(){for(d in e)e.hasOwnProperty(d)&&e[d][a]()}}var d=0,e={},f={asynclink:{}},g=!1,h=!!(window.addEventListener&&window.history&&history.pushState);a.fn.asynclink=function(b){function c(){o.links=p.find(o.selectorLinks).unbind("click.asynclink").bind("click.asynclink",k),o.forms=p.find(o.selectorForms).unbind("submit.asynclink").bind("submit.asynclink",k)}function i(){o.links.unbind("click.asynclink"),o.forms.unbind("submit.asynclink"),h&&removeEventListener("popstate",j,!1),delete e[o.id],delete f[o.id]}function j(a){if(a.state&&a.state.asynclink){var b=a.state.asynclink[o.id];b&&o.state?m(b,o.state)&&(l(b)||location.reload()):location.reload()}}function k(b){var c=a(this),d={};if(d.target=c.attr(o.attrTarget)||o.target,d.historyUrl=c.attr("href")||c.attr("action")||location.pathname+location.search,d.url=c.attr(o.attrHref)||c.attr(o.attrAction)||n(d.historyUrl),"form"==this.tagName.toLowerCase()){d.method=c.attr("method")||"get";var e=c.attr("enctype");switch(e){case"multipart/form-data":d.data=new FormData(this),d.contentType=e;break;default:if(d.method&&"get"!=d.method.toLowerCase())d.data=c.serialize();else{var f=c.serialize();d.url+=(-1==d.url.indexOf("?")?"?":"&")+f,d.historyUrl+=(-1==d.historyUrl.indexOf("?")?"?":"&")+f}}}l(d)&&b.preventDefault()}function l(b){function d(a){e.html(a),c();var d=b.historyUrl;delete b.historyUrl,delete b.data,o.state=b,f.asynclink[o.id]=b,!h||!d||"#"===d[0]||b.method&&"post"==b.method.toLowerCase()||history.pushState(f,null,d)}if(!b.url)return!1;var e=b.target?a(b.target):p;if(!e.length)return!1;var i=a.extend({},o.ajaxSettings,{url:b.url,method:b.method,data:b.data,contentType:b.contentType});return i.success?"function"==typeof i.success?i.success=[d,i.success]:i.success.unshift(d):i.success=d,h&&!g&&(history.replaceState(f,null,location),g=!0),a.ajax(i),!0}function m(a,b){return a.url!=b.url||a.target!=b.target||a.method!=b.method}function n(a){return o.replaceUrlCallback?o.replaceUrlCallback(a):a}var o=a.extend(!0,a.fn.asynclink.defaults,b),p=this;return o.id||(o.id=d++),o.state.url||(o.state.url=n(location.pathname+location.search)),o.state.target||(o.state.target=o.target),o.rebind=c,o.unbind=i,e[o.id]=o,f.asynclink[o.id]=o.state,c(),h&&addEventListener("popstate",j,!1),this},a.fn.asynclink.defaults={id:null,selectorLinks:'a[href^="/"],*[al-href^="/"]',selectorForms:'form[action^="/"],form[al-action^="/"],form:not([action])',state:{},target:null,ajaxSettings:{},replaceUrlCallback:null,attrTarget:"al-target",attrHref:"al-href",attrAction:"al-action"},a.asynclink={rebind:b("rebind"),unbind:b("unbind"),rebindAll:c("rebind"),unbindAll:c("unbind")}}(jQuery);