User:Leranjun/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:進入「工具→偏好設定」中清除快取。
  • 如果您已登入但該頁面出現未登入狀態,請嘗試在網址列的URL最後新增代碼?_=1來訪問最新頁面。
/*
MarkAsResolved.js
by User:AnnAngela
Adapted with ♥ for goodeditor by User:Leranjun

Original script: [[User:AnnAngela/js/MarkAsResolved.js]
*/
// <pre>
"use strict";

(async function () {
    if (!mw.config.get("wgPageName").startsWith("萌娘百科_talk:討論版/")) {
        return;
    }
    if (!mw.config.get("wgUserGroups").includes("goodeditor")) {
        return;
    }
    mw.loader.load(mw.config.get("wgServer") + mw.config.get("wgScriptPath") + "/User:AnnAngela/js/quick-save.js/style.css?action=raw&ctype=text/css", "text/css");
    await mw.loader.using(["mediawiki.api", "mediawiki.Uri"]);
    var runningFlag = false;
    var container = $("<div class=\"AnnTools_Frame\" style=\"display: none;\"><div class=\"AnnTools_Frame_Head\"><div class=\"AnnTools_Frame_Title\">公共討論頁MAR工具(優編版)</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=\"p\" id=\"AnnTools_radio_p\" type=\"radio\"><label for=\"AnnTools_radio_p\">問題已答覆</label></li><li><input class=\"AnnTools_radio\" value=\"w\" id=\"AnnTools_radio_w\" type=\"radio\" ><label for=\"AnnTools_radio_w\">請求被撤回</label></li><li><input class=\"AnnTools_radio\" value=\"n\" id=\"AnnTools_radio_n\" type=\"radio\"><label for=\"AnnTools_radio_n\">無人回覆<s>(點名批評)</s></label></li></ul></dd><dt>前置留言:</dt><dd><input id=\"AnnTools_precomment\" type=\"text\" size=\"255\" placeholder=\"(但是如果不寫就啥也沒有)\"></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") || "");
    var offsets = {
        n: 10,
        s: 10
    };
    var toggle = function toggle(type) {
        var isHide = type === "hide";
        $(".AnnTools_form .AnnTools_radio" + (isHide ? ":not(:checked)" : "")).closest("li")[isHide ? "hide" : "show"]();
        $("#AnnTools_precomment, #AnnTools_comment").each(function (_, input) {
            var $input = $(input);
            if (!isHide || ($input.val() || "").length === 0) {
                $input.closest("dd")[isHide ? "hide" : "show"]();
                $input.closest("dd").prev()[isHide ? "hide" : "show"]();
            }
        });
        var inputs = container.find("input");
        if (isHide) {
            inputs.attr("disabled", "disabled");
        } else {
            inputs.removeAttr("disabled");
        }
    };
    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();
            });
            toggle("show");
        } else if (target.is("#AnnTools_Confirm_First .AnnTools_Confirm_Yes")) {
            container.find("#AnnTools_Confirm_First").hide();
            container.find("#AnnTools_Confirm_Second").show();
        } 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();
            });
            toggle("show");
        } else if (target.is(".AnnTools_radio")) {
            target.closest(".AnnTools_form").find(".AnnTools_radio:checked").prop("checked", false);
            target.prop("checked", true);
        }
    }).on("submit", async function () {
        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("正在標記中……");
            toggle("hide");
            var c = $("#AnnTools_comment").val();
            var v = container.find(".AnnTools_radio:checked").val();
            var pc = $("#AnnTools_precomment").val() || "";
            var hash = container.data("sectionTitle");
            var toclist = Object.fromEntries((await api.post({
                action: "parse",
                format: "json",
                pageid: mw.config.get("wgArticleId"),
                prop: "sections"
            })).parse.sections.map(function (_ref) {
                var anchor = _ref.anchor;
                var index = _ref.index;
                return [anchor, index];
            }));
            if (!(hash in toclist)) {
                throw new Error("請移除該標題內的模板後再行操作……");
            }
            var section = toclist[hash];
            await api.postWithToken("csrf", {
                action: "edit",
                pageid: mw.config.get("wgArticleId"),
                section: section,
                summary: "標記討論串「/* " + container.data("sectionTitle") + " */」狀態為【" + container.find(".AnnTools_radio:checked + label").text() + "】",
                tags: "Automation tool",
                nocreate: true,
                appendtext: (pc.length > 0 ? "\n:" + pc + "--~~~~" : "") + "\n\n{{MarkAsResolved|time={{subst:#timel:Ymd}}|status=" + (v in offsets ? v + "|archive-offset=" + offsets[v] : v) + "|comment=" + c + "|sign=~~~~}}"
            });
            container.find(".AnnTools_status").text("編輯完成!即將刷新!").addClass("AnnTools_WorkDetail_Succeed");
            // localStorage.setItem("AnnTools_MarkAsResolved_comment", c);
            setTimeout(function () {
                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("我再想想");
            toggle("show");
        }
    });
    $("#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: sectionTitle
            }).fadeIn(370);
        });
        var quicksave = self.find(".AnnTools_QuickSave");
        if (quicksave[0]) {
            var divider = quicksave.next(".mw-editsection-divider");
            self.find(".mw-editsection .mw-editsection-bracket").first().after(divider).after(quicksave);
        }
    });
})();
// </pre>
此頁面最後編輯於 2021年11月22日 (星期一) 13:47。
搜尋萌娘百科 (按"/"快速搜尋)
有新的未讀公告