-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvuer.min.js
13 lines (8 loc) · 9.31 KB
/
vuer.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
/*
Vuer路由模块
https://github.com/userofjack/Vuer
©2017-2022 Bux. All rights reserved.
遵循Apache开源协议。
V1.2.0
*/
Vuer=function(config){return arguments[0]?(this.config=config,this.ajaxLock={page:{state:!1,name:"",ajaxToken:null,query:{}},data:{state:!1,name:"",ajaxToken:null}},this.nowPage=this.config.default,this.cache={html:null,data:!1},this.pageCount=1,this.bridge=!1,this.bigBridge={},this.vue=null,Vuer.prototype.byId=function(a,b){var b=arguments[1]||!1;return document.getElementById(a)?document.getElementById(a):(b||console.log("%cById('"+a+"') Error","color:red"),!1)},Vuer.prototype.go=function(a){var b;return arguments[0]?(b=-1!=a.indexOf("?")?a.replace(/^(\/|\\)/gi,"").split("?")[0]:a,this.load(b,this.getRequest(a))):!1},Vuer.prototype.isSet=function(a){return"undefined"!=typeof a?!0:!1},Vuer.prototype.isEmpty=function(a){return"undefined"==typeof a||""==a||null==a?!0:!1},Vuer.prototype.queryToStr=function(a){var d,b="",c=!0;for(d in a)c?c=!1:b+="&",b+=d,this.isEmpty(a[d])||(b+="="+a[d]);return b},Vuer.prototype.getQuery=function(a){var b=new RegExp("(^|&)"+a+"=([^&]*)(&|$)","i"),c=window.location.search.substr(1).match(b);return null!=c?unescape(c[2]):!1},Vuer.prototype.getRequest=function(a){var b,c,d;if(a=arguments[0]||location.search,b=new Object,-1!=a.indexOf("?")){for(a=a.substr(a.indexOf("?")+1),c=a.split("&"),d=0;d<c.length;d++)b[c[d].split("=")[0]]=this.isSet(c[d].split("=")[1])?unescape(c[d].split("=")[1]):"";return b}return!1},Vuer.prototype.getCookie=function(a){var b=null,c=new RegExp("(^| )"+a+"=([^;]*)(;|$)");return b=document.cookie.match(c),b?unescape(b[2]):null},Vuer.prototype.setCache=function(url,pageName,type){var value,NowTime=(new Date).getTime()/1e3;if(-1!=url.indexOf("?")){try{value=eval("this.config.pages."+pageName+".cache."+type)}catch(e){}return this.isSet(value)?this.config.pages[pageName].cache[type]?url:url+="?vuer_no_cache="+NowTime:this.config.cache[type]?url:url+="?vuer_no_cache="+NowTime}return url+="?vuer_no_cache="+NowTime},Vuer.prototype.setTitle=function(a,b){a=arguments[0]||this.config.pages[this.nowPage].title,this.isSet(arguments[1])||(b=this.config.siteName),document.title=a+b},Vuer.prototype.fillHTML=function(a,b){var d,c="";a.innerHTML=b,[].forEach.call(a.querySelectorAll("script"),function(a){c+=a.innerHTML+";",a.outerHTML=""}),""!=c.replace(/(\s)/,"")&&(d=document.createElement("script"),d.id="VuerRuntime",d.innerHTML=c,document.body.appendChild(d))},Vuer.prototype.ajaxClose=function(a){null!==a&&"undefined"!=typeof a&&this.isSet(a["cancel"])&&a.cancel(),this.ajaxLock.page.ajaxToken=null,this.ajaxLock.data.ajaxToken=null},Vuer.prototype.run=function(method,pageName){try{var obj=eval('this.config.pages["'+pageName+'"].'+method)}catch(e){}return"function"==typeof obj?obj(pageName):eval("this.config."+method+'("'+pageName+'")')},Vuer.prototype.appendData=function(){var key,dataObj={};if(this.isEmpty(this.config.pages[this.nowPage].dataKey))dataObj=this.cache.data;else try{dataObj=eval("this.cache.data"+this.config.pages[this.nowPage].dataKey)}catch(e){return console.log('%c<Vuer> Data "'+this.config.pages[this.nowPage].dataKey+'" does not exist.',"color:red"),(!this.isSet(this.config.pages[this.nowPage].loading)||this.config.pages[this.nowPage].loading)&&this.run("loading.failed",this.nowPage),!1}if(null!=this.vue){for(key in dataObj)this.vue[key]=dataObj[key];this.vue.$mount("#"+this.config.content)}(this.isEmpty(this.config.pages[this.nowPage].preview)||!this.isEmpty(this.config.pages[this.nowPage].preview)&&!this.config.pages[this.nowPage].preview)&&this.run("loading.close",this.nowPage)},Vuer.prototype.dataDeal=function(a,b,c){return b!==this.ajaxLock.data.ajaxToken?!1:(this.ajaxLock.data.ajaxToken=null,this.ajaxLock.data.name="",this.ajaxLock.data.state=!0,"[object Object]"!==Object.prototype.toString.call(a)?(console.log('%c<Vuer> Data form "'+c+'" is not JSON ossbject.',"color:red"),(!this.isSet(this.config.pages[this.nowPage].loading)||this.config.pages[this.nowPage].loading)&&this.run("loading.failed",this.nowPage),!1):(this.cache.data=a,this.ajaxLock.page.state&&this.appendData(),void 0))},Vuer.prototype.pageDeal=function(a,b,c){var d,e,f,h;if(arguments[0]&&b!==this.ajaxLock.page.ajaxToken)return!1;if(d="",d="?"+this.queryToStr(this.ajaxLock.page.query),this.nowPage=this.ajaxLock.page.name,this.ajaxLock.page.ajaxToken=null,this.ajaxLock.page.name="",this.ajaxLock.page.state=!0,this.cache.html=a,this.isSet(this.config.pages[this.nowPage].js)&&"object"==typeof this.config.pages[this.nowPage].js){e=0;for(f in this.config.pages[this.nowPage].js)this.config.pages[this.nowPage].js[f],h=document.createElement("script"),h.type="text/javaScript",h.src=script3,h.id="VuerRuntime_js_"+e,document.getElementsByTagName("head")[0].appendChild(h),e++}if(this.fillHTML(this.byId(this.config.content),a),scroll(0,0),this.config.debug||console.clear(),null!=this.vue){for(f in this.bigBridge)this.vue[f]=this.bigBridge[f];if(this.bridge)for(f in this.bridge)this.vue[f]=this.bridge[f]}this.bridge=!1,this.isSet(this.config.pages[this.nowPage].fulltitle)&&this.config.pages[this.nowPage].fulltitle?this.setTitle(this.config.pages[this.nowPage].title,""):this.setTitle(),c||(this.pageCount++,history.pushState(this.pageCount,"",d)),!this.isEmpty(this.config.pages[this.nowPage].preview)&&this.config.pages[this.nowPage].preview&&(!this.isSet(this.config.pages[this.nowPage].loading)||this.config.pages[this.nowPage].loading)&&this.run("loading.close",this.nowPage),(this.isEmpty(this.config.pages[this.nowPage].data)||this.ajaxLock.data.state)&&this.appendData()},Vuer.prototype.load=function(a,b,c){var d,e,f,g,h,i;if(arguments[2]||(c=!1),this.isEmpty(a))return!1;if(a=a.replace(/[^a-zA-Z0-9\-_\.\/]/g,""),this.isEmpty(a))return!1;if(0==this.run("action.leave",this.nowPage))return!1;if(0==this.run("action.next",a))return!1;if(d="",b=arguments[1]||{},e="",this.ajaxClose(this.ajaxLock.page.ajaxToken),this.ajaxClose(this.ajaxLock.data.ajaxToken),this.ajaxLock.data.state=!1,this.ajaxLock.page.state=!1,"undefined"!=typeof this.config.aliases[a])return this.isEmpty(this.config.aliases[a].path)?this.isEmpty(this.config.aliases[a].url)||(window.location.href=this.config.aliases[a].url):this.go(this.config.aliases[a].path),!1;for("undefined"==typeof this.config.pages[a]&&(a="404"),null!=this.vue&&(this.vue.$destroy(),this.vue=null),this.byId("VuerRuntime",!0)&&document.body.removeChild(this.byId("VuerRuntime")),f=0;;){if(!this.byId("VuerRuntime_js_"+f,!0))break;document.getElementsByTagName("head")[0].removeChild(this.byId("VuerRuntime_js_"+f)),f++}return(!this.isSet(this.config.pages[a].loading)||this.config.pages[a].loading)&&this.run("loading.start",a),this.config.auth.state&&this.isEmpty(this.getCookie(this.config.auth.key))&&-1==this.config.auth.outRule.indexOf(a)?(this.load(this.config.auth.start,b),!1):this.config.auth.state&&!this.isEmpty(this.getCookie(this.config.auth.key))&&a==this.config.auth.start?(this.load(this.config.default,b),!1):(d=this.isEmpty(this.config.pages[a].path)?this.config.templatePath+a+".html":this.config.templatePath+this.config.pages[a].path,this.config.action.next(a),this.ajaxLock.page.name=a,this.ajaxLock.page.query={},b.space=a,this.ajaxLock.page.query=b,e="?"+this.queryToStr(b),g=axios.CancelToken,a==this.nowPage&&null!=this.cache.html&&this.isEmpty(this.config.pages[a].data)?this.pageDeal(this.cache.html,null,!0):this.isSet(this.config.pages[a].fill)?(this.ajaxLock.page.ajaxToken=(new Date).getTime(),this.pageDeal(this.config.pages[a].fill,this.ajaxLock.page.ajaxToken,c)):(this.ajaxLock.page.ajaxToken=g.source(),h=this,axios.get(this.setCache(d+e,a,"page"),{cancelToken:this.ajaxLock.page.ajaxToken.token}).then(function(a){h.pageDeal(a.data,h.ajaxLock.page.ajaxToken,c)}).catch(function(b){console.log(b),(!h.isSet(h.config.pages[a].loading)||h.config.pages[a].loading)&&h.run("loading.failed",a)})),this.isEmpty(this.config.pages[a].data)||(this.ajaxLock.data.name=a,this.ajaxLock.data.ajaxToken=g.source(),h=this,i=this.config.dataPath+this.config.pages[a].data+e,axios.get(this.setCache(i,a,"data"),{cancelToken:this.ajaxLock.data.ajaxToken.token}).then(function(a){h.dataDeal(a.data,h.ajaxLock.data.ajaxToken,i)}).catch(function(b){console.log(b),(!h.isSet(h.config.pages[a].loading)||h.config.pages[a].loading)&&h.run("loading.failed",a)})),!0)},Vuer.prototype.initial=function(){this.config.auth.state&&!this.isEmpty(this.getCookie(this.config.auth.key))&&this.config.auth.success(),this.getQuery(this.config.field)?this.load(this.getQuery(this.config.field),this.getRequest(),!0):this.load(this.config.default,this.getRequest(),!0);var a=this;setTimeout(function(){window.addEventListener("popstate",function(){var b=!0,c=history.state,d=a.pageCount;return null==c&&(c=1),0==a.run("action.last",a.nowPage)?!1:(c>=1&&(a.pageCount=c>=d?c:a.pageCount-1,a.getQuery(a.config.field)?a.load(a.getQuery(a.config.field),a.getRequest(),b):a.load(a.config.default,a.getRequest(),b)),void 0)},!1)},100),Vue.prototype.go=window.go=function(b){return arguments[0]?(a.go(b),void 0):!1},Vue.prototype.setTitle=window.setTitle=function(b,c){b=arguments[0]||a.config.pages[a.nowPage].title,c=arguments[1]||a.config.siteName,a.setTitle(b,c)},Vue.prototype.bridge=window.bridge=function(b){arguments[0]||(a.bridge={}),a.bridge=b},Vue.prototype.bigBridge=window.bigBridge=function(b){arguments[0]||(a.bigBridge={}),a.bigBridge=b}},this.initial(),void 0):(console.log("%c<Vuer> No config.","color:red"),!1)};