全站通知:

Widget:Pagefill

来自勇气默示录WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

<textarea id="BCBTexcel" style="width:100%;height:300px"></textarea>

<button id="BCBTsubmit" style="padding:0.5em 1em">确认创建</button> <script> BCBTMeta={ "template":"", "key":[], "page":{}, "state":"ready", } BCBTFun={ "initialize":function(){ if(mw.config.get('wgUserGroups').indexOf("sysop")==-1){ //document.getElementById("BatchCreateByTemplate").innerHTML="你无权使用这个功能。" //return } document.getElementById("BCBTexcel").oninput=function(){ let row=this.value.split("\n") let title=row[0].split("\t") title=title.map(function(e){return e.trim()}) BCBTMeta.template=title[0] BCBTMeta.key=[] BCBTMeta.page={} for(let i=1,ilen=title.length;i<ilen;i++){ BCBTMeta.key.push(title[i]) } for(let i=1,ilen=row.length;i<ilen;i++){ let cell=row[i].split("\t") cell=cell.map(function(e){return e.trim()}) if(cell[0]){ BCBTMeta.page[cell[0]]=[] for(let j=1,jlen=title.length;j<jlen;j++){ BCBTMeta.page[cell[0]].push(cell[j]||"") } } } let BCBTdisplay=document.getElementById("BCBTdisplay") BCBTdisplay.innerHTML="" for(let key in BCBTMeta.page){ let text="[["+key+"]]" text+="\n\n{{"+(BCBTMeta.template?""+BCBTMeta.template+"":"请确认模板") for(let i=0,ilen=BCBTMeta.key.length;i<ilen;i++){ text+="\n|"+(BCBTMeta.key[i]?BCBTMeta.key[i]+"=":"")+BCBTMeta.page[key][i] } text+="\n}}" let pre=document.createElement("pre") pre.classList.add("col-md-3") pre.dataset.title=key pre.innerHTML=text BCBTdisplay.appendChild(pre) } } document.getElementById("BCBTsubmit").onclick=function(){ if(BCBTMeta.state=="ready"&&confirm("真的确认了吗?")){ document.getElementById("BCBTexcel").readOnly=true BCBTMeta.state="busy" for(let key in BCBTMeta.page){ let text="{{"+BCBTMeta.template for(let i=0,ilen=BCBTMeta.key.length;i<ilen;i++){ text+="\n|"+(BCBTMeta.key[i]?BCBTMeta.key[i]+"=":"")+BCBTMeta.page[key][i] } text+="\n}}" getApi("https://wiki.biligame.com"+mw.config.values.wgScriptPath+"/api.php?action=query&meta=tokens&format=json",function(json){ let token=JSON.parse(json).query.tokens.csrftoken let url="https://wiki.biligame.com"+mw.config.values.wgScriptPath+"/api.php" let fd=new FormData() fd.append("action","edit") fd.append("title",key) fd.append("summary","通过批量创建工具创建") fd.append("text",text) fd.append("token",token) fd.append("format","json") postFdApi(url,fd,function(json){ let title=JSON.parse(json).edit.title document.querySelector("#BCBTdisplay pre[data-title=\""+title+"\"]").classList.add("created") }) }) } } } }, } window.addEventListener("load",function(){ BCBTFun.initialize() }) 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) } } } } function postFdApi(url,fd,callback=false,callbackE=false){ let ajax=new XMLHttpRequest() if(!callback){ ajax.open("POST",url,false) ajax.send(fd) let json=JSON.parse(ajax.responseText) return json } ajax.open("POST",url) ajax.send(fd) ajax.onreadystatechange=function(){ if(ajax.readyState==4){ if(ajax.status==200){ callback(ajax.responseText) } else if(ajax.status==404&&callbackE){ callbackE(true) } } } } </script> <style> .created{ background:#5CB85C; } </style>