注意:在您儲存之後您必須清除瀏覽器快取才可看到最新的變動。
?_=1來訪問最新頁面。
/* eslint-disable no-magic-numbers */
/* global mw */
// <pre>
(async () => {
if (!mw.config.get("wgPageName").startsWith("萌娘百科_talk:討論版/")) return;
if (!mw.config.get("wgUserGroups").includes("sysop") && !mw.config.get("wgUserGroups").includes("patroller")) { return; }
mw.loader.load("https://zh.moegirl.org/User:AnnAngela/js/quick-save.js/style.css?action=raw&ctype=text/css", "text/css");
await new Promise((res) => {
const i = setInterval(() => {
if (typeof mw.Uri === "function" && typeof mw.Api === "function") {
clearInterval(i);
res();
}
}, 1000);
});
let runningFlag = false;
const container = $(`<div class="AnnTools_Frame" style="display: none;"><div class="AnnTools_Frame_Head"><div class="AnnTools_Frame_Title">公共討論頁段落狀態標記工具</div><span class="AnnTools_Frame_Close">×</span></div><div class="AnnTools_Frame_Content"><div class="AnnTools_Confirm" id="AnnTools_Confirm_First"><div class="AnnTools_Confirm_Content">請問你是要標記這個段落嗎?<br>段落標題:<span class="AnnTools_SectionTitle"></span></div><div class="AnnTools_Confirm_Yes">是呀是呀</div><div class="AnnTools_Confirm_No">並不是呢</div></div><div class="AnnTools_Confirm AnnTools_Confirm_expand" id="AnnTools_Confirm_Second"><div class="AnnTools_Confirm_Content">請問你想標記這個段落為什麼狀態?<br>段落標題:<span class="AnnTools_SectionTitle"></span><dl><dt>狀態:</dt><dd><ul class="AnnTools_form"><li><input class="AnnTools_radio" value="r" id="AnnTools_radio_r" type="radio" checked="checked"><label for="AnnTools_radio_r">問題已解決</label></li><li><input class="AnnTools_radio" value="a" id="AnnTools_radio_a" type="radio"><label for="AnnTools_radio_a">請求已接受</label></li><li><input class="AnnTools_radio" value="s" id="AnnTools_radio_s" type="radio"><label for="AnnTools_radio_s">請求被暫緩</label></li><li><input class="AnnTools_radio" value="n" id="AnnTools_radio_n" type="radio"><label for="AnnTools_radio_n">無人回覆<s>(點名批評)</s></label></li><li><input class="AnnTools_radio" value="d" id="AnnTools_radio_d" type="radio"><label for="AnnTools_radio_d">請求被拒絕</label></li></ul></dd><dt>留言(會被保存到瀏覽器供下次複用):</dt><dd><input id="AnnTools_comment" type="text" size="255" placeholder="(但是如果不寫就啥也沒有)"></dd></dl></div><div class="AnnTools_Confirm_Yes">就是這樣</div><div class="AnnTools_Confirm_No">我再想想</div><div class="AnnTools_status"></div></div></div></div>`).appendTo("body"),
api = new mw.Api();
// container.find("#AnnTools_comment").val(localStorage.getItem("AnnTools_MarkAsResolved_comment") || "");
container.on("click", function(event) {
if (runningFlag) {
return;
}
var target = $(event.target);
if (target.is(".AnnTools_Frame_Close") && !target.is(".disable")) {
container.fadeOut(370).queue(function() {
container.find(".AnnTools_Confirm").removeAttr("style");
$(this).dequeue();
});
} else if (target.is("#AnnTools_Confirm_First .AnnTools_Confirm_Yes")) {
container.find("#AnnTools_Confirm_First").fadeOut(370);
container.find("#AnnTools_Confirm_Second").fadeIn(370);
} else if (target.is("#AnnTools_Confirm_Second .AnnTools_Confirm_Yes")) {
container.trigger("submit");
} else if (target.is(".AnnTools_Confirm_No")) {
container.fadeOut(370).queue(function() {
container.find(".AnnTools_Confirm").removeAttr("style");
$(this).dequeue();
});
} else if (target.is(".AnnTools_radio")) {
target.closest(".AnnTools_form").find(".AnnTools_radio:checked").prop("checked", false);
target.prop("checked", true);
}
}).on("submit", async () => {
try {
if (typeof Object.fromEntries !== "function") {
throw new Error("請更新瀏覽器到最新版本以使用本工具(最低可用版本為 Chrome & Edge: 73+, Firefox: 63+, Safari: 12.1+)");
}
runningFlag = true;
container.find(".AnnTools_Confirm_Yes, .AnnTools_Confirm_No").text("正在運行");
container.find(".AnnTools_status").text("正在標記中……");
const c = $("#AnnTools_comment").val();
const v = container.find(".AnnTools_radio:checked").val();
const hash = container.data("sectionTitle");
const toclist = Object.fromEntries((await api.post({
action: "parse",
format: "json",
pageid: mw.config.get("wgArticleId"),
prop: "sections",
})).parse.sections.map(({ anchor, index }) => [anchor, index]));
if (!(hash in toclist)) {
throw new Error("請移除該標題內的模板後再行操作……");
}
const section = toclist[hash];
await api.postWithToken("csrf", {
action: "edit",
pageid: mw.config.get("wgArticleId"),
section,
summary: `標記討論串「/* ${container.data("sectionTitle")} */」狀態為【${container.find(".AnnTools_radio:checked + label").text()}】`,
tags: "Automation tool",
nocreate: true,
appendtext: `\n{{MarkAsResolved|time={{subst:#timel:Ymd}}|status=${v === "s" ? `s|archive-offset=10` : v}|comment=${c}|sign=~~~~}}`
});
container.find(".AnnTools_status").text("編輯完成!即將刷新!").addClass("AnnTools_WorkDetail_Succeed");
// localStorage.setItem("AnnTools_MarkAsResolved_comment", c);
setTimeout(() => { location.reload(false); }, 1307);
} catch (e) {
console.error("MarkAsResolved.js", e);
container.find(".AnnTools_status").text(`發生錯誤:${e}`);
runningFlag = false;
container.find(".AnnTools_Confirm_Yes").text("就是這樣");
container.find(".AnnTools_Confirm_No").text("我再想想");
}
});
$("#mw-content-text > .mw-parser-output > h2, #mw-content-text > .mw-parser-output > .discussionContainer > h2").each(function() {
var self = $(this);
var content = self.nextUntil("h2").not("h2");
if (content.hasClass("saveNotice") || content.hasClass("MarkAsResolved")) { return; }
var sectionTitle = self.find(".mw-headline").attr("id");
self.find(".mw-editsection-bracket").first()
.after('<span class="mw-editsection-divider"> | </span>')
.after('<a href="javascript:void(0)" class="AnnTools_MarkAsResolved">標記狀態</a>');
self.on("click", function(event) {
if (!$(event.target).is(".AnnTools_MarkAsResolved") || container.is(":visible")) { return true; }
container.find(".AnnTools_SectionTitle").text(sectionTitle);
container.data({
sectionTitle
}).fadeIn(370);
});
var quicksave = self.find(".AnnTools_QuickSave");
if (quicksave[0]) {
var mar = self.find(".AnnTools_MarkAsResolved");
var divider = mar.next(".mw-editsection-divider");
self.find(".mw-editsection").prepend(divider).prepend(mar);
}
});
})();
// </pre>