<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://test.zybkcn.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-Util.js</id>
	<title>MediaWiki:Gadget-Util.js - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://test.zybkcn.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-Util.js"/>
	<link rel="alternate" type="text/html" href="https://test.zybkcn.com/w/index.php?title=MediaWiki:Gadget-Util.js&amp;action=history"/>
	<updated>2026-07-18T00:49:19Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://test.zybkcn.com/w/index.php?title=MediaWiki:Gadget-Util.js&amp;diff=205&amp;oldid=prev</id>
		<title>鹿野耕云：​创建页面，内容为“/**  * SPDX-License-Identifier: GPL-3.0-or-later  * _addText: &#039;{{Gadget Header|license=GPL-3.0-or-later}}&#039;  *  * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/Util}  * @author 安忆 &lt;i@anyi.in&gt;  * @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 Gen…”</title>
		<link rel="alternate" type="text/html" href="https://test.zybkcn.com/w/index.php?title=MediaWiki:Gadget-Util.js&amp;diff=205&amp;oldid=prev"/>
		<updated>2026-06-13T12:01:32Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“&lt;span class=&quot;autocomment&quot;&gt;*  * SPDX-License-Identifier: GPL-3.0-or-later  * _addText: &amp;#039;{{Gadget Header|license=GPL-3.0-or-later}}&amp;#039;  *  * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/Util}  * @author 安忆 &amp;lt;i@anyi.in&amp;gt;  * @license GPL-3.0-or-later {@link https://www.qiuwenbaike.cn/wiki/H:GPL-3.0}：​&lt;/span&gt;  /**  * Copyright (C)  安忆  *  * This program is free software: you can redistribute it and/or modify  * it under the terms of the GNU Gen…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * SPDX-License-Identifier: GPL-3.0-or-later&lt;br /&gt;
 * _addText: &amp;#039;{{Gadget Header|license=GPL-3.0-or-later}}&amp;#039;&lt;br /&gt;
 *&lt;br /&gt;
 * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/Util}&lt;br /&gt;
 * @author 安忆 &amp;lt;i@anyi.in&amp;gt;&lt;br /&gt;
 * @license GPL-3.0-or-later {@link https://www.qiuwenbaike.cn/wiki/H:GPL-3.0}&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Copyright (C)  安忆&lt;br /&gt;
 *&lt;br /&gt;
 * This program is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This program is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with this program.  If not, see &amp;lt;https://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
 */&lt;br /&gt;
/**&lt;br /&gt;
 * +------------------------------------------------------------+&lt;br /&gt;
 * |            === WARNING: GLOBAL GADGET FILE ===             |&lt;br /&gt;
 * +------------------------------------------------------------+&lt;br /&gt;
 * |       All changes should be made in the repository,        |&lt;br /&gt;
 * |                otherwise they will be lost.                |&lt;br /&gt;
 * +------------------------------------------------------------+&lt;br /&gt;
 * |        Changes to this page may affect many users.         |&lt;br /&gt;
 * | Please discuss changes by opening an issue before editing. |&lt;br /&gt;
 * +------------------------------------------------------------+&lt;br /&gt;
 */&lt;br /&gt;
/* &amp;lt;nowiki&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
(() =&amp;gt; {&lt;br /&gt;
&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// dist/Util/Util.js&lt;br /&gt;
function asyncGeneratorStep(n, t, e, r, o, a, c) {&lt;br /&gt;
  try {&lt;br /&gt;
    var i = n[a](c), u = i.value;&lt;br /&gt;
  } catch (n2) {&lt;br /&gt;
    return void e(n2);&lt;br /&gt;
  }&lt;br /&gt;
  i.done ? t(u) : Promise.resolve(u).then(r, o);&lt;br /&gt;
}&lt;br /&gt;
function _asyncToGenerator(n) {&lt;br /&gt;
  return function() {&lt;br /&gt;
    var t = this, e = arguments;&lt;br /&gt;
    return new Promise(function(r, o) {&lt;br /&gt;
      var a = n.apply(t, e);&lt;br /&gt;
      function _next(n2) {&lt;br /&gt;
        asyncGeneratorStep(a, r, o, _next, _throw, &amp;quot;next&amp;quot;, n2);&lt;br /&gt;
      }&lt;br /&gt;
      function _throw(n2) {&lt;br /&gt;
        asyncGeneratorStep(a, r, o, _next, _throw, &amp;quot;throw&amp;quot;, n2);&lt;br /&gt;
      }&lt;br /&gt;
      _next(void 0);&lt;br /&gt;
    });&lt;br /&gt;
  };&lt;br /&gt;
}&lt;br /&gt;
function _createForOfIteratorHelper(r, e) {&lt;br /&gt;
  var t = &amp;quot;undefined&amp;quot; != typeof Symbol &amp;amp;&amp;amp; r[Symbol.iterator] || r[&amp;quot;@@iterator&amp;quot;];&lt;br /&gt;
  if (!t) {&lt;br /&gt;
    if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e &amp;amp;&amp;amp; r &amp;amp;&amp;amp; &amp;quot;number&amp;quot; == typeof r.length) {&lt;br /&gt;
      t &amp;amp;&amp;amp; (r = t);&lt;br /&gt;
      var n = 0, F = function() {&lt;br /&gt;
      };&lt;br /&gt;
      return { s: F, n: function() {&lt;br /&gt;
        return n &amp;gt;= r.length ? { done: true } : { done: false, value: r[n++] };&lt;br /&gt;
      }, e: function(r2) {&lt;br /&gt;
        throw r2;&lt;br /&gt;
      }, f: F };&lt;br /&gt;
    }&lt;br /&gt;
    throw new TypeError(&amp;quot;Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  var o, a = true, u = false;&lt;br /&gt;
  return { s: function() {&lt;br /&gt;
    t = t.call(r);&lt;br /&gt;
  }, n: function() {&lt;br /&gt;
    var r2 = t.next();&lt;br /&gt;
    return a = r2.done, r2;&lt;br /&gt;
  }, e: function(r2) {&lt;br /&gt;
    u = true, o = r2;&lt;br /&gt;
  }, f: function() {&lt;br /&gt;
    try {&lt;br /&gt;
      a || null == t.return || t.return();&lt;br /&gt;
    } finally {&lt;br /&gt;
      if (u) throw o;&lt;br /&gt;
    }&lt;br /&gt;
  } };&lt;br /&gt;
}&lt;br /&gt;
function _unsupportedIterableToArray(r, a) {&lt;br /&gt;
  if (r) {&lt;br /&gt;
    if (&amp;quot;string&amp;quot; == typeof r) return _arrayLikeToArray(r, a);&lt;br /&gt;
    var t = {}.toString.call(r).slice(8, -1);&lt;br /&gt;
    return &amp;quot;Object&amp;quot; === t &amp;amp;&amp;amp; r.constructor &amp;amp;&amp;amp; (t = r.constructor.name), &amp;quot;Map&amp;quot; === t || &amp;quot;Set&amp;quot; === t ? Array.from(r) : &amp;quot;Arguments&amp;quot; === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
function _arrayLikeToArray(r, a) {&lt;br /&gt;
  (null == a || a &amp;gt; r.length) &amp;amp;&amp;amp; (a = r.length);&lt;br /&gt;
  for (var e = 0, n = Array(a); e &amp;lt; a; e++) n[e] = r[e];&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
var __create = Object.create;&lt;br /&gt;
var __defProp = Object.defineProperty;&lt;br /&gt;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;&lt;br /&gt;
var __getOwnPropNames = Object.getOwnPropertyNames;&lt;br /&gt;
var __getProtoOf = Object.getPrototypeOf;&lt;br /&gt;
var __hasOwnProp = Object.prototype.hasOwnProperty;&lt;br /&gt;
var __export = (target, all) =&amp;gt; {&lt;br /&gt;
  for (var name in all) __defProp(target, name, {&lt;br /&gt;
    get: all[name],&lt;br /&gt;
    enumerable: true&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
var __copyProps = (to, from, except, desc) =&amp;gt; {&lt;br /&gt;
  if (from &amp;amp;&amp;amp; typeof from === &amp;quot;object&amp;quot; || typeof from === &amp;quot;function&amp;quot;) {&lt;br /&gt;
    var _iterator = _createForOfIteratorHelper(__getOwnPropNames(from)), _step;&lt;br /&gt;
    try {&lt;br /&gt;
      for (_iterator.s(); !(_step = _iterator.n()).done; ) {&lt;br /&gt;
        let key = _step.value;&lt;br /&gt;
        if (!__hasOwnProp.call(to, key) &amp;amp;&amp;amp; key !== except) __defProp(to, key, {&lt;br /&gt;
          get: () =&amp;gt; from[key],&lt;br /&gt;
          enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable&lt;br /&gt;
        });&lt;br /&gt;
      }&lt;br /&gt;
    } catch (err) {&lt;br /&gt;
      _iterator.e(err);&lt;br /&gt;
    } finally {&lt;br /&gt;
      _iterator.f();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  return to;&lt;br /&gt;
};&lt;br /&gt;
var __toESM = (mod, isNodeMode, target) =&amp;gt; (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(&lt;br /&gt;
  // If the importer is in node compatibility mode or this is not an ESM&lt;br /&gt;
  // file that has been converted to a CommonJS file using a Babel-&lt;br /&gt;
  // compatible transform (i.e. &amp;quot;__esModule&amp;quot; has not been set), then set&lt;br /&gt;
  // &amp;quot;default&amp;quot; to the CommonJS &amp;quot;module.exports&amp;quot; for node compatibility.&lt;br /&gt;
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, &amp;quot;default&amp;quot;, {&lt;br /&gt;
    value: mod,&lt;br /&gt;
    enumerable: true&lt;br /&gt;
  }) : target,&lt;br /&gt;
  mod&lt;br /&gt;
));&lt;br /&gt;
var __toCommonJS = (mod) =&amp;gt; __copyProps(__defProp({}, &amp;quot;__esModule&amp;quot;, {&lt;br /&gt;
  value: true&lt;br /&gt;
}), mod);&lt;br /&gt;
//! src/Util/Util.ts&lt;br /&gt;
var Util_exports = {};&lt;br /&gt;
__export(Util_exports, {&lt;br /&gt;
  MwUri: () =&amp;gt; MwUri,&lt;br /&gt;
  addEventListenerWithRemover: () =&amp;gt; addEventListenerWithRemover,&lt;br /&gt;
  changeOpacityWhenMouseEnterOrLeave: () =&amp;gt; changeOpacityWhenMouseEnterOrLeave,&lt;br /&gt;
  checkA11yConfirmKey: () =&amp;gt; checkA11yConfirmKey,&lt;br /&gt;
  checkDependencies: () =&amp;gt; checkDependencies,&lt;br /&gt;
  delay: () =&amp;gt; delay,&lt;br /&gt;
  findVariants: () =&amp;gt; findVariants,&lt;br /&gt;
  generateArray: () =&amp;gt; generateArray,&lt;br /&gt;
  generateSvgDataUrl: () =&amp;gt; generateSvgDataUrl,&lt;br /&gt;
  getBody: () =&amp;gt; getBody,&lt;br /&gt;
  getWpSummaryContent: () =&amp;gt; getWpSummaryContent,&lt;br /&gt;
  getWpTextbox1Content: () =&amp;gt; getWpTextbox1Content,&lt;br /&gt;
  initMwApi: () =&amp;gt; initMwApi,&lt;br /&gt;
  isValidKey: () =&amp;gt; isValidKey,&lt;br /&gt;
  oouiConfirmWithStyle: () =&amp;gt; oouiConfirmWithStyle,&lt;br /&gt;
  queryGlobalUserGroups: () =&amp;gt; queryGlobalUserGroups,&lt;br /&gt;
  queryUserGroups: () =&amp;gt; queryUserGroups,&lt;br /&gt;
  scrollTop: () =&amp;gt; scrollTop,&lt;br /&gt;
  setWpSummaryContent: () =&amp;gt; setWpSummaryContent,&lt;br /&gt;
  setWpTextbox1Content: () =&amp;gt; setWpTextbox1Content,&lt;br /&gt;
  uniqueArray: () =&amp;gt; uniqueArray,&lt;br /&gt;
  userIsInGroup: () =&amp;gt; userIsInGroup&lt;br /&gt;
});&lt;br /&gt;
module.exports = __toCommonJS(Util_exports);&lt;br /&gt;
//! src/Util/modules/addEventListenerWithRemover.ts&lt;br /&gt;
var addEventListenerWithRemover = ({&lt;br /&gt;
  target,&lt;br /&gt;
  type,&lt;br /&gt;
  listener,&lt;br /&gt;
  options = {}&lt;br /&gt;
}) =&amp;gt; {&lt;br /&gt;
  target.addEventListener(type, listener, options);&lt;br /&gt;
  return {&lt;br /&gt;
    remove: () =&amp;gt; {&lt;br /&gt;
      target.removeEventListener(type, listener, options);&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
//! src/Util/modules/changeOpacityWhenMouseEnterOrLeave.ts&lt;br /&gt;
var changeOpacityWhenMouseEnterOrLeave = (event, opacity = 0.7) =&amp;gt; {&lt;br /&gt;
  event.currentTarget.style.opacity = event.type === &amp;quot;mouseenter&amp;quot; ? &amp;quot;1&amp;quot; : opacity.toString();&lt;br /&gt;
};&lt;br /&gt;
//! src/Util/modules/checkA11yConfirmKey.ts&lt;br /&gt;
var checkA11yConfirmKey = (event) =&amp;gt; {&lt;br /&gt;
  if ([&amp;quot;click&amp;quot;, &amp;quot;keydown&amp;quot;].includes(event.type)) {&lt;br /&gt;
    if (event.type === &amp;quot;keydown&amp;quot;) {&lt;br /&gt;
      return [&amp;quot;Enter&amp;quot;, &amp;quot; &amp;quot;].includes(event.key);&lt;br /&gt;
    }&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
};&lt;br /&gt;
//! src/Util/modules/generateArray.ts&lt;br /&gt;
function generateArray(...args) {&lt;br /&gt;
  return args.flatMap((arg) =&amp;gt; {&lt;br /&gt;
    if (Array.isArray(arg)) {&lt;br /&gt;
      return arg;&lt;br /&gt;
    }&lt;br /&gt;
    if (arg instanceof NodeList) {&lt;br /&gt;
      return [...arg];&lt;br /&gt;
    }&lt;br /&gt;
    return [arg];&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
//! src/Util/modules/initMwApi.ts&lt;br /&gt;
function initMwApi(userAgent, apiUri) {&lt;br /&gt;
  const apiOptions = {&lt;br /&gt;
    ajax: {&lt;br /&gt;
      headers: {&lt;br /&gt;
        &amp;quot;Api-User-Agent&amp;quot;: userAgent ? &amp;quot;Qiuwen/1.1 (&amp;quot;.concat(userAgent, &amp;quot;)&amp;quot;) : &amp;quot;Qiuwen/1.1&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
  if (apiUri) {&lt;br /&gt;
    return new mw.ForeignApi(apiUri, apiOptions);&lt;br /&gt;
  }&lt;br /&gt;
  return new mw.Api(apiOptions);&lt;br /&gt;
}&lt;br /&gt;
//! src/Util/modules/uniqueArray.ts&lt;br /&gt;
var uniqueArray = function uniqueArray2(args) {&lt;br /&gt;
  /**!&lt;br /&gt;
   * SPDX-License-Identifier: CC-BY-SA-4.0&lt;br /&gt;
   *&lt;br /&gt;
   * @source {@link https://stackoverflow.com/questions/9229645/remove-duplicate-values-from-js-array/922982}&lt;br /&gt;
   * @license CC-BY-SA-4.0&lt;br /&gt;
   */&lt;br /&gt;
  const result = [];&lt;br /&gt;
  var _iterator2 = _createForOfIteratorHelper(args), _step2;&lt;br /&gt;
  try {&lt;br /&gt;
    for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {&lt;br /&gt;
      const item = _step2.value;&lt;br /&gt;
      if (!result.includes(item)) {&lt;br /&gt;
        result[result.length] = item;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } catch (err) {&lt;br /&gt;
    _iterator2.e(err);&lt;br /&gt;
  } finally {&lt;br /&gt;
    _iterator2.f();&lt;br /&gt;
  }&lt;br /&gt;
  return result;&lt;br /&gt;
};&lt;br /&gt;
//! src/Util/modules/checkDependencies.ts&lt;br /&gt;
function checkDependencies(_x, _x2) {&lt;br /&gt;
  return _checkDependencies.apply(this, arguments);&lt;br /&gt;
}&lt;br /&gt;
//! src/Util/modules/delay.ts&lt;br /&gt;
function _checkDependencies() {&lt;br /&gt;
  _checkDependencies = _asyncToGenerator(function* (gadgetNames, option) {&lt;br /&gt;
    const api = initMwApi(&amp;quot;Util-CheckDependencies&amp;quot;);&lt;br /&gt;
    const gadgets = uniqueArray(generateArray(gadgetNames));&lt;br /&gt;
    option || (option = 1);&lt;br /&gt;
    var _iterator3 = _createForOfIteratorHelper(gadgets), _step3;&lt;br /&gt;
    try {&lt;br /&gt;
      for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) {&lt;br /&gt;
        const gadget = _step3.value;&lt;br /&gt;
        if (option === &amp;quot;0&amp;quot; &amp;amp;&amp;amp; mw.user.options.get(&amp;quot;gadget-&amp;quot;.concat(gadget)) || option === &amp;quot;1&amp;quot; &amp;amp;&amp;amp; !mw.user.options.get(&amp;quot;gadget-&amp;quot;.concat(gadget))) {&lt;br /&gt;
          yield api.postWithEditToken({&lt;br /&gt;
            action: &amp;quot;options&amp;quot;,&lt;br /&gt;
            change: &amp;quot;gadget-&amp;quot;.concat(gadget, &amp;quot;=&amp;quot;).concat(option)&lt;br /&gt;
          });&lt;br /&gt;
          yield mw.loader.using(&amp;quot;ext.gadget.&amp;quot;.concat(gadget));&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } catch (err) {&lt;br /&gt;
      _iterator3.e(err);&lt;br /&gt;
    } finally {&lt;br /&gt;
      _iterator3.f();&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
  return _checkDependencies.apply(this, arguments);&lt;br /&gt;
}&lt;br /&gt;
var delay = (ms) =&amp;gt; {&lt;br /&gt;
  return new Promise((resolve) =&amp;gt; {&lt;br /&gt;
    setTimeout(resolve, ms);&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
//! src/Util/modules/findVariants.ts&lt;br /&gt;
function findVariants(_x3) {&lt;br /&gt;
  return _findVariants.apply(this, arguments);&lt;br /&gt;
}&lt;br /&gt;
//! src/Util/modules/generateSvgDataUrl.ts&lt;br /&gt;
function _findVariants() {&lt;br /&gt;
  _findVariants = _asyncToGenerator(function* (text) {&lt;br /&gt;
    const api = initMwApi(&amp;quot;Util-FindVariants&amp;quot;);&lt;br /&gt;
    const VARIANTS = [&amp;quot;zh-hans&amp;quot;, &amp;quot;zh-hant&amp;quot;, &amp;quot;zh-cn&amp;quot;, &amp;quot;zh-hk&amp;quot;, &amp;quot;zh-mo&amp;quot;, &amp;quot;zh-sg&amp;quot;, &amp;quot;zh-my&amp;quot;, &amp;quot;zh-tw&amp;quot;];&lt;br /&gt;
    const allVariants = [];&lt;br /&gt;
    const params = {&lt;br /&gt;
      action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
      contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
      format: &amp;quot;json&amp;quot;,&lt;br /&gt;
      formatversion: &amp;quot;2&amp;quot;,&lt;br /&gt;
      prop: [&amp;quot;displaytitle&amp;quot;],&lt;br /&gt;
      title: &amp;quot;temp&amp;quot;,&lt;br /&gt;
      text&lt;br /&gt;
    };&lt;br /&gt;
    for (var _i2 = 0, _VARIANTS = VARIANTS; _i2 &amp;lt; _VARIANTS.length; _i2++) {&lt;br /&gt;
      var _response$query;&lt;br /&gt;
      const variant = _VARIANTS[_i2];&lt;br /&gt;
      params.uselang = variant;&lt;br /&gt;
      params.variant = variant;&lt;br /&gt;
      const response = yield api.post(params);&lt;br /&gt;
      const displaytitle = response === null || response === void 0 || (_response$query = response[&amp;quot;query&amp;quot;]) === null || _response$query === void 0 ? void 0 : _response$query.displaytitle;&lt;br /&gt;
      const variantElement = document.createElement(&amp;quot;variant&amp;quot;);&lt;br /&gt;
      variantElement.innerHTML = displaytitle;&lt;br /&gt;
      if (variantElement.textContent) {&lt;br /&gt;
        allVariants[allVariants.length] = variantElement.textContent;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return uniqueArray(allVariants);&lt;br /&gt;
  });&lt;br /&gt;
  return _findVariants.apply(this, arguments);&lt;br /&gt;
}&lt;br /&gt;
var generateSvgDataUrl = (svg) =&amp;gt; {&lt;br /&gt;
  /**!&lt;br /&gt;
   * SPDX-License-Identifier: MIT&lt;br /&gt;
   *&lt;br /&gt;
   * @source svg-to-data-uri.js {@link https://github.com/heyallan/svg-to-data-uri/}&lt;br /&gt;
   * @author Allan Moreno&lt;br /&gt;
   * @license MIT {@link https://github.com/heyallan/svg-to-data-uri/blob/master/LICENSE}&lt;br /&gt;
   *&lt;br /&gt;
   * Permission is hereby granted, free of charge, to any person obtaining a copy&lt;br /&gt;
   * of this software and associated documentation files (the &amp;quot;Software&amp;quot;), to deal&lt;br /&gt;
   * in the Software without restriction, including without limitation the rights&lt;br /&gt;
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&lt;br /&gt;
   * copies of the Software, and to permit persons to whom the Software is&lt;br /&gt;
   * furnished to do so, subject to the following conditions:&lt;br /&gt;
   *&lt;br /&gt;
   * The above copyright notice and this permission notice shall be included in all&lt;br /&gt;
   * copies or substantial portions of the Software.&lt;br /&gt;
   *&lt;br /&gt;
   * THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&lt;br /&gt;
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&lt;br /&gt;
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&lt;br /&gt;
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&lt;br /&gt;
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&lt;br /&gt;
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE&lt;br /&gt;
   * SOFTWARE.&lt;br /&gt;
   */&lt;br /&gt;
  svg = svg.trim();&lt;br /&gt;
  svg = svg.slice(svg.indexOf(&amp;quot;&amp;lt;svg&amp;quot;));&lt;br /&gt;
  if (!svg.startsWith(&amp;quot;&amp;lt;svg&amp;quot;) || !svg.endsWith(&amp;quot;svg&amp;gt;&amp;quot;)) {&lt;br /&gt;
    return &amp;quot;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  if (!svg.includes(&amp;quot;http://www.w3.org/2000/svg&amp;quot;)) {&lt;br /&gt;
    svg = svg.replace(/&amp;lt;svg/g, &amp;quot;&amp;lt;svg xmlns=&amp;#039;http://www.w3.org/2000/svg&amp;#039;&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  svg = svg.replace(/&amp;lt;!--.{1,}--&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
  svg = svg.replace(/version=[&amp;quot;&amp;#039;](.{0,}?)[&amp;quot;&amp;#039;](?=[\s&amp;gt;])/g, &amp;quot;&amp;quot;);&lt;br /&gt;
  svg = svg.replace(/&amp;quot;&amp;#039;(.{1,})&amp;#039;&amp;quot;/g, &amp;quot;&amp;#039;$1&amp;#039;&amp;quot;);&lt;br /&gt;
  svg = svg.replace(/&amp;quot;/g, &amp;quot;&amp;#039;&amp;quot;);&lt;br /&gt;
  svg = svg.replace(/&amp;gt;\s{1,}&amp;lt;/g, &amp;quot;&amp;gt;&amp;lt;&amp;quot;);&lt;br /&gt;
  svg = svg.replace(/\s{2,}/g, &amp;quot; &amp;quot;);&lt;br /&gt;
  svg = svg.trim();&lt;br /&gt;
  if (!svg.startsWith(&amp;quot;&amp;lt;svg&amp;quot;) || !svg.endsWith(&amp;quot;svg&amp;gt;&amp;quot;)) {&lt;br /&gt;
    return &amp;quot;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  svg = svg.replace(/&amp;amp;/g, &amp;quot;&amp;amp;amp;&amp;quot;);&lt;br /&gt;
  svg = svg.replace(/[%#&amp;lt;&amp;gt;?[\\\]^`{|}]/g, encodeURIComponent);&lt;br /&gt;
  svg = &amp;quot;data:image/svg+xml,&amp;quot;.concat(svg);&lt;br /&gt;
  return svg;&lt;br /&gt;
};&lt;br /&gt;
//! src/Util/modules/getBody.ts&lt;br /&gt;
var getBody = () =&amp;gt; {&lt;br /&gt;
  return $.ready.then(() =&amp;gt; {&lt;br /&gt;
    const $body = $(&amp;quot;body&amp;quot;);&lt;br /&gt;
    return $body;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
//! src/Util/modules/isValidKey.ts&lt;br /&gt;
var isValidKey = (object, key) =&amp;gt; {&lt;br /&gt;
  return key in object;&lt;br /&gt;
};&lt;br /&gt;
//! src/Util/modules/mwUri.ts&lt;br /&gt;
var MwUri = class extends URL {&lt;br /&gt;
  extend(object) {&lt;br /&gt;
    for (var _i = 0, _Object$entries = Object.entries(object); _i &amp;lt; _Object$entries.length; _i++) {&lt;br /&gt;
      const [key, value] = _Object$entries[_i];&lt;br /&gt;
      this.searchParams.set(key, value);&lt;br /&gt;
    }&lt;br /&gt;
    return this;&lt;br /&gt;
  }&lt;br /&gt;
  getRelativePath() {&lt;br /&gt;
    return this.pathname + this.search + this.hash;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
//! src/Util/modules/oouiConfirmWithStyle.tsx&lt;br /&gt;
var import_ext_gadget = __toESM(require(&amp;quot;ext.gadget.JSX&amp;quot;), 1);&lt;br /&gt;
var oouiConfirmWithStyle = (message) =&amp;gt; OO.ui.confirm($(/* @__PURE__ */ import_ext_gadget.default.createElement(&amp;quot;div&amp;quot;, {&lt;br /&gt;
  className: &amp;quot;oo-ui-window-foot&amp;quot;,&lt;br /&gt;
  style: {&lt;br /&gt;
    border: &amp;quot;.1rem solid #0645ad&amp;quot;,&lt;br /&gt;
    display: &amp;quot;flex&amp;quot;,&lt;br /&gt;
    justifyContent: &amp;quot;space-evenly&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}, /* @__PURE__ */ import_ext_gadget.default.createElement(&amp;quot;span&amp;quot;, {&lt;br /&gt;
  style: {&lt;br /&gt;
    fontSize: &amp;quot;1.2rem&amp;quot;,&lt;br /&gt;
    fontWeight: &amp;quot;500&amp;quot;,&lt;br /&gt;
    lineHeight: &amp;quot;1.8&amp;quot;,&lt;br /&gt;
    padding: &amp;quot;.4em 0&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}, message)))).then((isConfirm) =&amp;gt; isConfirm);&lt;br /&gt;
//! src/Util/modules/queryGlobalUserGroups.ts&lt;br /&gt;
function queryGlobalUserGroups(_x4) {&lt;br /&gt;
  return _queryGlobalUserGroups.apply(this, arguments);&lt;br /&gt;
}&lt;br /&gt;
//! src/Util/modules/queryUserGroups.ts&lt;br /&gt;
function _queryGlobalUserGroups() {&lt;br /&gt;
  _queryGlobalUserGroups = _asyncToGenerator(function* (guiuser) {&lt;br /&gt;
    const api = initMwApi(&amp;quot;Util-QueryGlobalUserGroups&amp;quot;);&lt;br /&gt;
    const CACHE_KEY_PREFIX = &amp;quot;ext.gadget.Util_queryGlobalUserGroups-&amp;quot;;&lt;br /&gt;
    let groups = [];&lt;br /&gt;
    if (mw.storage.getObject(CACHE_KEY_PREFIX + guiuser)) {&lt;br /&gt;
      groups = mw.storage.getObject(CACHE_KEY_PREFIX + guiuser);&lt;br /&gt;
      groups = groups.filter((element) =&amp;gt; {&lt;br /&gt;
        return element !== &amp;quot;*&amp;quot;;&lt;br /&gt;
      });&lt;br /&gt;
    } else {&lt;br /&gt;
      const params = {&lt;br /&gt;
        action: &amp;quot;query&amp;quot;,&lt;br /&gt;
        format: &amp;quot;json&amp;quot;,&lt;br /&gt;
        formatversion: &amp;quot;2&amp;quot;,&lt;br /&gt;
        meta: &amp;quot;globaluserinfo&amp;quot;,&lt;br /&gt;
        guiuser,&lt;br /&gt;
        guiprop: &amp;quot;groups&amp;quot;,&lt;br /&gt;
        smaxage: 600,&lt;br /&gt;
        maxage: 600&lt;br /&gt;
      };&lt;br /&gt;
      const response = yield api.get(params);&lt;br /&gt;
      const query = response[&amp;quot;query&amp;quot;];&lt;br /&gt;
      if (query !== null &amp;amp;&amp;amp; query !== void 0 &amp;amp;&amp;amp; query.globaluserinfo) {&lt;br /&gt;
        var _query$globaluserinfo, _query$globaluserinfo2;&lt;br /&gt;
        groups = (_query$globaluserinfo = (_query$globaluserinfo2 = query.globaluserinfo) === null || _query$globaluserinfo2 === void 0 ? void 0 : _query$globaluserinfo2.groups) !== null &amp;amp;&amp;amp; _query$globaluserinfo !== void 0 ? _query$globaluserinfo : [];&lt;br /&gt;
        groups = groups.filter((element) =&amp;gt; {&lt;br /&gt;
          return element !== &amp;quot;*&amp;quot;;&lt;br /&gt;
        });&lt;br /&gt;
        mw.storage.setObject(CACHE_KEY_PREFIX + guiuser, groups, 60 * 60);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return {&lt;br /&gt;
      query: {&lt;br /&gt;
        globaluserinfo: {&lt;br /&gt;
          name: guiuser,&lt;br /&gt;
          groups&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
  });&lt;br /&gt;
  return _queryGlobalUserGroups.apply(this, arguments);&lt;br /&gt;
}&lt;br /&gt;
function queryUserGroups(_x5) {&lt;br /&gt;
  return _queryUserGroups.apply(this, arguments);&lt;br /&gt;
}&lt;br /&gt;
//! src/Util/modules/scrollTop.ts&lt;br /&gt;
function _queryUserGroups() {&lt;br /&gt;
  _queryUserGroups = _asyncToGenerator(function* (users) {&lt;br /&gt;
    var _query$users;&lt;br /&gt;
    const api = initMwApi(&amp;quot;Util-QueryUserGroups&amp;quot;);&lt;br /&gt;
    const CACHE_KEY_PREFIX = &amp;quot;ext.gadget.Util_queryUserGroups-&amp;quot;;&lt;br /&gt;
    const cachedQueryUsers = [];&lt;br /&gt;
    var _iterator4 = _createForOfIteratorHelper(users), _step4;&lt;br /&gt;
    try {&lt;br /&gt;
      for (_iterator4.s(); !(_step4 = _iterator4.n()).done; ) {&lt;br /&gt;
        const user = _step4.value;&lt;br /&gt;
        if (mw.storage.getObject(CACHE_KEY_PREFIX + user)) {&lt;br /&gt;
          let groups = mw.storage.getObject(CACHE_KEY_PREFIX + user);&lt;br /&gt;
          groups = groups.filter((element) =&amp;gt; {&lt;br /&gt;
            return element !== &amp;quot;*&amp;quot;;&lt;br /&gt;
          });&lt;br /&gt;
          cachedQueryUsers[cachedQueryUsers.length] = {&lt;br /&gt;
            name: user,&lt;br /&gt;
            groups&lt;br /&gt;
          };&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } catch (err) {&lt;br /&gt;
      _iterator4.e(err);&lt;br /&gt;
    } finally {&lt;br /&gt;
      _iterator4.f();&lt;br /&gt;
    }&lt;br /&gt;
    const ususers = users.filter((v) =&amp;gt; {&lt;br /&gt;
      return !mw.storage.getObject(CACHE_KEY_PREFIX + v);&lt;br /&gt;
    });&lt;br /&gt;
    const params = {&lt;br /&gt;
      ususers,&lt;br /&gt;
      action: &amp;quot;query&amp;quot;,&lt;br /&gt;
      format: &amp;quot;json&amp;quot;,&lt;br /&gt;
      formatversion: &amp;quot;2&amp;quot;,&lt;br /&gt;
      list: &amp;quot;users&amp;quot;,&lt;br /&gt;
      usprop: &amp;quot;groups&amp;quot;,&lt;br /&gt;
      smaxage: 600,&lt;br /&gt;
      maxage: 600&lt;br /&gt;
    };&lt;br /&gt;
    const response = yield api.get(params);&lt;br /&gt;
    const query = response[&amp;quot;query&amp;quot;];&lt;br /&gt;
    const queryUsers = [...(_query$users = query === null || query === void 0 ? void 0 : query.users) !== null &amp;amp;&amp;amp; _query$users !== void 0 ? _query$users : [], ...cachedQueryUsers];&lt;br /&gt;
    for (var _i3 = 0, _queryUsers = queryUsers; _i3 &amp;lt; _queryUsers.length; _i3++) {&lt;br /&gt;
      const user = _queryUsers[_i3];&lt;br /&gt;
      if (user !== null &amp;amp;&amp;amp; user !== void 0 &amp;amp;&amp;amp; user.groups &amp;amp;&amp;amp; user !== null &amp;amp;&amp;amp; user !== void 0 &amp;amp;&amp;amp; user.name) {&lt;br /&gt;
        let {&lt;br /&gt;
          groups&lt;br /&gt;
        } = user;&lt;br /&gt;
        groups = groups.filter((element) =&amp;gt; {&lt;br /&gt;
          return element !== &amp;quot;*&amp;quot;;&lt;br /&gt;
        });&lt;br /&gt;
        mw.storage.setObject(CACHE_KEY_PREFIX + user.name, groups, 60 * 60);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return {&lt;br /&gt;
      query: {&lt;br /&gt;
        users: queryUsers&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
  });&lt;br /&gt;
  return _queryUserGroups.apply(this, arguments);&lt;br /&gt;
}&lt;br /&gt;
var scrollTop = (targetHeight, effectsOptionsOrDuration = {}) =&amp;gt; {&lt;br /&gt;
  const options = typeof effectsOptionsOrDuration === &amp;quot;number&amp;quot; || typeof effectsOptionsOrDuration === &amp;quot;string&amp;quot; ? {&lt;br /&gt;
    duration: effectsOptionsOrDuration,&lt;br /&gt;
    easing: &amp;quot;linear&amp;quot;&lt;br /&gt;
  } : {&lt;br /&gt;
    duration: &amp;quot;slow&amp;quot;,&lt;br /&gt;
    easing: &amp;quot;linear&amp;quot;,&lt;br /&gt;
    ...effectsOptionsOrDuration&lt;br /&gt;
  };&lt;br /&gt;
  $(document).find(&amp;quot;html, body&amp;quot;).animate({&lt;br /&gt;
    scrollTop: targetHeight&lt;br /&gt;
  }, options);&lt;br /&gt;
};&lt;br /&gt;
//! src/Util/modules/userIsInGroup.ts&lt;br /&gt;
var userIsInGroup = (groups) =&amp;gt; {&lt;br /&gt;
  const {&lt;br /&gt;
    wgUserGroups,&lt;br /&gt;
    wgGlobalGroups&lt;br /&gt;
  } = mw.config.get();&lt;br /&gt;
  return [...wgUserGroups || [], ...wgGlobalGroups || []].some((element) =&amp;gt; {&lt;br /&gt;
    return generateArray(groups).includes(element);&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
//! src/Util/modules/wpSummaryContent.ts&lt;br /&gt;
var getWpSummaryContent = ({&lt;br /&gt;
  $editForm&lt;br /&gt;
}) =&amp;gt; {&lt;br /&gt;
  var _$editForm$find$val, _$editForm$find;&lt;br /&gt;
  return (_$editForm$find$val = (_$editForm$find = $editForm.find(&amp;quot;#wpSummary&amp;quot;)) === null || _$editForm$find === void 0 ? void 0 : _$editForm$find.val()) !== null &amp;amp;&amp;amp; _$editForm$find$val !== void 0 ? _$editForm$find$val : &amp;quot;&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
var setWpSummaryContent = ({&lt;br /&gt;
  $editForm,&lt;br /&gt;
  content&lt;br /&gt;
}) =&amp;gt; {&lt;br /&gt;
  $editForm.find(&amp;quot;#wpSummary&amp;quot;).val(content);&lt;br /&gt;
};&lt;br /&gt;
//! src/Util/modules/wpTextbox1Content.ts&lt;br /&gt;
var getWpTextbox1Content = ({&lt;br /&gt;
  $editForm&lt;br /&gt;
}) =&amp;gt; {&lt;br /&gt;
  var _$editForm$find$textS;&lt;br /&gt;
  return (_$editForm$find$textS = $editForm.find(&amp;quot;#wpTextbox1&amp;quot;).textSelection(&amp;quot;getContents&amp;quot;)) !== null &amp;amp;&amp;amp; _$editForm$find$textS !== void 0 ? _$editForm$find$textS : &amp;quot;&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
var setWpTextbox1Content = ({&lt;br /&gt;
  $editForm,&lt;br /&gt;
  content&lt;br /&gt;
}) =&amp;gt; {&lt;br /&gt;
  $editForm.find(&amp;quot;#wpTextbox1&amp;quot;).textSelection(&amp;quot;setContents&amp;quot;, content);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* &amp;lt;/nowiki&amp;gt; */&lt;/div&gt;</summary>
		<author><name>鹿野耕云</name></author>
	</entry>
</feed>