◆42Lab是非盈利性、非官方的云图计划维基百科。
◆诚邀指挥官们加入编辑部共同建设wiki。点这里加入42Lab
如果您发现某些内容错误/空缺,请勇于修正/添加!参与进来其实很容易!
◆有任何意见、建议、纠错,欢迎在任意评论区评论
◆编辑讨论QQ群741423564 微博@GFwiki少前百科 欢迎您

微件:BatchCreateByTemplate

来自42LAB

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

<button id="BCBTsubmit" style="padding:0.5em 1em">确认创建</button> <script> BCBTMeta={ "wiki":"", "state":"ready", "queue":[], "data":{/* "template":"", "key":[], "page":{}, */} } BCBTFun={ "initialize":function(){ if(mw.config.get('wgUserGroups').indexOf("sysop")==-1 && mw.config.get('wgUserGroups').indexOf("widgeteditor")==-1 ){ document.getElementById("BatchCreateByTemplate").innerHTML="你无权使用这个功能。" return } BCBTMeta.wiki="/w" 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.data.template=title[0] BCBTMeta.data.key=[] BCBTMeta.data.page={} for(let i=1,ilen=title.length;i<ilen;i++){ BCBTMeta.data.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]){ let page=cell[0].replace(/^(.)/,function(s){return s.toUpperCase()}) BCBTMeta.data.page[page]=[] for(let j=1,jlen=title.length;j<jlen;j++){ BCBTMeta.data.page[page].push(cell[j]||"") } } } let BCBTdisplay=document.getElementById("BCBTdisplay") BCBTdisplay.innerHTML="" for(let key in BCBTMeta.data.page){ let text="[[<a href="+BCBTMeta.wiki+"/"+encodeURIComponent(key)+" title="+key+" target=_blank>"+key+"</a>]]" text+="\n\n{{"+(BCBTMeta.data.template?"<a href="+BCBTMeta.wiki+"/"+encodeURIComponent("模板:"+BCBTMeta.data.template)+" title="+"模板:"+BCBTMeta.data.template+" target=_blank>"+BCBTMeta.data.template+"</a>":"请确认模板") for(let i=0,ilen=BCBTMeta.data.key.length;i<ilen;i++){ text+="\n|"+(BCBTMeta.data.key[i]?BCBTMeta.data.key[i]+"=":"")+BCBTMeta.data.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.data.page){ let text="{{"+BCBTMeta.data.template for(let i=0,ilen=BCBTMeta.data.key.length;i<ilen;i++){ text+="\n|"+(BCBTMeta.data.key[i]?BCBTMeta.data.key[i]+"=":"")+BCBTMeta.data.page[key][i] } text+="\n}}" let fd=new FormData() fd.append("action","edit") fd.append("title",key) fd.append("summary","通过批量创建工具创建") fd.append("text",text) fd.append("format","json") BCBTMeta.queue.push(fd) } BCBTFun.checkToken() } } }, "checkToken":function(oToken){ if(!oToken){ getApi("http://wiki.42lab.cloud/api.php?action=query&meta=tokens&format=json",function(json){ let token=JSON.parse(json).query.tokens.csrftoken BCBTFun.sendFd(token) }) } else{ BCBTFun.sendFd(oToken) } }, "sendFd":function(token){ let url="http://wiki.42lab.cloud/api.php" let fd=BCBTMeta.queue.shift() try{ fd.append("token",token) postFdApi(url,fd,function(json){ let title=JSON.parse(json).edit.title getApi("http://wiki.42lab.cloud/w/"+encodeURIComponent(title),function(){}) document.querySelector("#BCBTdisplay pre[data-title=\""+title+"\"]").classList.add("created") BCBTFun.checkToken(token) }) } catch(e){ document.getElementById("BCBTsubmit").innerHTML="创建完毕,如需再次使用请刷新页面" alert("创建完毕,如需再次使用请刷新页面") } }, } 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> textarea[readonly]{ color:lightgray; } .created{ background:#5CB85C; } </style>