User:一位史蒂夫/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來訪問最新頁面。
  1. /*
  2. MarkAsResolved.js
  3. by User:AnnAngela
  4. Adapted for autoconfirmed by User:一位史蒂夫
  5. Warning:Abuse of this tool is prohibited!
  6. Original script: http://zh.moegirl.tw/User:AnnAngela/js/MarkAsResolved.js
  7. More versions (upward compatible) :
  8. > Goodeditor [[User:Leranjun/MarkAsResolved.js]]
  9. > Patroller [[User:AnnAngela/js/MarkAsResolved.js]]
  10. */
  11. // <pre>
  12. "use strict";
  13. (async function () {
  14. if (!mw.config.get("wgPageName").startsWith("萌娘百科_talk:討論版/")) {
  15. return;
  16. }
  17. if (!mw.config.get("wgUserGroups").includes("autoconfirmed")) {
  18. return;
  19. }
  20. 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");
  21. await mw.loader.using(["mw.Api", "mediawiki.Uri"]);
  22. var runningFlag = false;
  23. 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"),
  24. api = new mw.Api();
  25. // container.find("#AnnTools_comment").val(localStorage.getItem("AnnTools_MarkAsResolved_comment") || "");
  26. var offsets = {
  27. n: 10,
  28. s: 10
  29. };
  30. var toggle = function toggle(type) {
  31. var isHide = type === "hide";
  32. $(".AnnTools_form .AnnTools_radio" + (isHide ? ":not(:checked)" : "")).closest("li")[isHide ? "hide" : "show"]();
  33. $("#AnnTools_precomment, #AnnTools_comment").each(function (_, input) {
  34. var $input = $(input);
  35. if (!isHide || ($input.val() || "").length === 0) {
  36. $input.closest("dd")[isHide ? "hide" : "show"]();
  37. $input.closest("dd").prev()[isHide ? "hide" : "show"]();
  38. }
  39. });
  40. var inputs = container.find("input");
  41. if (isHide) {
  42. inputs.attr("disabled", "disabled");
  43. } else {
  44. inputs.removeAttr("disabled");
  45. }
  46. };
  47. container.on("click", function (event) {
  48. if (runningFlag) {
  49. return;
  50. }
  51. var target = $(event.target);
  52. if (target.is(".AnnTools_Frame_Close") && !target.is(".disable")) {
  53. container.fadeOut(370).queue(function () {
  54. container.find(".AnnTools_Confirm").removeAttr("style");
  55. $(this).dequeue();
  56. });
  57. toggle("show");
  58. } else if (target.is("#AnnTools_Confirm_First .AnnTools_Confirm_Yes")) {
  59. container.find("#AnnTools_Confirm_First").hide();
  60. container.find("#AnnTools_Confirm_Second").show();
  61. } else if (target.is("#AnnTools_Confirm_Second .AnnTools_Confirm_Yes")) {
  62. container.trigger("submit");
  63. } else if (target.is(".AnnTools_Confirm_No")) {
  64. container.fadeOut(370).queue(function () {
  65. container.find(".AnnTools_Confirm").removeAttr("style");
  66. $(this).dequeue();
  67. });
  68. toggle("show");
  69. } else if (target.is(".AnnTools_radio")) {
  70. target.closest(".AnnTools_form").find(".AnnTools_radio:checked").prop("checked", false);
  71. target.prop("checked", true);
  72. }
  73. }).on("submit", async function () {
  74. try {
  75. if (typeof Object.fromEntries !== "function") {
  76. throw new Error("請更新瀏覽器到最新版本以使用本工具(最低可用版本為 Chrome & Edge: 73+, Firefox: 63+, Safari: 12.1+)");
  77. }
  78. runningFlag = true;
  79. container.find(".AnnTools_Confirm_Yes, .AnnTools_Confirm_No").text("正在運行");
  80. container.find(".AnnTools_status").text("正在標記中……");
  81. toggle("hide");
  82. var c = $("#AnnTools_comment").val();
  83. var v = container.find(".AnnTools_radio:checked").val();
  84. var pc = $("#AnnTools_precomment").val() || "";
  85. var hash = container.data("sectionTitle");
  86. var toclist = Object.fromEntries((await api.post({
  87. action: "parse",
  88. format: "json",
  89. pageid: mw.config.get("wgArticleId"),
  90. prop: "sections"
  91. })).parse.sections.map(function (_ref) {
  92. var anchor = _ref.anchor;
  93. var index = _ref.index;
  94. return [anchor, index];
  95. }));
  96. if (!(hash in toclist)) {
  97. throw new Error("請移除該標題內的模板後再行操作……");
  98. }
  99. var section = toclist[hash];
  100. await api.postWithToken("csrf", {
  101. action: "edit",
  102. pageid: mw.config.get("wgArticleId"),
  103. section: section,
  104. summary: "標記討論串「/* " + container.data("sectionTitle") + " */」狀態為【" + container.find(".AnnTools_radio:checked + label").text() + "】",
  105. tags: "Automation tool",
  106. nocreate: true,
  107. 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=~~~~}}"
  108. });
  109. container.find(".AnnTools_status").text("編輯完成!即將刷新!").addClass("AnnTools_WorkDetail_Succeed");
  110. // localStorage.setItem("AnnTools_MarkAsResolved_comment", c);
  111. setTimeout(function () {
  112. location.reload(false);
  113. }, 1307);
  114. } catch (e) {
  115. console.error("MarkAsResolved.js", e);
  116. container.find(".AnnTools_status").text("發生錯誤:" + e);
  117. runningFlag = false;
  118. container.find(".AnnTools_Confirm_Yes").text("就是這樣");
  119. container.find(".AnnTools_Confirm_No").text("我再想想");
  120. toggle("show");
  121. }
  122. });
  123. $("#mw-content-text > .mw-parser-output > h2, #mw-content-text > .mw-parser-output > .discussionContainer > h2").each(function () {
  124. var self = $(this);
  125. var content = self.nextUntil("h2").not("h2");
  126. if (content.hasClass("saveNotice") || content.hasClass("MarkAsResolved")) {
  127. return;
  128. }
  129. var sectionTitle = self.find(".mw-headline").attr("id");
  130. self.find(".mw-editsection-bracket").first().after('<span class="mw-editsection-divider"> | </span>').after('<a href="javascript:void(0)" class="AnnTools_MarkAsResolved">標記狀態</a>');
  131. self.on("click", function (event) {
  132. if (!$(event.target).is(".AnnTools_MarkAsResolved") || container.is(":visible")) {
  133. return true;
  134. }
  135. container.find(".AnnTools_SectionTitle").text(sectionTitle);
  136. container.data({
  137. sectionTitle: sectionTitle
  138. }).fadeIn(370);
  139. });
  140. var quicksave = self.find(".AnnTools_QuickSave");
  141. if (quicksave[0]) {
  142. var divider = quicksave.next(".mw-editsection-divider");
  143. self.find(".mw-editsection .mw-editsection-bracket").first().after(divider).after(quicksave);
  144. }
  145. });
  146. })();
  147. // </pre>
此頁面最後編輯於 2021年5月20日 (週四) 00:14。
搜尋萌娘百科 (按"/"快速搜尋)
有新的未讀公告