(cb)
| 873 | } |
| 874 | |
| 875 | function addCustomSites(cb){ |
| 876 | storage.getItem("siteRule",v=>{ |
| 877 | siteRule=v; |
| 878 | if(siteRule){ |
| 879 | var rules=siteRule.split("\n"); |
| 880 | rules.forEach(rule=>{ |
| 881 | if(/^\s*\/\//.test(rule))return; |
| 882 | var ruleArr=rule.split(/\s*@@\s*/); |
| 883 | var siteConfig={custom:true}; |
| 884 | if(ruleArr[1] && (ruleArr[0].indexOf("$url")!=-1 || ruleArr[0].indexOf("$hash")!=-1 || ruleArr[0].indexOf("${")!=-1 || ruleArr[0].indexOf("$base64")!=-1)){ |
| 885 | siteConfig.noTxt=true; |
| 886 | siteConfig.directUrl=function(offUrl, targetNode){ |
| 887 | let regIndex=ruleArr[0].indexOf("${"); |
| 888 | if(regIndex!=-1){ |
| 889 | var strMatch=ruleArr[0].match(/\${(.*?)}/); |
| 890 | var regStr=strMatch?strMatch[1]:""; |
| 891 | if(!regStr)return; |
| 892 | var linkReg,linkMatch,linkResult; |
| 893 | if(regIndex==0 || (regIndex==2 && /^[cp]:/.test(ruleArr[0]))){ |
| 894 | linkReg=new RegExp(regStr,"i"); |
| 895 | return offUrl.replace(linkReg, ruleArr[0].replace(strMatch[0],"")); |
| 896 | } |
| 897 | //全匹配为提取模式 |
| 898 | linkReg=new RegExp("^"+regStr+"$","i"); |
| 899 | linkMatch=offUrl.match(linkReg); |
| 900 | if(linkMatch){ |
| 901 | linkResult=linkMatch[1]||linkMatch[0]; |
| 902 | return linkResult?ruleArr[0].replace(/\${.*?}/,linkResult):ruleArr[0]; |
| 903 | }else{ |
| 904 | //部分匹配为替换模式 |
| 905 | linkReg=new RegExp(regStr,"gi"); |
| 906 | return offUrl.replace(linkReg,""); |
| 907 | } |
| 908 | } |
| 909 | var hash=offUrl.replace("magnet:?xt=urn:btih:","").replace(/&.*/,""); |
| 910 | var base64Str=btoa(offUrl); |
| 911 | return ruleArr[0].replace("$url", offUrl).replace("$hash", hash).replace("$base64", base64Str).replace("$title", targetNode&&targetNode.title?targetNode.title:document.title).replace("$text", targetNode&&targetNode.innerText?targetNode.innerText:offUrl).replace("$random", Math.random()); |
| 912 | }; |
| 913 | if(ruleArr[3]) siteConfig.bgImg=ruleArr[3]; |
| 914 | else siteConfig.bgImg=downIconBg; |
| 915 | if(ruleArr[4]) siteConfig.bgColor=ruleArr[4]; |
| 916 | else siteConfig.bgColor="f2f2f2"; |
| 917 | if(ruleArr[2]) { |
| 918 | siteConfig.linkRegExp=new RegExp(ruleArr[2],"i"); |
| 919 | if(ruleArr[5]) { |
| 920 | siteConfig.overToShow=true; |
| 921 | overRegs.push(ruleArr[2]); |
| 922 | }else{ |
| 923 | regs.push(ruleArr[2]); |
| 924 | } |
| 925 | } |
| 926 | sites[ruleArr[1]]=siteConfig; |
| 927 | }else if(ruleArr[1] && ruleArr[0].indexOf("$text")!=-1){ |
| 928 | siteConfig.directUrl=function(offUrl, targetNode){ |
| 929 | ruleArr[0]=ruleArr[0].replace("$text{","${"); |
| 930 | let regIndex=ruleArr[0].indexOf("${"); |
| 931 | if(regIndex!=-1){ |
| 932 | var strMatch=ruleArr[0].match(/\${(.*?)}/); |
no test coverage detected