User:Irukaza/common.js:修订间差异
跳到导航
跳到搜索
imported>=海豚= 无编辑摘要 |
imported>=海豚= 无编辑摘要 |
||
第1行: | 第1行: | ||
mw.loader. | // <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年1月3日 (一) 03:39的版本
// <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>