-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvanillaJs-spa.min.js
1 lines (1 loc) · 2.68 KB
/
vanillaJs-spa.min.js
1
function _spa(e,t,a="_spaRequest",s=!0){_spa.container=document.querySelector(e),_spa.selector=t,_spa.getPerameter=a,_spa.getPerameterValue=s,_spa.LoadStart=_spa.LoadEnd=_spa.errorCB=function(){},_spa.url=null,_spa.isPopstate=!1,_spa.xhr=new XMLHttpRequest,document.removeEventListener("click",_spa.clickHandler),document.addEventListener("click",_spa.clickHandler),window.addEventListener("popstate",function(e){e.preventDefault(),_spa.LoadStart(),_spa.url=location.href,_spa.isPopstate=!0,_spa.Ajax()})}_spa.onLoadStart=function(e){_spa.LoadStart=e},_spa.onLoadEnd=function(e){_spa.LoadEnd=e},_spa.onError=function(e){_spa.errorCB=e},_spa.clickHandler=function(e){e.target.matches(_spa.selector)&&(e.preventDefault(),_spa.LoadStart(),_spa.url=e.target.getAttribute("href"),_spa.isPopstate=!1,_spa.Ajax())},_spa.Ajax=function(){var e=_spa.url.includes("?")?_spa.url+`&${_spa.getPerameter}=${_spa.getPerameterValue}`:_spa.url+`?${_spa.getPerameter}=${_spa.getPerameterValue}`;_spa.xhr.abort(),_spa.xhr.onreadystatechange=_spa.handleXHRresponse,_spa.xhr.open("GET",e,!0),_spa.xhr.send()},_spa.handleXHRresponse=function(){if(this.readyState===XMLHttpRequest.DONE)if(200===this.status){var e=JSON.parse(this.responseText);if(_spa.clearOld(),_spa.container.innerHTML=e.content,document.title=e.title,_spa.isPopstate||window.history.pushState({},"",_spa.url),e.cssFiles.map(function(e){return _spa.loadCss(e)}),e.jsOrder?_spa.loadScriptsInOrder(e.jsFiles).then(function(){_spa.addJsCode(e.script),_spa.LoadEnd()}):(_spa.loadScriptsInOrder(e.jsFiles),_spa.addJsCode(e.script),_spa.LoadEnd()),null!==e.extra)for(var t in e.extra)e.extra.hasOwnProperty(t)&&document.querySelectorAll(t).forEach(function(a){a.innerHTML=e.extra[t]})}else _spa.errorCB()},_spa.clearOld=function(){document.querySelectorAll(".added_by_spa").forEach(function(e){e.remove()})},_spa.loadCss=function(e){return new Promise(function(t,a){var s=document.createElement("link");s.setAttribute("rel","stylesheet"),s.setAttribute("href",e),s.classList.add("added_by_spa"),s.addEventListener("load",function(){t(!0)}),document.head.appendChild(s)})},_spa.loadScript=function(e){return new Promise(function(t,a){const s=document.createElement("script");s.src=e,s.classList.add("added_by_spa"),s.addEventListener("load",function(){t(!0)}),document.body.appendChild(s)})},_spa.waterfall=function(e){return e.reduce(function(e,t){return e.then(function(){return t.then(function(e){return!0})})},Promise.resolve([]))},_spa.loadScriptsInOrder=function(e){const t=e.map(function(e){return _spa.loadScript(e)});return _spa.waterfall(t)},_spa.addJsCode=function(e){if(e.length>0){var t=document.createElement("script");t.text=e,t.classList.add("added_by_spa"),document.body.appendChild(t)}};