User:Hotaru Natsumi/js/afc-improperly-submitted-afc-handler.js

维基百科,自由的百科全书

注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。

/* 创建条目专题 非正常提交处理
 * Ver. 0.1.1
 * By.  H.Natsumi
 * 2023.08.07
 */
// <nowiki>
// 获取页面属性
var iNsNum = mw.config.get("wgNamespaceNumber"); // 此处命名空间必为用户(2)或草稿(118)
var bAfcSub = $("table.afc-submission-pending").length == 1 ? true : false;
var bAfcSubErr =
  $("div.mw-parser-output")[0].innerText.indexOf(
    "警告:提交时没有带时间戳,请使用{{subst:submit}}替换本模板"
  ) !== -1
    ? true
    : false;

var iCurId = mw.config.get("wgArticleId"); // 当前页面ID

async function correctAttr() {
  var sFetchUrl = "".concat(
    "/w/api.php?action=query&prop=revisions&pageids=",
    iCurId.toString(),
    "&rvlimit=10&rvprop=timestamp|user|content|ids&format=json&rvslots=*"
  );
  await $.getJSON(sFetchUrl, function (data) {
    let jTreeData = data.query.pages[iCurId].revisions;
    var iSubmitIndex = -1;
    for (var i = 0; i < jTreeData.length; i++) {
      //data.query.pages[iCurId].revisions[0].slots.main['*']
      if (
        jTreeData[i].slots.main["*"].indexOf("afc submission") !== -1 ||
        jTreeData[i].slots.main["*"].indexOf("AFC submission") !== -1 ||
        jTreeData[i].slots.main["*"].indexOf("Afc submission") !== -1
      ) {
        iSubmitIndex = i;
        break;
      }
    }

    if (iSubmitIndex !== -1) {
      var sSubmitter = jTreeData[iSubmitIndex].user;
      var _sSubmitTime = jTreeData[iSubmitIndex].timestamp; // YYYY-mm-ddTHH:MM:SSZ
      var sSubmitTime = _sSubmitTime
        .replace("T", "")
        .replace("Z", "")
        .replace("-", "")
        .replace("-", "")
        .replace(":", "")
        .replace(":", ""); // YYYYmmddHHMMSS
      var sSubmitRev = jTreeData[iSubmitIndex].revid;
      var dialogHtml = `
        <div>
            <label for="afc-submitter">提交者:</label><br/>
            <input type="text" id="afc-submitter" value="${sSubmitter}" /><br/>
            <label for="afc-subtime">提交时间:</label><br/>
            <input type="text" id="afc-subtime" value="${sSubmitTime}" /><br/>
            <label for="afc-notify-creator">通知创建者:</label><br/>
            <input type="checkbox" id="afc-notify-creator" /><br/>
            <label for="afc-notify-submitter">通知提交者:</label><br/>
            <input type="checkbox" id="afc-notify-submitter" /><br/>
            <hr />
            <span style="color: grey;">在${sSubmitRev}获取到上述信息。</span>
        </div>`;
    } else {
      var sSubmitter = "";
      var sSubmitTime = "";
      var dialogHtml = `
        <div>
            <label for="afc-submitter">提交者:</label><br/>
            <input type="text" id="afc-submitter" value="${sSubmitter}" /><br/>
            <label for="afc-subtime">提交时间:</label><br/>
            <input type="text" id="afc-subtime" value="${sSubmitTime}" /><br/>
            <label for="afc-notify-creator">通知创建者:</label><br/>
            <input type="checkbox" id="afc-notify-creator" /><br/>
            <label for="afc-notify-submitter">通知提交者:</label><br/>
            <input type="checkbox" id="afc-notify-submitter" /><br/>
            <hr />
            <span style="color: grey;">未能在前10条历史编辑中取得提交信息,请手动填写。</span>
        </div>`;
    }

    // 弹出对话框
    if (!$dialog) {
      var $dialog = $(dialogHtml).dialog({
        title: "请确认提交信息",
        modal: true,
        buttons: [
          {
            text: "确认",
            click: async function () {
              var bModify = false;
              var bNotedCreator = false;
              var bNotedSubmitter = false;

              // 修正模板参数-Start
              var sFetchUrl = "".concat(
                "/w/api.php?action=query&prop=revisions&pageids=",
                iCurId.toString(),
                "&rvlimit=1&rvprop=content&format=json&rvslots=*"
              );
              await $.getJSON(sFetchUrl, async function (data) {
                var sPageContent =
                  data.query.pages[iCurId].revisions[0].slots.main["*"];
                var sNewContent = sPageContent.replace(
                  "{{afc submission",
                  "{{AFC submission"
                );
                var sNewContent = sNewContent.replace(
                  "{{Afc submission",
                  "{{AFC submission"
                );
                var sNewContent = sNewContent.replace(
                  "{{AFC submission",
                  "".concat(
                    "{{AFC submission|||ts=",
                    sSubmitTime,
                    "|u=",
                    sSubmitter,
                    "|ns=",
                    iNsNum.toString()
                  )
                );

                var sEditUrl = "/w/api.php";
                var sEditData = {
                  action: "edit",
                  format: "json",
                  pageid: iCurId.toString(),
                  text: sNewContent,
                  summary: "".concat(
                    "半自动化修正建立条目专题模板参数:由用户[[User:",
                    sSubmitter,
                    "|",
                    sSubmitter,
                    "]]于",
                    _sSubmitTime,
                    "提交。"
                  ),
                  token: mw.user.tokens.get("csrfToken"),
                };
                await $.post(sEditUrl, sEditData, function (data) {
                  if (data.edit.result == "Success") {
                    bModify = true;
                  } else {
                    bModify = false;
                  }
                });
              });
              // 修正模板参数-End

              // 通知创建者-Start
              if ($("#afc-notify-creator").prop("checked")) {
                var sFetchUrl = "".concat(
                  "/w/api.php?action=query&prop=revisions&pageids=",
                  iCurId.toString(),
                  "&rvlimit=1&rvprop=user&rvslots=*&rvstart=1&rvdir=newer&format=json"
                );
                await $.getJSON(sFetchUrl, async function (data) {
                  var sPageCreator = data.query.pages[iCurId].revisions[0].user;
                  var sNotifyUrl = "/w/api.php";
                  var sNotifyData = {
                    action: "edit",
                    format: "json",
                    title: "".concat("User talk:", sPageCreator),
                    section: "new",
                    sectiontitle: "".concat(
                      "关于您先前创建的条目[[",
                      mw.config.get("wgPageName"),
                      "]]的通知"
                    ),
                    text: "".concat(
                      "您好,您先前建立的条目[[",
                      mw.config.get("wgPageName"),
                      "|",
                      mw.config.get("wgTitle"),
                      "]]由于一些原因,已被[[User:",
                      sSubmitter,
                      "|",
                      sSubmitter,
                      "]]提交至条目建立专题,详细信息您可查看页面历史或直接到相关用户讨论页留言。您可前往移动后的草稿页面继续完善您的条目。祝愉快。--~~~~"
                    ),
                    summary: "".concat(
                      "条目建立专题半自动化通知:条目被移动到草稿空间"
                    ),
                    token: mw.user.tokens.get("csrfToken"),
                  };
                  await $.post(sNotifyUrl, sNotifyData, function (data) {
                    if (data.edit.result == "Success") {
                      bNotedCreator = true;
                    } else {
                      bNotedCreator = false;
                    }
                  });
                });
              }
              // 通知创建者-End

              // 通知提交者-Start
              if ($("#afc-notify-submitter").prop("checked")) {
                var sNotifyUrl = "/w/api.php";
                var sNotifyData = {
                  action: "edit",
                  format: "json",
                  title: "".concat("User talk:", sSubmitter),
                  section: "new",
                  sectiontitle: "".concat(
                    "关于您先前巡查的草稿[[",
                    mw.config.get("wgPageName"),
                    "]]的通知"
                  ),
                  text: "".concat(
                    "您好,您先前移动到草稿并提交至建立条目专题的草稿的提交过程存在问题,请不要直接将{{tlx|AFC submission}}放置于条目内容中,而应该使用{{tlg|submit|code=on|subst=on}},如果您不希望您成为该草稿的提交者,请使用{{tlg|draftnew|条目创建者|code=on|subst=on}}并通知条目创建者该项变动。祝愉快。--~~~~"
                  ),
                  summary: "".concat("条目建立专题半自动化通知:模板参数故障"),
                  token: mw.user.tokens.get("csrfToken"),
                };
                await $.post(sNotifyUrl, sNotifyData, function (data) {
                  if (data.edit.result == "Success") {
                    bNotedSubmitter = true;
                  } else {
                    bNotedSubmitter = false;
                  }
                });
              }
              // 通知提交者-End

              // 弹出结果对话框
              var $resultDialog = $("<div></div>").dialog({
                title: "处理结果",
                modal: true,
                buttons: [
                  {
                    text: "确认",
                    click: function () {
                      $resultDialog.dialog("close");
                    },
                  },
                ],
              });
              // if (bModify) {
              //   $resultDialog.append("<p>模板参数修正成功。</p>");
              // } else {
              //   $resultDialog.append("<p>模板参数修正失败。</p>");
              // }
              // if (bNotedCreator) {
              //   $resultDialog.append("<p>已通知创建者。</p>");
              // } else {
              //   $resultDialog.append("<p>未通知创建者。</p>");
              // }
              // if (bNotedSubmitter) {
              //   $resultDialog.append("<p>已通知提交者。</p>");
              // } else {
              //   $resultDialog.append("<p>未通知提交者。</p>");
              // }
              $resultDialog.append("<p>请求已交至服务器,请前往您的用户贡献确认。</p>");
              $resultDialog.dialog("open");
              $dialog.dialog("close");
            },
          },
          {
            text: "取消",
            click: function () {
              $dialog.dialog("close");
            },
          },
        ],
      });
    } else {
      $dialog.dialog("open");
    }
  });
}

async function cancelSub() {
  var sFetchUrl = "".concat(
    "/w/api.php?action=query&prop=revisions&pageids=",
    iCurId.toString(),
    "&rvlimit=10&rvprop=timestamp|user|content|ids&format=json&rvslots=*"
  );
  $.getJSON(sFetchUrl, function (data) {
    let jTreeData = data.query.pages[iCurId].revisions;
    var iSubmitIndex = -1;
    for (var i = 0; i < jTreeData.length; i++) {
      //data.query.pages[iCurId].revisions[0].slots.main['*']
      if (
        jTreeData[i].slots.main["*"].indexOf("afc submission") !== -1 ||
        jTreeData[i].slots.main["*"].indexOf("AFC submission") !== -1 ||
        jTreeData[i].slots.main["*"].indexOf("Afc submission") !== -1
      ) {
        iSubmitIndex = i;
        break;
      }
    }

    if (iSubmitIndex !== -1) {
      var sSubmitter = jTreeData[iSubmitIndex].user;
      var _sSubmitTime = jTreeData[iSubmitIndex].timestamp; // YYYY-mm-ddTHH:MM:SSZ
      var sSubmitTime = _sSubmitTime
        .replace("T", "")
        .replace("Z", "")
        .replace("-", "")
        .replace("-", "")
        .replace(":", "")
        .replace(":", ""); // YYYYmmddHHMMSS
      var sSubmitRev = jTreeData[iSubmitIndex].revid;
      var dialogHtml = `
        <div>
            <label for="afc-submitter">提交者:</label><br/>
            <input type="text" id="afc-submitter" value="${sSubmitter}" /><br/>
            <label for="afc-subtime">提交时间:</label><br/>
            <input type="text" id="afc-subtime" value="${sSubmitTime}" /><br/>
            <label for="afc-notify-creator">通知创建者:</label><br/>
            <input type="checkbox" id="afc-notify-creator" /><br/>
            <label for="afc-notify-submitter">通知提交者:</label><br/>
            <input type="checkbox" id="afc-notify-submitter" /><br/>
            <hr />
            <span style="color: grey;">在${sSubmitRev}获取到上述信息。</span>
        </div>`;
    } else {
      var sSubmitter = "";
      var sSubmitTime = "";
      var dialogHtml = `
        <div>
            <label for="afc-submitter">提交者:</label><br/>
            <input type="text" id="afc-submitter" value="${sSubmitter}" /><br/>
            <label for="afc-subtime">提交时间:</label><br/>
            <input type="text" id="afc-subtime" value="${sSubmitTime}" /><br/>
            <label for="afc-notify-creator">通知创建者:</label><br/>
            <input type="checkbox" id="afc-notify-creator" /><br/>
            <label for="afc-notify-submitter">通知提交者:</label><br/>
            <input type="checkbox" id="afc-notify-submitter" /><br/>
            <hr />
            <span style="color: grey;">未能在前10条历史编辑中取得提交信息,请手动填写。</span>
        </div>`;
    }

    // 弹出对话框
    if (!$dialog) {
      var $dialog = $(dialogHtml).dialog({
        title: "请确认提交信息",
        modal: true,
        buttons: [
          {
            text: "确认",
            click: async function () {
              var bModify = false;
              var bNotedCreator = false;
              var bNotedSubmitter = false;
              var sFetchUrl = "".concat(
                "/w/api.php?action=query&prop=revisions&pageids=",
                iCurId.toString(),
                "&rvlimit=1&rvprop=user&rvslots=*&rvstart=1&rvdir=newer&format=json"
              );
              await $.getJSON(sFetchUrl, async function (data) {
                var sPageCreator = data.query.pages[iCurId].revisions[0].user;
                // 修正模板参数-Start
                var sFetchUrl = "".concat(
                  "/w/api.php?action=query&prop=revisions&pageids=",
                  iCurId.toString(),
                  "&rvlimit=1&rvprop=content&format=json&rvslots=*"
                );
                await $.getJSON(sFetchUrl, async function (data) {
                  var sPageContent =
                    data.query.pages[iCurId].revisions[0].slots.main["*"];
                  var sNewContent = sPageContent.replace(
                    "{{afc submission",
                    "{{AFC submission"
                  );
                  var sNewContent = sNewContent.replace(
                    "{{Afc submission",
                    "{{AFC submission"
                  );
                  var sNewContent = sNewContent.replace(
                    "{{AFC submission",
                    "".concat("{{subst:draftnew|", sPageCreator)
                  );

                  var sEditUrl = "/w/api.php";
                  var sEditData = {
                    action: "edit",
                    format: "json",
                    pageid: iCurId.toString(),
                    text: sNewContent,
                    summary: "".concat(
                      "半自动化取消草稿提交:由用户[[User:",
                      sSubmitter,
                      "|",
                      sSubmitter,
                      "]]于",
                      _sSubmitTime,
                      "提交。"
                    ),
                    token: mw.user.tokens.get("csrfToken"),
                  };
                  await $.post(sEditUrl, sEditData, function (data) {
                    if (data.edit.result == "Success") {
                      bModify = true;
                    } else {
                      bModify = false;
                    }
                  });
                });
                // 修正模板参数-End

                // 通知创建者-Start
                if ($("#afc-notify-creator").prop("checked")) {
                  var sNotifyUrl = "/w/api.php";
                  var sNotifyData = {
                    action: "edit",
                    format: "json",
                    title: "".concat("User talk:", sPageCreator),
                    section: "new",
                    sectiontitle: "".concat(
                      "关于您先前创建的条目[[",
                      mw.config.get("wgPageName"),
                      "]]的通知"
                    ),
                    text: "".concat(
                      "您好,您先前建立的条目[[",
                      mw.config.get("wgPageName"),
                      "|",
                      mw.config.get("wgTitle"),
                      "]]由于一些原因,已被[[User:",
                      sSubmitter,
                      "|",
                      sSubmitter,
                      "]]提交至条目建立专题,详细信息您可查看页面历史或直接到相关用户讨论页留言。您可前往移动后的草稿页面继续完善您的条目。祝愉快。--~~~~"
                    ),
                    summary: "".concat(
                      "条目建立专题半自动化通知:条目被移动到草稿空间"
                    ),
                    token: mw.user.tokens.get("csrfToken"),
                  };
                  await $.post(sNotifyUrl, sNotifyData, function (data) {
                    if (data.edit.result == "Success") {
                      bNotedCreator = true;
                    } else {
                      bNotedCreator = false;
                    }
                  });
                }
                // 通知创建者-End

                // 通知提交者-Start
                if ($("#afc-notify-submitter").prop("checked")) {
                  var sNotifyUrl = "/w/api.php";
                  var sNotifyData = {
                    action: "edit",
                    format: "json",
                    title: "".concat("User talk:", sSubmitter),
                    section: "new",
                    sectiontitle: "".concat(
                      "关于您先前巡查的草稿[[",
                      mw.config.get("wgPageName"),
                      "]]的通知"
                    ),
                    text: "".concat(
                      "您好,您先前移动到草稿并提交至建立条目专题的草稿的提交过程存在问题,请不要直接将{{tlx|AFC submission}}放置于条目内容中,而应该使用{{tlg|submit|code=on|subst=on}},如果您不希望您成为该草稿的提交者,请使用{{tlg|draftnew|条目创建者|code=on|subst=on}}并通知条目创建者该项变动。祝愉快。--~~~~"
                    ),
                    summary: "".concat(
                      "条目建立专题半自动化通知:模板参数故障"
                    ),
                    token: mw.user.tokens.get("csrfToken"),
                  };
                  await $.post(sNotifyUrl, sNotifyData, function (data) {
                    if (data.edit.result == "Success") {
                      bNotedSubmitter = true;
                    } else {
                      bNotedSubmitter = false;
                    }
                  });
                }
                // 通知提交者-End
              });
              // 弹出结果对话框
              var $resultDialog = $("<div></div>").dialog({
                title: "处理结果",
                modal: true,
                buttons: [
                  {
                    text: "确认",
                    click: function () {
                      $resultDialog.dialog("close");
                    },
                  },
                ],
              });
              // if (bModify) { // 存在问题,暂时不使用
              //   $resultDialog.append("<p>模板参数修正成功。</p>");
              // } else {
              //   $resultDialog.append("<p>模板参数修正失败。</p>");
              // }
              // if (bNotedCreator) {
              //   $resultDialog.append("<p>已通知创建者。</p>");
              // } else {
              //   $resultDialog.append("<p>未通知创建者。</p>");
              // }
              // if (bNotedSubmitter) {
              //   $resultDialog.append("<p>已通知提交者。</p>");
              // } else {
              //   $resultDialog.append("<p>未通知提交者。</p>");
              // }
              $resultDialog.append("<p>请求已交至服务器,请前往您的用户贡献确认。</p>");
              $resultDialog.dialog("open");
              $dialog.dialog("close");
            },
          },
          {
            text: "取消",
            click: function () {
              $dialog.dialog("close");
            },
          },
        ],
      });
    } else {
      $dialog.dialog("open");
    }
  });
}

// 仅在创建条目专题页面执行
if ((iNsNum == 118 && bAfcSub) || (iNsNum == 2 && bAfcSub) || 1) {
  if (bAfcSubErr) {
    $("table.afc-submission-pending > tbody > tr > td.mbox-text").append(`
        <div>
            <span style="color: red; font-weight: bold;">该草稿提交方式有误,可用下列方法修正:</span>
            <ul>
                <li><a href="javascript:;" id="imp-hd1">为模板添加正确属性</a></li>
                <li><a href="javascript:;" id="imp-hd2">取消该提交</a></li>
            </ul>
        </div>
        `);

    $("#imp-hd1").click(correctAttr);
    $("#imp-hd2").click(cancelSub);
  }
}
// </nowiki>