此处公告通常对读者进行申明或对该WIKI某些规则进行公告,请在确认后修改本通告。本WIKI编辑权限开放,欢迎收藏起来防止迷路,也希望有爱的小伙伴和我们一起编辑哟~

全站通知:

批量页面覆盖式编辑工具

阅读

    

2022-09-09更新

    

最新编辑:九歌一雩

阅读:

  

更新日期:2022-09-09

  

最新编辑:九歌一雩

来自一指战群雄WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模板为一键安装导入,不建议手动修改。

简单说明

版本:1.0

说明:将整理好的内容批量添加到大量wiki页面,允许覆盖或追加。

安装方法

  • 自动安装:拥有站点管理员权限的同学可以在本页面使用一键安装功能
  • 手动安装:复制以下依赖页面中的内容到相同页面名称的页面中

使用说明

典型案例:

  • 批量创建人物/武器页面,格式基本相同
  • 向部分页面头部增加导航栏/施工中模板。
  • 为一些页面尾部添加分类导航模板。

0. 准备模板和数据

本工具将基于指定的模板生成页面。

请在Excel中按以下格式准备数据:

模板名 参数1名 参数2名 ……
页面1名 参数1 参数2 ……
页面2名 参数1 参数2 ……
……
  • 如果模板没有指定参数名,将“参数1名”等留空即可
  • 如果某参数为空,对应位置留空即可
  • 如果页面名重复,将以最后一条数据为准

1.选择模式

选择需要的模式:

  • 新建页面 / 覆盖已有页面
  • 在页面开头追加内容
  • 在页面末尾追加内容

2. 粘贴数据

打开要操作的wiki,进入 Widget:BatchCreateByTemplate 工具页面

复制Excel中的数据,粘贴到工具页面中的文本框。

文本框下方将立即出现页面内容预览。

请检查预览是否符合预期。如有需要可以反复删除重新粘贴。

3. 创建页面

点击页面底部的“提交”按钮。稍等片刻,工具创建完页面后会再次弹出提示框。

这一步根据页面数量和网络情况可能需要一定时间,请耐心等待。

创建完成后,页面会弹出窗口:

文件:批量页面覆盖式编辑工具完成提示框.png

例子

例子一

文件:批量页面覆盖式编辑工具例子1.png

例子二

文件:批量页面覆盖式编辑工具例子2.png

作者

丩卩夂忄


依赖页面

<div id="BatchCreateByTemplate"> <textarea id="BCBTexcel" style="width:100%;height:300px"></textarea> <div id="BCBTdisplay" class="row"></div> <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){ document.getElementById("BatchCreateByTemplate").innerHTML="你无权使用这个功能。" return } BCBTMeta.wiki=mw.config.values.wgScriptPath 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="[["+key+"]]" text+="\n\n{{"+(BCBTMeta.data.template?""+BCBTMeta.data.template+"":"<span style='color:red'>请确认模板</span>") 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("https://wiki.biligame.com"+BCBTMeta.wiki+"/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="https://wiki.biligame.com"+BCBTMeta.wiki+"/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("https://wiki.biligame.com"+BCBTMeta.wiki+"/"+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> </div>

更新日志

1.0