User:Irukaza/common.js:修订间差异

H萌娘,万物皆可H的百科全书!
跳到导航 跳到搜索
imported>=海豚=
无编辑摘要
imported>Irukaza
(清空页面)
 
(未显示2个用户的95个中间版本)
第1行: 第1行:
// <pre>
 
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
   function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
   return new (P || (P = Promise))(function (resolve, reject) {
     function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
     function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
     function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
     step((generator = generator.apply(thisArg, _arguments || [])).next());
   });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
   var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
   return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
   function verb(n) { return function (v) { return step([n, v]); }; }
   function step(op) {
     if (f) throw new TypeError("Generator is already executing.");
     while (_) try {
       if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
       if (y = 0, t) op = [op[0] & 2, t.value];
       switch (op[0]) {
         case 0: case 1: t = op; break;
         case 4: _.label++; return { value: op[1], done: false };
         case 5: _.label++; y = op[1]; op = [0]; continue;
         case 7: op = _.ops.pop(); _.trys.pop(); continue;
         default:
           if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
           if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
           if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
           if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
           if (t[2]) _.ops.pop();
           _.trys.pop(); continue;
       }
       op = body.call(thisArg, _);
     } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
     if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
   }
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
   if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
     if (ar || !(i in from)) {
       if (!ar) ar = Array.prototype.slice.call(from, 0, i);
       ar[i] = from[i];
     }
   }
   return to.concat(ar || Array.prototype.slice.call(from));
};
// await mw.loader.using(["ext.gadget.libBottomRightCorner", "oojs-ui", "oojs-ui-widgets", "oojs-ui.styles.indicators", "oojs-ui.styles.icons-alerts", "mediawiki.util", "ext.gadget.site-lib"]);
$(function () {
   /**
   * @typedef {{ data: string, label: string }} option
   */
   /**
   * @typedef {{ option: option, subTypes: option[] }} type
   */
   /**
   * @type {{ [key: string ]: type }}
   */
   var types = {
     placeholder: {
       option: { data: "placeholder", label: wgULS("请选择一项主要问题", "請選擇一項主要問題") },
       subTypes: []
     },
     违法违禁: {
       option: { data: "违法违禁", label: wgULS("违法违禁", "違法違禁") },
       subTypes: []
     },
     色情低俗: {
       option: { data: "色情低俗", label: "色情低俗" },
       subTypes: [
         { data: "低俗信息", label: wgULS("低俗信息", "低俗資訊") },
         { data: "色情图文", label: wgULS("色情图文", "色情圖文") },
         { data: "侵害未成年", label: "侵害未成年" },
         { data: "色情视频", label: wgULS("色情视频", "色情影片", null, null, "色情視像") },
       ]
     },
     不实信息: {
       option: { data: "不实信息", label: wgULS("不实信息", "不實資訊") },
       subTypes: [
         { data: "不符合事实", label: wgULS("不符合事实", "不符合事實") },
         { data: "有争议事实", label: wgULS("有争议事实", "有爭議事實") },
       ]
     },
     血腥暴力: {
       option: { data: "血腥暴力", label: "血腥暴力" },
       subTypes: [
         { data: "暴恐血腥", label: "暴恐血腥" },
         { data: "虐杀动物", label: wgULS("虐杀动物", "虐殺動物") },
       ]
     },
     人身攻击: {
       option: { data: "人身攻击", label: wgULS("人身攻击", "人身攻擊") },
       subTypes: []
     },
     赌博诈骗: {
       option: { data: "赌博诈骗", label: wgULS("赌博诈骗", "賭博詐騙") },
       subTypes: []
     },
     "抄袭/侵权": {
       option: { data: "抄袭/侵权", label: wgULS("抄袭/侵权", "抄襲/侵權") },
       subTypes: []
     },
     其他反馈: {
       option: { data: "其他反馈", label: wgULS("其他反馈", "其他反饋") },
       subTypes: []
     }
   };
   var wgNamespaceNumber = mw.config.get("wgNamespaceNumber");
   var wgPageName = mw.config.get("wgPageName");
   var wgArticleId = mw.config.get("wgArticleId") || -1;
   var wgCurRevisionId = mw.config.get("wgCurRevisionId") || -1;
   var wgRevisionId = mw.config.get("wgRevisionId") || -1;
   if (wgNamespaceNumber < 0 || wgArticleId === 0) {
     return;
   }
   var $body = $(document.body);
   var sizes = ["small", "medium", "large", "larger"];
   var getSize = function (size) { return sizes.includes(size) ? size : "small"; };
   var oojsUIAlert = function (text, size) { return OO.ui.alert($("<p>").html(text), { title: wgULS("萌娘百科页面反馈功能", "萌娘百科頁面反饋功能"), size: getSize(size) }); };
   var oojsUIConfirm = function (text, size) { return OO.ui.confirm($("<p>").html(text), { title: wgULS("萌娘百科页面反馈功能", "萌娘百科頁面反饋功能"), size: getSize(size) }); };
   insertToBottomRightCorner(wgULS("页面反馈", "頁面反饋")).css({
     order: 0
   }).on("click", function () { return __awaiter(void 0, void 0, void 0, function () {
     var _a, _b, $wrapper, fieldset, emailInput, reasonTextarea, primaryTypeSelector, secondaryTypeSelector, secondaryTypeSelectorField, submit, cancel, buttonsField, progressBar;
     return __generator(this, function (_c) {
       switch (_c.label) {
         case 0:
           _a = wgNamespaceNumber > 0;
           if (!_a) return [3 /*break*/, 2];
           return [4 /*yield*/, oojsUIConfirm("".concat(wgULS("本页面<b>并非条目页面</b>,并不直接介绍事物,而仅为萌娘百科", "本頁面<b>並非條目頁面</b>,並不直接介紹事物,而僅為萌娘百科")).concat(wgULS("用户", "使用者", null, null, "用戶")).concat(wgULS("为方便编辑、交流沟通等使用。<br>您确定您仍要反馈本页面吗?", "為方便編輯、交流溝通等使用。<br>您確定您仍要反饋本頁面嗎?")))];
         case 1:
           _a = !(_c.sent());
           _c.label = 2;
         case 2:
           if (_a) {
             return [2 /*return*/];
           }
           _b = wgCurRevisionId !== wgRevisionId;
           if (!_b) return [3 /*break*/, 4];
           return [4 /*yield*/, oojsUIConfirm("".concat(wgULS("本页面<b>并非最新版本</b>,其内容可能已被修改,您可以点击", "本頁面<b>並非最新版本</b>,其內容可能已被修改,您可以點選"), "<a href=\"/").concat(wgPageName, "\">").concat(wgULS("此链接查看最新版本</a>以免误反馈。<br>您确定您仍要反馈此版本吗?", "此連結檢視最新版本</a>以免誤反饋。<br>您確定您仍要反饋此版本嗎?")))];
         case 3:
           _b = !(_c.sent());
           _c.label = 4;
         case 4:
           if (_b) {
             return [2 /*return*/];
           }
           $wrapper = $("<div/>", {
             css: {
               position: "fixed",
               top: 0,
               left: 0,
               height: "100%",
               width: "100%",
               color: "black",
               display: "flex",
               "align-items": "center",
               "justify-content": "center",
               "background-color": "rgba(255, 255, 255, 0.73)",
               "z-index": 99
             },
             id: "report-root"
           });
           fieldset = new OO.ui.FieldsetLayout({
             label: wgULS("页面反馈", "頁面反饋")
           });
           emailInput = new OO.ui.TextInputWidget({
             required: true,
             indicator: "required",
             validate: mw.util.validateEmail,
             autocomplete: false
           });
           reasonTextarea = new OO.ui.MultilineTextInputWidget({
             autosize: true,
             indicator: "required",
             label: wgULS("至少需要5个字节", "至少需要5個位元組"),
             required: true,
             validate: /.{5,}/,
             autocomplete: false
           });
           reasonTextarea.$element.find(".oo-ui-labelElement-label").css("pointer-events", "none");
           primaryTypeSelector = new OO.ui.DropdownInputWidget({
             options: Object.values(types).map(function (_a) {
               var option = _a.option;
               return option;
             })
           });
           secondaryTypeSelector = new OO.ui.DropdownInputWidget({
             options: []
           });
           secondaryTypeSelectorField = new OO.ui.FieldLayout(secondaryTypeSelector, {
             align: "top"
           });
           secondaryTypeSelectorField.$element.hide();
           primaryTypeSelector.on("change", function (value) {
             var subTypes = types[value].subTypes;
             if (subTypes.length > 0) {
               secondaryTypeSelectorField.$element.slideDown("fast");
               secondaryTypeSelector.setOptions(__spreadArray(__spreadArray([
                 { data: "placeholder", label: wgULS("请选择一项细节问题", "請選擇一項細節問題") }
               ], subTypes, true), [
                 { data: "其他", label: "其他" },
               ], false));
             }
             else {
               secondaryTypeSelectorField.$element.slideUp("fast");
               secondaryTypeSelector.setOptions([{ data: "none", label: "none" }]);
               secondaryTypeSelector.setValue("none");
             }
           });
           submit = new OO.ui.ButtonWidget({
             label: wgULS("确认", "確認"),
             flags: ["primary", "progressive"]
           });
           cancel = new OO.ui.ButtonWidget({
             label: "取消",
             flags: "destructive"
           });
           buttonsField = new OO.ui.FieldLayout(new OO.ui.Widget({
             content: [
               new OO.ui.HorizontalLayout({
                 items: [submit, cancel]
               }),
             ]
           }));
           progressBar = new OO.ui.ProgressBarWidget({
             progress: false
           });
           progressBar.$element.hide().css("margin-top", "1em");
           fieldset.addItems([
             new OO.ui.FieldLayout(primaryTypeSelector, {
               label: wgULS("您认为本页面存在哪项问题?(如有多项请选择最突出的一项,其他项请在理由一栏说明)", "您認為本頁面存在哪項問題?(如有多項請選擇最突出的一項,其他項請在理由一欄說明)"),
               align: "top"
             }),
             secondaryTypeSelectorField,
             new OO.ui.FieldLayout(reasonTextarea, {
               label: "您的理由",
               align: "top"
             }),
             new OO.ui.FieldLayout(emailInput, {
               label: wgULS("您的电子邮箱地址", "您的電子郵箱地址"),
               align: "top"
             }),
             buttonsField, progressBar,
           ]);
           $wrapper.append(fieldset.$element.css({
             width: "50%",
             "max-width": "50em",
             border: "thin solid black",
             padding: "2em",
             "border-radius": "10px",
             "background-color": "#fff"
           }));
           $body.append($wrapper);
           $(cancel.$element).on("click", function () {
             if (!cancel.isDisabled()) {
               $wrapper.remove();
             }
           });
           $(submit.$element).on("click", function () { return __awaiter(void 0, void 0, void 0, function () {
             var primaryType, secondaryType, email, e_1, reason, e_2, details, body_1, _a, _b, _c, e_3;
             return __generator(this, function (_d) {
               switch (_d.label) {
                 case 0:
                   primaryType = primaryTypeSelector.getValue();
                   if (!(primaryType === "placeholder")) return [3 /*break*/, 2];
                   return [4 /*yield*/, oojsUIAlert(wgULS("您尚未选择主要问题,请重新选择!", "您尚未選擇主要問題,請重新選擇!"))];
                 case 1: return [2 /*return*/, _d.sent()];
                 case 2:
                   secondaryType = secondaryTypeSelector.getValue();
                   if (!(secondaryType === "placeholder")) return [3 /*break*/, 4];
                   return [4 /*yield*/, oojsUIAlert(wgULS("您尚未选择细节问题,请重新选择!", "您尚未選擇細節問題,請重新選擇!"))];
                 case 3: return [2 /*return*/, _d.sent()];
                 case 4:
                   email = emailInput.getValue();
                   _d.label = 5;
                 case 5:
                   _d.trys.push([5, 7, , 9]);
                   return [4 /*yield*/, emailInput.getValidity()];
                 case 6:
                   _d.sent();
                   return [3 /*break*/, 9];
                 case 7:
                   e_1 = _d.sent();
                   console.error("Report [emailValidation]", e_1);
                   return [4 /*yield*/, oojsUIAlert(wgULS("您输入的电子邮件地址有误,请检查!", "您輸入的電子郵件地址有誤,請檢查!"))];
                 case 8: return [2 /*return*/, _d.sent()];
                 case 9:
                   reason = $("<span>").text(reasonTextarea.getValue()).html();
                   _d.label = 10;
                 case 10:
                   _d.trys.push([10, 12, , 14]);
                   return [4 /*yield*/, reasonTextarea.getValidity()];
                 case 11:
                   _d.sent();
                   return [3 /*break*/, 14];
                 case 12:
                   e_2 = _d.sent();
                   console.error("Report [reasonValidation]", e_2);
                   return [4 /*yield*/, oojsUIAlert(wgULS("您输入的理由不足5字节,请检查!", "您輸入的理由不足5位元組,請檢查!"))];
                 case 13: return [2 /*return*/, _d.sent()];
                 case 14:
                   details = [
                     "".concat(wgULS("反馈页面", "反饋頁面"), "\uFF1A").concat(wgPageName),
                     "\u4E3B\u8981".concat(wgULS("问题", "問題"), "\uFF1A").concat(primaryType),
                   ];
                   if (secondaryType !== "none") {
                     details.push("\u6B21\u8981".concat(wgULS("问题", "問題"), "\uFF1A").concat(secondaryType));
                   }
                   details.push("".concat(wgULS("电子邮件", "電子郵件"), "\uFF1A").concat(email), "\u60A8\u7684\u7406\u7531\uFF1A".concat(reason));
                   return [4 /*yield*/, oojsUIConfirm("".concat(wgULS("请您确认您将要提交的信息", "請您確認您將要提交的資訊"), "\uFF1A<ul><li>").concat(details.join("</li><li>"), "</li></ul>"), "large")];
                 case 15:
                   if (!_d.sent()) return [3 /*break*/, 22];
                   buttonsField.$element.slideUp("fast");
                   progressBar.$element.slideDown("fast");
                   body_1 = new URLSearchParams();
                   Object.entries({
                     ReportTitle: primaryType,
                     ReportSubTitle: secondaryType === "none" ? "" : secondaryType,
                     ReportURL: window.location.href,
                     ReportOrigin: "moegirlWebZh",
                     ReportUserName: mw.config.get("wgUserName") || "visitor",
                     ReportUserID: mw.config.get("wgUserId") || "visitor",
                     ReportComment: "\u7528\u6237\u53CD\u9988\u5185\u5BB9\uFF1A".concat(reason, "\n-------------\n\u9875\u9762\u4FE1\u606F\uFF1A\n* wgNamespaceNumber: ").concat(wgNamespaceNumber, "\n* wgPageName: ").concat(wgPageName, "\n* wgArticleId: ").concat(wgArticleId, "\n* wgCurRevisionId: ").concat(wgCurRevisionId, "\n* wgRevisionId: ").concat(wgRevisionId),
                     ReportContact: email
                   }).forEach(function (_a) {
                     var k = _a[0], v = _a[1];
                     return body_1.append(k, v);
                   });
                   _d.label = 16;
                 case 16:
                   _d.trys.push([16, 20, , 22]);
                   _b = (_a = console).info;
                   _c = ["Report [upload]"];
                   return [4 /*yield*/, fetch("https://api.moegirl.org.cn/report", {
                       body: body_1.toString(),
                       method: "POST",
                       mode: "cors",
                       credentials: "include"
                     })];
                 case 17: return [4 /*yield*/, (_d.sent()).json()];
                 case 18:
                   _b.apply(_a, _c.concat([_d.sent()]));
                   return [4 /*yield*/, oojsUIAlert(wgULS("上传成功!", "上傳成功!"))];
                 case 19:
                   _d.sent();
                   location.reload();
                   return [3 /*break*/, 22];
                 case 20:
                   e_3 = _d.sent();
                   console.error("Report [upload]", e_3);
                   return [4 /*yield*/, oojsUIAlert(wgULS("上传失败,请重试!", "上傳失敗,請重試!"))];
                 case 21:
                   _d.sent();
                   buttonsField.$element.slideDown("fast");
                   progressBar.$element.slideUp("fast");
                   return [3 /*break*/, 22];
                 case 22: return [2 /*return*/];
               }
             });
           }); });
           return [2 /*return*/];
       }
     });
   }); });
});
// </pre>

2022年3月17日 (四) 18:22的最新版本