社区文档构建进行中,欢迎编辑。社区答疑群(非官方):717421103

全站通知:

Widget:GTP

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

<input id="wiki" type="text" placeholder="tools"><input id="template" type="text" placeholder="在此输入模板名"><label><input id="isAnn" type="checkbox">显示注释</label><input type="button" onclick=GTPFun.getPage() value="提交">


<script> GTPFun={ "getPage":function(){ let wiki=document.getElementById("wiki").value?`/${document.getElementById("wiki").value}`:mw.config.values.wgScriptPath let template=document.getElementById("template").value let isAnn=document.getElementById("isAnn").checked getApi(`https://wiki.biligame.com${wiki}/index.php?title=${encodeURI("模板:"+template)}&action=raw`,function(content){ document.getElementById("wikitextResult").innerHTML=GTPFun.createWikitext(template,GTPFun.getParm(content),isAnn) }) }, "getParm":function(content){ let matchParms=content.matchAll(/{{3}([^{}][^{}]*?)}{3}/g) let numParms=[] let textParms={} for(let match of matchParms){ let kv=match[1].split("|") let keyGroup=numParms if(kv[0]=="0"||isNaN(kv[0])){ keyGroup=textParms } if(!keyGroup[kv[0]]){ keyGroup[kv[0]]=[0] } keyGroup[kv[0]][0]++ if(kv[1]){ keyGroup[kv[0]].push(kv[1]) } } return [numParms,textParms] }, "createWikitext":function(template,parms,isAnn=true){ let result="{{"+template for(let i=1;i<parms[0].length;i++){ result+="\n|" if(isAnn){ result+="<!-- " if(!parms[0][i]){ result+=`没有调用参数{{{${i}}}}` } else{ result+=`参数{{{${i}}}}调用了${parms[0][i][0]}次` if(parms[0][i].length>1){ result+=" 可能使用的默认值:" for(let j=1;j<parms[0][i].length;j++){ result+=`【${parms[0][i][j]}】` } } } result+=" -->" } } for(let key in parms[1]){ result+="\n|"+key if(parms[1][key].length==1){ result+="=" } if(isAnn){ result+="<!-- " result+=`参数{{{${key}}}}调用了${parms[1][key][0]}次` if(parms[1][key].length>1){ result+=" 可能使用的默认值:" for(let j=1;j<parms[1][key].length;j++){ result+=`【${parms[1][key][j]}】` } } result+=" -->" }

} result+="\n}}" return result } } function getApi(url,callback=false,callbackE=false){ let ajax=new XMLHttpRequest() if(!callback){ ajax.open("GET",url,false) ajax.send() let json=JSON.parse(ajax.responseText) return json } ajax.open("GET",url) ajax.send() ajax.onreadystatechange=function(){ if(ajax.readyState==4){ if(ajax.status==200){ callback(ajax.responseText) } else if(ajax.status==404&&callbackE){ callbackE(true) } } } } </script>