2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

User:Cstd/js/MarkAsResolved.js

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索

注意:在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox/Safari:按住“Shift”的同时单击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)
  • Google Chrome:按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)
  • Internet Explorer:按住“Ctrl”的同时单击“刷新”,或按“Ctrl-F5”
  • Opera:在“工具→首选项”中清除缓存
如果您已登录但该页面出现未登录状态,请尝试在地址栏的地址最后添加代码?_=1来访问最新页面。
添加代码后的本页地址如下:-{R|https://moegirl.icu/User:Cstd/js/MarkAsResolved.js?_=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>