跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
分类索引
最近更改
随机页面
灵兰秘典
帮助
帮助
联系我们
捐助本站
关于本站
MediaWiki帮助
中医百科
搜索
搜索
外观
登录
个人工具
登录
查看“︁MediaWiki:Gadget-Util.js”︁的源代码
系统消息
讨论
English
阅读
查看源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
查看源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
Cargo数据
外观
移至侧栏
隐藏
←
MediaWiki:Gadget-Util.js
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
此页面为本wiki上的软件提供界面文本,并受到保护以防止滥用。如欲修改所有wiki的翻译,请访问
translatewiki.net
上的MediaWiki本地化项目。
您无权编辑此JavaScript页面,因为编辑此页面可能会影响所有访问者。
您可以查看和复制此页面的源代码。
/** * SPDX-License-Identifier: GPL-3.0-or-later * _addText: '{{Gadget Header|license=GPL-3.0-or-later}}' * * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/Util} * @author 安忆 <i@anyi.in> * @license GPL-3.0-or-later {@link https://www.qiuwenbaike.cn/wiki/H:GPL-3.0} */ /** * Copyright (C) 安忆 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ /** * +------------------------------------------------------------+ * | === WARNING: GLOBAL GADGET FILE === | * +------------------------------------------------------------+ * | All changes should be made in the repository, | * | otherwise they will be lost. | * +------------------------------------------------------------+ * | Changes to this page may affect many users. | * | Please discuss changes by opening an issue before editing. | * +------------------------------------------------------------+ */ /* <nowiki> */ (() => { "use strict"; // dist/Util/Util.js function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n2) { return void e(n2); } i.done ? t(u) : Promise.resolve(u).then(r, o); } function _asyncToGenerator(n) { return function() { var t = this, e = arguments; return new Promise(function(r, o) { var a = n.apply(t, e); function _next(n2) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n2); } function _throw(n2) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n2); } _next(void 0); }); }; } function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var n = 0, F = function() { }; return { s: F, n: function() { return n >= r.length ? { done: true } : { done: false, value: r[n++] }; }, e: function(r2) { throw r2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = true, u = false; return { s: function() { t = t.call(r); }, n: function() { var r2 = t.next(); return a = r2.done, r2; }, e: function(r2) { u = true, o = r2; }, f: function() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { var _iterator = _createForOfIteratorHelper(__getOwnPropNames(from)), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done; ) { let key = _step.value; if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); //! src/Util/Util.ts var Util_exports = {}; __export(Util_exports, { MwUri: () => MwUri, addEventListenerWithRemover: () => addEventListenerWithRemover, changeOpacityWhenMouseEnterOrLeave: () => changeOpacityWhenMouseEnterOrLeave, checkA11yConfirmKey: () => checkA11yConfirmKey, checkDependencies: () => checkDependencies, delay: () => delay, findVariants: () => findVariants, generateArray: () => generateArray, generateSvgDataUrl: () => generateSvgDataUrl, getBody: () => getBody, getWpSummaryContent: () => getWpSummaryContent, getWpTextbox1Content: () => getWpTextbox1Content, initMwApi: () => initMwApi, isValidKey: () => isValidKey, oouiConfirmWithStyle: () => oouiConfirmWithStyle, queryGlobalUserGroups: () => queryGlobalUserGroups, queryUserGroups: () => queryUserGroups, scrollTop: () => scrollTop, setWpSummaryContent: () => setWpSummaryContent, setWpTextbox1Content: () => setWpTextbox1Content, uniqueArray: () => uniqueArray, userIsInGroup: () => userIsInGroup }); module.exports = __toCommonJS(Util_exports); //! src/Util/modules/addEventListenerWithRemover.ts var addEventListenerWithRemover = ({ target, type, listener, options = {} }) => { target.addEventListener(type, listener, options); return { remove: () => { target.removeEventListener(type, listener, options); } }; }; //! src/Util/modules/changeOpacityWhenMouseEnterOrLeave.ts var changeOpacityWhenMouseEnterOrLeave = (event, opacity = 0.7) => { event.currentTarget.style.opacity = event.type === "mouseenter" ? "1" : opacity.toString(); }; //! src/Util/modules/checkA11yConfirmKey.ts var checkA11yConfirmKey = (event) => { if (["click", "keydown"].includes(event.type)) { if (event.type === "keydown") { return ["Enter", " "].includes(event.key); } return true; } return false; }; //! src/Util/modules/generateArray.ts function generateArray(...args) { return args.flatMap((arg) => { if (Array.isArray(arg)) { return arg; } if (arg instanceof NodeList) { return [...arg]; } return [arg]; }); } //! src/Util/modules/initMwApi.ts function initMwApi(userAgent, apiUri) { const apiOptions = { ajax: { headers: { "Api-User-Agent": userAgent ? "Qiuwen/1.1 (".concat(userAgent, ")") : "Qiuwen/1.1" } } }; if (apiUri) { return new mw.ForeignApi(apiUri, apiOptions); } return new mw.Api(apiOptions); } //! src/Util/modules/uniqueArray.ts var uniqueArray = function uniqueArray2(args) { /**! * SPDX-License-Identifier: CC-BY-SA-4.0 * * @source {@link https://stackoverflow.com/questions/9229645/remove-duplicate-values-from-js-array/922982} * @license CC-BY-SA-4.0 */ const result = []; var _iterator2 = _createForOfIteratorHelper(args), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { const item = _step2.value; if (!result.includes(item)) { result[result.length] = item; } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } return result; }; //! src/Util/modules/checkDependencies.ts function checkDependencies(_x, _x2) { return _checkDependencies.apply(this, arguments); } //! src/Util/modules/delay.ts function _checkDependencies() { _checkDependencies = _asyncToGenerator(function* (gadgetNames, option) { const api = initMwApi("Util-CheckDependencies"); const gadgets = uniqueArray(generateArray(gadgetNames)); option || (option = 1); var _iterator3 = _createForOfIteratorHelper(gadgets), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { const gadget = _step3.value; if (option === "0" && mw.user.options.get("gadget-".concat(gadget)) || option === "1" && !mw.user.options.get("gadget-".concat(gadget))) { yield api.postWithEditToken({ action: "options", change: "gadget-".concat(gadget, "=").concat(option) }); yield mw.loader.using("ext.gadget.".concat(gadget)); } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } }); return _checkDependencies.apply(this, arguments); } var delay = (ms) => { return new Promise((resolve) => { setTimeout(resolve, ms); }); }; //! src/Util/modules/findVariants.ts function findVariants(_x3) { return _findVariants.apply(this, arguments); } //! src/Util/modules/generateSvgDataUrl.ts function _findVariants() { _findVariants = _asyncToGenerator(function* (text) { const api = initMwApi("Util-FindVariants"); const VARIANTS = ["zh-hans", "zh-hant", "zh-cn", "zh-hk", "zh-mo", "zh-sg", "zh-my", "zh-tw"]; const allVariants = []; const params = { action: "parse", contentmodel: "wikitext", format: "json", formatversion: "2", prop: ["displaytitle"], title: "temp", text }; for (var _i2 = 0, _VARIANTS = VARIANTS; _i2 < _VARIANTS.length; _i2++) { var _response$query; const variant = _VARIANTS[_i2]; params.uselang = variant; params.variant = variant; const response = yield api.post(params); const displaytitle = response === null || response === void 0 || (_response$query = response["query"]) === null || _response$query === void 0 ? void 0 : _response$query.displaytitle; const variantElement = document.createElement("variant"); variantElement.innerHTML = displaytitle; if (variantElement.textContent) { allVariants[allVariants.length] = variantElement.textContent; } } return uniqueArray(allVariants); }); return _findVariants.apply(this, arguments); } var generateSvgDataUrl = (svg) => { /**! * SPDX-License-Identifier: MIT * * @source svg-to-data-uri.js {@link https://github.com/heyallan/svg-to-data-uri/} * @author Allan Moreno * @license MIT {@link https://github.com/heyallan/svg-to-data-uri/blob/master/LICENSE} * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ svg = svg.trim(); svg = svg.slice(svg.indexOf("<svg")); if (!svg.startsWith("<svg") || !svg.endsWith("svg>")) { return ""; } if (!svg.includes("http://www.w3.org/2000/svg")) { svg = svg.replace(/<svg/g, "<svg xmlns='http://www.w3.org/2000/svg'"); } svg = svg.replace(/<!--.{1,}-->/g, ""); svg = svg.replace(/version=["'](.{0,}?)["'](?=[\s>])/g, ""); svg = svg.replace(/"'(.{1,})'"/g, "'$1'"); svg = svg.replace(/"/g, "'"); svg = svg.replace(/>\s{1,}</g, "><"); svg = svg.replace(/\s{2,}/g, " "); svg = svg.trim(); if (!svg.startsWith("<svg") || !svg.endsWith("svg>")) { return ""; } svg = svg.replace(/&/g, "&"); svg = svg.replace(/[%#<>?[\\\]^`{|}]/g, encodeURIComponent); svg = "data:image/svg+xml,".concat(svg); return svg; }; //! src/Util/modules/getBody.ts var getBody = () => { return $.ready.then(() => { const $body = $("body"); return $body; }); }; //! src/Util/modules/isValidKey.ts var isValidKey = (object, key) => { return key in object; }; //! src/Util/modules/mwUri.ts var MwUri = class extends URL { extend(object) { for (var _i = 0, _Object$entries = Object.entries(object); _i < _Object$entries.length; _i++) { const [key, value] = _Object$entries[_i]; this.searchParams.set(key, value); } return this; } getRelativePath() { return this.pathname + this.search + this.hash; } }; //! src/Util/modules/oouiConfirmWithStyle.tsx var import_ext_gadget = __toESM(require("ext.gadget.JSX"), 1); var oouiConfirmWithStyle = (message) => OO.ui.confirm($(/* @__PURE__ */ import_ext_gadget.default.createElement("div", { className: "oo-ui-window-foot", style: { border: ".1rem solid #0645ad", display: "flex", justifyContent: "space-evenly" } }, /* @__PURE__ */ import_ext_gadget.default.createElement("span", { style: { fontSize: "1.2rem", fontWeight: "500", lineHeight: "1.8", padding: ".4em 0" } }, message)))).then((isConfirm) => isConfirm); //! src/Util/modules/queryGlobalUserGroups.ts function queryGlobalUserGroups(_x4) { return _queryGlobalUserGroups.apply(this, arguments); } //! src/Util/modules/queryUserGroups.ts function _queryGlobalUserGroups() { _queryGlobalUserGroups = _asyncToGenerator(function* (guiuser) { const api = initMwApi("Util-QueryGlobalUserGroups"); const CACHE_KEY_PREFIX = "ext.gadget.Util_queryGlobalUserGroups-"; let groups = []; if (mw.storage.getObject(CACHE_KEY_PREFIX + guiuser)) { groups = mw.storage.getObject(CACHE_KEY_PREFIX + guiuser); groups = groups.filter((element) => { return element !== "*"; }); } else { const params = { action: "query", format: "json", formatversion: "2", meta: "globaluserinfo", guiuser, guiprop: "groups", smaxage: 600, maxage: 600 }; const response = yield api.get(params); const query = response["query"]; if (query !== null && query !== void 0 && query.globaluserinfo) { var _query$globaluserinfo, _query$globaluserinfo2; groups = (_query$globaluserinfo = (_query$globaluserinfo2 = query.globaluserinfo) === null || _query$globaluserinfo2 === void 0 ? void 0 : _query$globaluserinfo2.groups) !== null && _query$globaluserinfo !== void 0 ? _query$globaluserinfo : []; groups = groups.filter((element) => { return element !== "*"; }); mw.storage.setObject(CACHE_KEY_PREFIX + guiuser, groups, 60 * 60); } } return { query: { globaluserinfo: { name: guiuser, groups } } }; }); return _queryGlobalUserGroups.apply(this, arguments); } function queryUserGroups(_x5) { return _queryUserGroups.apply(this, arguments); } //! src/Util/modules/scrollTop.ts function _queryUserGroups() { _queryUserGroups = _asyncToGenerator(function* (users) { var _query$users; const api = initMwApi("Util-QueryUserGroups"); const CACHE_KEY_PREFIX = "ext.gadget.Util_queryUserGroups-"; const cachedQueryUsers = []; var _iterator4 = _createForOfIteratorHelper(users), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done; ) { const user = _step4.value; if (mw.storage.getObject(CACHE_KEY_PREFIX + user)) { let groups = mw.storage.getObject(CACHE_KEY_PREFIX + user); groups = groups.filter((element) => { return element !== "*"; }); cachedQueryUsers[cachedQueryUsers.length] = { name: user, groups }; } } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } const ususers = users.filter((v) => { return !mw.storage.getObject(CACHE_KEY_PREFIX + v); }); const params = { ususers, action: "query", format: "json", formatversion: "2", list: "users", usprop: "groups", smaxage: 600, maxage: 600 }; const response = yield api.get(params); const query = response["query"]; const queryUsers = [...(_query$users = query === null || query === void 0 ? void 0 : query.users) !== null && _query$users !== void 0 ? _query$users : [], ...cachedQueryUsers]; for (var _i3 = 0, _queryUsers = queryUsers; _i3 < _queryUsers.length; _i3++) { const user = _queryUsers[_i3]; if (user !== null && user !== void 0 && user.groups && user !== null && user !== void 0 && user.name) { let { groups } = user; groups = groups.filter((element) => { return element !== "*"; }); mw.storage.setObject(CACHE_KEY_PREFIX + user.name, groups, 60 * 60); } } return { query: { users: queryUsers } }; }); return _queryUserGroups.apply(this, arguments); } var scrollTop = (targetHeight, effectsOptionsOrDuration = {}) => { const options = typeof effectsOptionsOrDuration === "number" || typeof effectsOptionsOrDuration === "string" ? { duration: effectsOptionsOrDuration, easing: "linear" } : { duration: "slow", easing: "linear", ...effectsOptionsOrDuration }; $(document).find("html, body").animate({ scrollTop: targetHeight }, options); }; //! src/Util/modules/userIsInGroup.ts var userIsInGroup = (groups) => { const { wgUserGroups, wgGlobalGroups } = mw.config.get(); return [...wgUserGroups || [], ...wgGlobalGroups || []].some((element) => { return generateArray(groups).includes(element); }); }; //! src/Util/modules/wpSummaryContent.ts var getWpSummaryContent = ({ $editForm }) => { var _$editForm$find$val, _$editForm$find; return (_$editForm$find$val = (_$editForm$find = $editForm.find("#wpSummary")) === null || _$editForm$find === void 0 ? void 0 : _$editForm$find.val()) !== null && _$editForm$find$val !== void 0 ? _$editForm$find$val : ""; }; var setWpSummaryContent = ({ $editForm, content }) => { $editForm.find("#wpSummary").val(content); }; //! src/Util/modules/wpTextbox1Content.ts var getWpTextbox1Content = ({ $editForm }) => { var _$editForm$find$textS; return (_$editForm$find$textS = $editForm.find("#wpTextbox1").textSelection("getContents")) !== null && _$editForm$find$textS !== void 0 ? _$editForm$find$textS : ""; }; var setWpTextbox1Content = ({ $editForm, content }) => { $editForm.find("#wpTextbox1").textSelection("setContents", content); }; })(); /* </nowiki> */
该页面使用的模板:
Template:Gadget Header
(
查看源代码
)
返回
MediaWiki:Gadget-Util.js
。