olympus-r-17plugins
Version:
A plugin of Olympus for 17zuoye.
1 lines • 9.74 kB
JavaScript
var olympus;(function(olympus){function getCurOrigin(){if(window.location.origin)return window.location.origin;return window.location.protocol+"//"+window.location.host}olympus.getCurOrigin=getCurOrigin;function trimURL(url){url=url.replace(/([^:/])(\/)+/g,"$1/");if(url.charAt(0)=="/")url=url.substr(1);var index;while((index=url.indexOf("/./"))>=0){url=url.replace("/./","/")}var reg=/\/[^\/\.]+?\/\.\.\//;while(reg.test(url)){url=url.replace(reg,"/")}return url}olympus.trimURL=trimURL;function getHostAndPathname(url){if(url==null)throw new Error("url不能为空");url=url.split("#")[0].split("?")[0];url=trimURL(url);return url}olympus.getHostAndPathname=getHostAndPathname;function getPath(url){url=getHostAndPathname(url);var urlArr=url.split("/");urlArr.pop();return urlArr.join("/")+"/"}olympus.getPath=getPath;function isAbsolutePath(url){if(url==null)return false;return url.indexOf("://")>=0}olympus.isAbsolutePath=isAbsolutePath;function validateProtocol(url){if(url==null)return null;var index=url.indexOf("://");if(index<0)return url;var protocol=url.substring(0,index);if(protocol=="http"||protocol=="https"){return window.location.protocol+url.substr(index+1)}if(protocol=="ws"||protocol=="wss"){if(window.location.protocol=="https:")protocol="wss";else protocol="ws";return protocol+url.substr(index)}return url}olympus.validateProtocol=validateProtocol;function wrapHost(url,host,forced){if(forced===void 0){forced=false}host=host||getCurOrigin();var re=/^(?:[^\/]+):\/{2,}(?:[^\/]+)\//;var arr=url.match(re);if(arr&&arr.length>0){if(forced){url=url.substr(arr[0].length);url=host+"/"+url}}else{url=host+"/"+url}url=validateProtocol(url);url=trimURL(url);return url}olympus.wrapHost=wrapHost;function wrapAbsolutePath(relativePath,host){var curPath=getPath(window.location.href);var url=trimURL(curPath+"/"+relativePath);if(host!=null){url=wrapHost(url,host,true)}return url}olympus.wrapAbsolutePath=wrapAbsolutePath;var Version=function(){function Version(){this._hashDict={}}Version.prototype.initialize=function(handler,host,version){var self=this;if(window["__Olympus_Version_hashDict__"]){this._hashDict=window["__Olympus_Version_hashDict__"];handler()}else{var request=null;if(window["XDomainRequest"]&&navigator.userAgent.indexOf("MSIE 10.")<0){request=new window["XDomainRequest"]}else if(window["XMLHttpRequest"]){request=new XMLHttpRequest}else if(window["ActiveXObject"]){request=new ActiveXObject("Microsoft.XMLHTTP")}request.onload=function(evt){if(request.status===undefined){if(request.responseText===""){request.onerror(new Event("RequestError: "+JSON.stringify({filename:url})))}else{onLoad(evt);handler()}}else{var statusHead=Math.floor(request.status*.01);switch(statusHead){case 2:case 3:onLoad(evt);handler();break;case 4:case 5:request.onerror(new Event("RequestError: "+JSON.stringify({filename:url,message:request.status+" "+request.statusText})));break}}};var url;if(version){request.onerror=function(){var url=wrapAbsolutePath("version.cfg?v="+version,host);request.abort();request.onerror=handler;request.open("GET",url,true);request.send()};url=wrapAbsolutePath("version.cfg",host);url=this.joinVersion(url,version)}else{request.onerror=handler;url=wrapAbsolutePath("version.cfg?v="+Date.now(),host)}request.open("GET",url,true);request.send()}function onLoad(evt){var request=evt.target;var responseText=request.responseText;var lines=responseText.split("\n");for(var i in lines){var line=lines[i];var arr=line.split(" ");if(arr.length==2){var key=arr[1].substr(2);var value=arr[0];self._hashDict[key]=value}}window["__Olympus_Version_hashDict__"]=self._hashDict}};Version.prototype.getHash=function(url){url=trimURL(url);var result=null;for(var path in this._hashDict){if(url.indexOf(path)>=0){result=this._hashDict[path];break}}return result};Version.prototype.wrapHashUrl=function(url){var hash=this.getHash(url);if(hash!=null){url=this.joinVersion(url,hash)}return url};Version.prototype.joinVersion=function(url,version){if(version==null)return url;version=version.replace(/[^0-9a-z]+/gi,"");var reg=/([a-zA-Z]+:\/+[^\/\?#]+\/[^\?#]+)\.([^\?]+)(\?.+)?/;var result=reg.exec(url);if(result!=null){url=result[1]+"-r_"+version+"."+result[2]+(result[3]||"")}return url};Version.prototype.removeVersion=function(url){url=url.replace(/\-r_[a-z0-9]+\./gi,".");return url};return Version}();var _version=new Version;function preload(jsFiles,host,callback,ordered,version){if(ordered===void 0){ordered=true}_version.initialize(function(){loadJsFiles(jsFiles,host||getCurOrigin(),function(err){if(callback){callback(err)}else if(err){alert(err.message+"\n点击确定5秒后将刷新页面。");setTimeout(function(){return window.location.reload(true)},5e3)}},ordered)},host,version)}olympus.preload=preload;function loadJsFiles(jsFiles,host,callback,ordered){if(!jsFiles){callback();return}jsFiles=jsFiles.concat();var count=jsFiles.length;var jsonpCount=0;var stop=false;var nodes=[];for(var i in jsFiles){var jsFile=jsFiles[i];if(typeof jsFile==="string"){jsFiles[i]=jsFile={url:jsFile,mode:JSLoadMode.AUTO}}var url=jsFile.url;if(!isAbsolutePath(url))url=wrapAbsolutePath(url,host);url=_version.wrapHashUrl(url);var jsNode=document.createElement("script");jsNode.type="text/javascript";nodes.push(jsNode);if(jsFile.mode===JSLoadMode.JSONP||jsFile.mode===JSLoadMode.AUTO&&!isAbsolutePath(jsFile.url)){var xhr=window["XDomainRequest"]&&navigator.userAgent.indexOf("MSIE 10.")<0?new window["XDomainRequest"]:window["XMLHttpRequest"]?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP");xhr["index"]=i;xhr.open("GET",url,true);xhr.responseType="text";xhr.onload=onJSONPLoadOne;xhr.onerror=onJSONPLoadError;xhr.send(null);jsonpCount++}else{jsNode.onload=onLoadOne;jsNode.onerror=onErrorOne;jsNode.src=url}}var appendIndex=0;judgeAppend();function judgeAppend(){if(jsonpCount===0){for(var i=appendIndex,len=nodes.length;i<len;){var node=nodes[i];document.body.appendChild(node);appendIndex=++i;if(ordered&&node.src)break}}}function onJSONPLoadOne(evt){var xhr=evt.target;var success=function(evt){var index=xhr["index"];var jsNode=nodes[index];jsNode.innerHTML=xhr.responseText;jsonpCount--;onLoadOne()};if(xhr.status===undefined){if(xhr.responseText===""){onJSONPLoadError()}else{success(evt)}}else{var statusHead=Math.floor(xhr.status*.01);switch(statusHead){case 2:case 3:success(evt);break;case 4:case 5:onJSONPLoadError();break}}}function onJSONPLoadError(){onErrorOne()}function onLoadOne(){judgeAppend();if(!stop&&--count===0)callback()}function onErrorOne(){if(!stop){stop=true;callback(new Error("JS加载失败"))}}}var JSLoadMode;(function(JSLoadMode){JSLoadMode[JSLoadMode["AUTO"]=0]="AUTO";JSLoadMode[JSLoadMode["JSONP"]=1]="JSONP";JSLoadMode[JSLoadMode["TAG"]=2]="TAG"})(JSLoadMode=olympus.JSLoadMode||(olympus.JSLoadMode={}))})(olympus||(olympus={}));var olympus17;(function(olympus17){function preload(jsFiles,callback,ordered,version){if(ordered===void 0){ordered=true}var tempLoc=window.location.pathname;var last=tempLoc.substring(0,tempLoc.lastIndexOf("/"));var appName=last.substring(last.lastIndexOf("/")+1);var imgDomain=getCDNHost();if(imgDomain!=null){olympus.preload(jsFiles,imgDomain,function(err){if(err){try{window.external["log_b"]("",JSON.stringify({_lv:3,etc:{},app:"17homework_"+appName,user_agent:navigator.userAgent,op:"olympus_preload_js_error"}))}catch(err){}}if(callback){callback(err)}else if(err){alert(err.message+"\n点击确定5秒后将刷新页面。");setTimeout(function(){try{window.external["pageQueueRefresh"]()}catch(err){window.location.reload(true)}},5e3)}},ordered,version)}else{alert("页面初始参数错误:地址缺少imgDomain(50101)");try{window.external["log_b"]("",JSON.stringify({_lv:3,etc:{},app:"17homework_"+appName,user_agent:navigator.userAgent,err_code:50101,msg:"undefined_getInitParams&imgdomain",op:"undefined_imgDomain"}))}catch(err){}}}olympus17.preload=preload;function getCDNHost(){var regProtocol=/^[a-zA-Z]+:\/+/;var imgDomain;if(window.external&&window.external["getInitParams"]){var obj;try{obj=JSON.parse(window.external["getInitParams"]())}catch(err){return null}if(obj!=null&&obj.img_domain!=null){imgDomain=obj.img_domain;if(!regProtocol.test(imgDomain)){imgDomain=window.location.protocol+"//"+imgDomain}setCookie("img_domain",imgDomain)}}var p=getQueryParams(window.location.href);if(window.location.hostname=="localhost"||window.location.protocol=="file:"){imgDomain=""}else if(p.img_domain!=null){imgDomain=p.img_domain;if(!regProtocol.test(imgDomain)){imgDomain=window.location.protocol+"//"+imgDomain}setCookie("img_domain",imgDomain)}if(!imgDomain)imgDomain=getCookie("img_domain");return imgDomain}olympus17.getCDNHost=getCDNHost;function getCookie(name){if(document.cookie.length>0){var start=document.cookie.indexOf(name+"=");if(start!=-1){start=start+name.length+1;var end=document.cookie.indexOf(";",start);if(end==-1)end=document.cookie.length;return decodeURIComponent(document.cookie.substring(start,end))}}return""}function setCookie(name,value,expire){var exstr="";if(expire!=null){var exdate=new Date;exdate.setMilliseconds(exdate.getMilliseconds()+expire);exstr=";expires="+exdate.toUTCString()}document.cookie=name+"="+encodeURIComponent(value)+exstr}function getQueryParams(url){var index=url.indexOf("#");if(index>=0){url=url.substring(0,index)}index=url.indexOf("?");if(index<0)return{};var queryString=url.substring(index+1);var params={};var kvs=queryString.split("&");for(var _i=0,kvs_1=kvs;_i<kvs_1.length;_i++){var kv=kvs_1[_i];var pair=kv.split("=",2);if(pair.length!==2||!pair[0]){console.log("[URLUtil] invalid query params: "+kv);continue}var name=decodeURIComponent(pair[0]);var value=decodeURIComponent(pair[1]);params[name]=value}return params}})(olympus17||(olympus17={}));