站内所涉及的公司名称、商标、产品等均为其各自所有者所有的资产,站点内使用仅供用于识别。站点内使用的所有游戏图片、游戏文案等其他素材,其版权为游戏权利方所有。
如有异议请发邮件至:bwiki@bilibili.com,或联系客服QQ:1968897839。

如果希望显示隐藏日文注释,请前往 参数设置-小工具 取消勾选“隐藏日文注释”并保存,等待缓存刷新。
可以在 参数设置-小工具 中设置首页主题。

欢迎加入WIKI交流群,群号:945590010
欢迎加入QQ频道【突击莉莉】,点击加入

全站通知:

Widget:BatchCreateByTemplate

来自突击莉莉终结之弹WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

从Excel中复制粘贴↓

模式: <label><input type="radio" name="bcbtMode" value="text" checked>新建页面/覆盖已有页面</label> <label><input type="radio" name="bcbtMode" value="prependtext">在页面开头追加内容</label> <label><input type="radio" name="bcbtMode" value="appendtext">在页面末尾追加内容</label>

<textarea class="input"></textarea>

<button class="submit">提交</button>

<style> .BCBT .title { display: flex; }

.BCBT .title .modeOption { margin-left: 2em; display: flex; }

.BCBT .title .modeOption { margin-left: 2em; }

.BCBT .title .modeOption label { margin-right: 0.5em; font-weight: normal; }

.BCBT .display pre.created { background: #5CB85C; }

.BCBT .input { width: 100%; height: 300px; }

.BCBT .submit, .BCBT .reset { padding: 0.5em 1em; } </style> <script> class BCBT { state = "ready" option = { mode: "text" } data = { template: "", key: [], page: {}, } promise = Promise.resolve()

constructor(dom, wiki) { this.dom = $(dom) this.dom.data("BCBT", this) this.wiki = wiki || mw.config.values.wgScriptPath }

update() { this.parse() let $display = this.dom.find(".display") $display.empty() for (let key in this.data.page) {

let $pre = $(`

`)
			$pre.append(`[[${key}]]`)
			$pre.append("
") $pre.append(this.stringify(`${key}`).replace(new RegExp(`^{{${this.data.template}\n`), `{{${this.data.template}\n`)) $display.append($pre) } } parse() { let text = this.dom.find(".input").val() let pages = text.split("\n") let key = pages.shift().split("\t") key.forEach((e, i, a) => { a[i] = e.trim() }) this.data.template = key.shift() this.data.key = key this.data.page = {} pages.forEach((e) => { let value = e.split("\t") value.forEach((e, i, a) => { a[i] = e.trim() }) let page = value.shift() if (!page) { return } this.data.page[page] = value }) } stringify(page) { let str = `{{${this.data.template}` this.data.key.forEach((e, i) => { str += `\n|${e ? `${e}=` : ""}${this.data.page[page][i] || ""}` }) str += "\n}}" return str } submit() { this.state = "busy" this.dom.find(".input,.modeOption input").attr("disabled", true) let url = `${this.wiki}/api.php` for (let key in this.data.page) { this.promise = this.promise.finally(() => { return new Promise((resolve, reject) => { checkToken().then((token) => { $.ajax({ url: url, type: "POST", data: { token: token, action: "edit", title: key, summary: "通过批量创建工具BCBT创建/编辑", [this.option.mode]: this.stringify(key) }, success: () => { $.get(`${this.wiki}${decodeURI(key)}`, () => { this.dom.find(`.display pre[data-title="${encodeURIComponent(key)}"]`).addClass("created") resolve() }) } }) }) }) }) } this.promise = this.promise.finally(() => { if (confirm("创建完毕,是否重置?")) { this.reset() } else { this.dom.find(".submit") .removeClass("submit") .addClass("reset") .html("重置") } }) function checkToken() { return new Promise((resolve, reject) => { $.ajax({ url: url, type: "GET", data: { action: "query", meta: "tokens", format: "json" }, success(data) { resolve(data.query.tokens.csrftoken) } }) }) } } reset() { this.state = "ready" this.dom.find(".input,.modeOption input").attr("disabled", false) this.dom.find(".input").val("") this.update() this.dom.find(".reset") .removeClass("reset") .addClass("submit") .html("提交") } } (window.RLQ = window.RLQ || []).push(["jquery", () => { let bcbt = $(".BCBT") if (mw.config.get('wgUserGroups').indexOf("sysop") === -1) { bcbt.html("你无权使用这个功能。") return } bcbt.each((i, e) => { new BCBT(e) }) $(document).on("input", ".BCBT .input", function () { $(this).closest(".BCBT").data("BCBT").update() }) $(document).on("input", `.BCBT .modeOption input[name="bcbtMode"]`, function () { $(this).closest(".BCBT").data("BCBT").option.mode = $(this).val() }) $(document).on("click", `.BCBT .submit`, function () { let bcbt = $(this).closest(".BCBT").data("BCBT") if (bcbt.state === "ready" && confirm("真的确认了吗?")) { bcbt.submit() } }) $(document).on("click", `.BCBT .reset`, function () { $(this).closest(".BCBT").data("BCBT").reset() }) }]) </script>