(Git 版本 d13a10b: 代码仓库同步更新) |
小 (Git commit 315405d: feat: sync upstream with Qiuwen) |
||
(未显示同一用户的4个中间版本) | |||
第1行: | 第1行: | ||
/** |
/** |
||
* SPDX-License-Identifier: |
* SPDX-License-Identifier: GPL-3.0-or-later |
||
* _addText: '{{Gadget Header|license= |
* _addText: '{{Gadget Header|license=GPL-3.0-or-later}}' |
||
* |
* |
||
* @source {@link https://github.com/TopRealm/YsArchives-Gadgets/tree/master/src/EditConflict} |
|||
* @source <meta.wikimedia.org/wiki/User:Bluedeck/source/edit-conflict.js> |
|||
* @author 安忆 <i@anyi.in> |
|||
* @license GPL-3.0-or-later {@link https://youshou.wiki/wiki/H:GPLV3} |
|||
*/ |
*/ |
||
/** |
|||
* +------------------------------------------------------------+ |
|||
* | === 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"; |
"use strict"; |
||
// dist/EditConflict/EditConflict.js |
|||
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } |
|||
function asyncGeneratorStep(n, t, e, r, o, a, c) { |
|||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } |
|||
try { |
|||
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } |
|||
var i = n[a](c), u = i.value; |
|||
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } |
|||
} catch (n2) { |
|||
(function (ele, txt, time, condition) { |
|||
return void e(n2); |
|||
if (!condition) { |
|||
return; |
|||
} |
} |
||
i.done ? t(u) : Promise.resolve(u).then(r, o); |
|||
ele.innerHTML = ""; |
|||
} |
|||
(function (ele, txt, time) { |
|||
function _asyncToGenerator(n) { |
|||
txt = txt.split(""); |
|||
return function() { |
|||
var len = txt.length, |
|||
var t = this, e = arguments; |
|||
return new Promise(function(r, o) { |
|||
var a = n.apply(t, e); |
|||
function _next(n2) { |
|||
ele.innerHTML += txt.shift(); |
|||
asyncGeneratorStep(a, r, o, _next, _throw, "next", n2); |
|||
}, i * rate); |
|||
} |
|||
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."); |
|||
})(ele, txt, time); |
|||
})(document.getElementById("edit_conflict"), "2021.0.2", 400, document.getElementById("8c23b4144bd58c689e192c6ab912a3b75c76f6849977518b8bedefd5e347d67f")); |
|||
(function (w) { |
|||
// if not edit mode, abort |
|||
if (!/[&?]action=edit/.test(w.location.search)) { |
|||
return; |
|||
} |
} |
||
var o, a = true, u = false; |
|||
if ((mw.config.values.wgCurRevisionId || w.wgCurRevisionId) === 0) { |
|||
return { s: function() { |
|||
// the page does not exist, abort actions. |
|||
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; |
|||
} |
} |
||
} |
|||
var lang_code = "en_us"; |
|||
function _arrayLikeToArray(r, a) { |
|||
var done = false; |
|||
(null == a || a > r.length) && (a = r.length); |
|||
var interval_id = null; |
|||
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; |
|||
var current_revid = mw.config.values.wgCurRevisionId || w.wgCurRevisionId; |
|||
return n; |
|||
var lang = { |
|||
} |
|||
notice: { |
|||
var __create = Object.create; |
|||
en_us: '<div>This page has been changed by someone else after you started editing. Copy your changes, refresh and start over to avoid edit conflicts. </div><div style="margin-top: 0.4em;"><button>OK</button> <button onclick="window.location.reload()">Refresh</button></div>', |
|||
var __defProp = Object.defineProperty; |
|||
zh_cn: '<div>本页面已被他人更改。请复制您的编辑,然后刷新页面,重新开始编辑,以避免编辑冲突。</div><div style="margin-top: 0.4em;"><button>OK</button> <button onclick="window.location.reload()">刷新</button></div>', |
|||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; |
|||
zh_hk: '<div>本頁已被他人更改。請將您的編輯複製,並重新載入頁面,然後繼續編輯,來避免編輯衝突。</div><div style="margin-top: 0.4em;"><button>OK</button> <button onclick="window.location.reload()">重新載入</button></div>' |
|||
var __getOwnPropNames = Object.getOwnPropertyNames; |
|||
var __getProtoOf = Object.getPrototypeOf; |
|||
var __hasOwnProp = Object.prototype.hasOwnProperty; |
|||
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 |
|||
)); |
|||
//! src/EditConflict/modules/core.ts |
|||
var import_ext_gadget4 = require("ext.gadget.Util"); |
|||
//! src/EditConflict/modules/noticeMessage.tsx |
|||
var import_ext_gadget2 = __toESM(require("ext.gadget.React"), 1); |
|||
//! src/EditConflict/modules/i18n.ts |
|||
var import_ext_gadget = require("ext.gadget.i18n"); |
|||
var getI18nMessages = () => { |
|||
return { |
|||
Notice: (0, import_ext_gadget.localize)({ |
|||
en: "This page has been changed by someone else after you started editing. Copy your changes, refresh and start over to avoid edit conflicts.", |
|||
ja: "このページは他の人によって変更されています。編集衝突を避けるため、編集内容をコピーしてページを再読み込みし、編集を続けてください。", |
|||
"zh-hans": "此页面已被他人更改。请复制您的编辑,然后刷新页面,重新开始编辑,以避免编辑冲突。", |
|||
"zh-hant": "本頁已被他人更改。請將您的編輯複製,並重新載入頁面,然後繼續編輯,來避免編輯衝突。" |
|||
}), |
|||
Refresh: (0, import_ext_gadget.localize)({ |
|||
en: "Refresh", |
|||
ja: "再読み込み", |
|||
"zh-hans": "刷新页面", |
|||
"zh-hant": "重新載入" |
|||
}) |
|||
}; |
}; |
||
}; |
|||
var i18nMessages = getI18nMessages(); |
|||
// libs |
|||
var getMessage = (key) => { |
|||
var ding = window.DingExposedInterface; |
|||
return i18nMessages[key] || key; |
|||
var acc_lang = function () { |
|||
}; |
|||
var PREVENT_INFINITE_LOOP = 1000; |
|||
//! src/EditConflict/modules/noticeMessage.tsx |
|||
var accepted_languages_dict = { |
|||
var locationReload = () => { |
|||
// lang_code |
|||
location.reload(); |
|||
en: "en_us", |
|||
return false; |
|||
enau: "en_au", |
|||
}; |
|||
enca: "en_ca", |
|||
var NoticeMessage = () => /* @__PURE__ */ import_ext_gadget2.default.createElement("span", null, getMessage("Notice"), /* @__PURE__ */ import_ext_gadget2.default.createElement("a", { |
|||
enhk: "en_hk", |
|||
onClick: locationReload |
|||
ennz: "en_nz", |
|||
}, getMessage("Refresh"))); |
|||
enuk: "en_uk", |
|||
//! src/EditConflict/options.json |
|||
enus: "en_us", |
|||
var version = "2.0"; |
|||
zh: "zh_cn", |
|||
//! src/EditConflict/modules/api.ts |
|||
zhcn: "zh_cn", |
|||
var import_ext_gadget3 = require("ext.gadget.Util"); |
|||
zhhk: "zh_hk", |
|||
var api = (0, import_ext_gadget3.initMwApi)("EditConflict/".concat(version)); |
|||
zhmo: "zh_mo", |
|||
//! src/EditConflict/modules/util/queryPageInfo.ts |
|||
zhtw: "zh_tw", |
|||
var parameters = { |
|||
zhsg: "zh_sg", |
|||
action: "query", |
|||
// country code |
|||
format: "json", |
|||
formatversion: "2", |
|||
prop: "revisions", |
|||
rvprop: "ids" |
|||
}; |
|||
hk: "zh_hk", |
|||
var queryPageInfo = /* @__PURE__ */ function() { |
|||
nz: "en_us", |
|||
var _ref = _asyncToGenerator(function* (title) { |
|||
tw: "zh_tw", |
|||
try { |
|||
return yield api.post({ |
|||
...parameters, |
|||
titles: title |
|||
}); |
|||
} catch (error) { |
|||
console.error("[EditConflict] Ajax error:", error); |
|||
}; |
|||
return {}; |
|||
var Language_proximity_group = /*#__PURE__*/function () { |
|||
} |
|||
function Language_proximity_group(desc) { |
|||
}); |
|||
_classCallCheck(this, Language_proximity_group); |
|||
return function queryPageInfo2(_x) { |
|||
this.parent = null; |
|||
return _ref.apply(this, arguments); |
|||
}; |
|||
this.sub_groups = []; |
|||
}(); |
|||
this.languages = []; |
|||
//! src/EditConflict/modules/getCurrentRevisionId.ts |
|||
} |
|||
var getCurrentRevisionId = /* @__PURE__ */ function() { |
|||
_createClass(Language_proximity_group, [{ |
|||
var _ref2 = _asyncToGenerator(function* (title) { |
|||
key: "all", |
|||
const pageInfo = yield queryPageInfo(title); |
|||
value: function all() { |
|||
const { |
|||
var all_codes = []; |
|||
query |
|||
for (var i = 0; i < this.languages.length; i++) { |
|||
} = pageInfo; |
|||
all_codes = all_codes.concat(this.languages[i]); |
|||
if (!query) { |
|||
return 0; |
|||
for (var _i2 = 0; _i2 < this.sub_groups.length; _i2++) { |
|||
} |
|||
all_codes = all_codes.concat(this.sub_groups[_i2].all()); |
|||
const [page] = query.pages; |
|||
if (!page || page.missing) { |
|||
return all_codes; |
|||
return 0; |
|||
} |
|||
return page.revisions[0].revid; |
|||
}); |
|||
return function getCurrentRevisionId2(_x2) { |
|||
return _ref2.apply(this, arguments); |
|||
}; |
|||
}(); |
|||
//! src/EditConflict/modules/core.ts |
|||
var import_ext_gadget5 = require("ext.gadget.Toastify"); |
|||
var editConflict = /* @__PURE__ */ function() { |
|||
var _ref3 = _asyncToGenerator(function* () { |
|||
let isContinue = true; |
|||
void (0, import_ext_gadget4.getBody)().then(($body) => { |
|||
$body.find('input[name="wpSave"]').on("click", () => { |
|||
isContinue = false; |
|||
}); |
|||
}); |
|||
const checkEditConflict = /* @__PURE__ */ function() { |
|||
var _ref4 = _asyncToGenerator(function* () { |
|||
const { |
|||
wgCurRevisionId: wgCurRevisionId2, |
|||
wgPageName |
|||
} = mw.config.get(); |
|||
const pageRevisionId = yield getCurrentRevisionId(wgPageName); |
|||
if (!pageRevisionId) { |
|||
isContinue = false; |
|||
} else if (pageRevisionId > wgCurRevisionId2) { |
|||
isContinue = false; |
|||
(0, import_ext_gadget5.toastify)({ |
|||
node: NoticeMessage(), |
|||
close: true, |
|||
duration: -1 |
|||
}, "info"); |
|||
} |
} |
||
} |
}); |
||
return function checkEditConflict2() { |
|||
key: "add_one", |
|||
return _ref4.apply(this, arguments); |
|||
}; |
|||
if (typeof item === "string" && this.languages.indexOf(item) === -1) { |
|||
this.languages.push(item); |
|||
} else if (_typeof(item) === "object" && item !== null && item.constructor === Language_proximity_group && this.sub_groups.indexOf(item) === -1) { |
|||
item.parent = this, this.sub_groups.push(item); |
|||
} else { |
|||
throw new TypeError("cannot add this item ".concat(_typeof(item), ". add only language code and proximity groups.")); |
|||
} |
|||
return this; |
|||
} |
|||
}, { |
|||
key: "add", |
|||
value: function add() { |
|||
for (var i = 0; i < arguments.length; i++) { |
|||
this.add_one(arguments[i]); |
|||
} |
|||
return this; |
|||
} |
|||
// return the group in which the language code resides. |
|||
}, { |
|||
key: "group_of", |
|||
value: function group_of(code_or_desc) { |
|||
if (this.languages.indexOf(code_or_desc) !== -1) { |
|||
// desired language is in this group |
|||
return this; |
|||
} else if (this.all().indexOf(code_or_desc) !== -1) { |
|||
// desired language is not in this group, but in a sub group of this group |
|||
for (var i = 0; i < this.sub_groups.length; i++) { |
|||
var search_result = this.sub_groups[i].group_of(code_or_desc); |
|||
if (search_result !== null) { |
|||
return search_result; |
|||
} |
|||
} |
|||
// search has finished but all subgroups returned null, which should not happen since the desired language is alleged to be in one of these sub groups, as per the opening condition of this if-else ladder. |
|||
console.log("reporting a [peculiarity], see line 90 of dependencies/accepted_languages.js. this line is never intended to be executed."); |
|||
return null; |
|||
} else if (this.desc === code_or_desc) { |
|||
// this is the desired group |
|||
return this; |
|||
} |
|||
// desired language is not in this group |
|||
return null; |
|||
} |
|||
}]); |
|||
return Language_proximity_group; |
|||
}(); |
}(); |
||
while (true) { |
|||
var group_north_am_eng = new Language_proximity_group("en_north_american").add("en_us", "en_ca"); |
|||
if (!isContinue) { |
|||
var group_australian_eng = new Language_proximity_group("en_au_nz").add("en_nz", "en_au"); |
|||
break; |
|||
var group_dominant_english = new Language_proximity_group("en_native").add("en_uk", group_north_am_eng, group_australian_eng); |
|||
var group_english = new Language_proximity_group("en").add(group_dominant_english, "en_sg", "en_hk"); |
|||
var group_european = new Language_proximity_group("european").add(group_english); |
|||
var group_zh_hans = new Language_proximity_group("zh_hans").add("zh_cn", "zh_sg", "zh_mo"); |
|||
var group_zh_hant = new Language_proximity_group("zh_hant").add("zh_hk", "zh_tw"); |
|||
var group_zh = new Language_proximity_group("zh").add(group_zh_hans, group_zh_hant); |
|||
var group_asian = new Language_proximity_group("asian").add(group_zh); |
|||
var group_world = new Language_proximity_group("world").add(group_asian, group_european); |
|||
var accepted_languages = function accepted_languages(raw_lang_code) { |
|||
var all_acceptable_codes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; |
|||
var processed_lang_code = String(raw_lang_code).toLowerCase().replace(/[^a-z]/g, "").slice(0, 4); |
|||
var processed_lang_code_short = processed_lang_code.slice(0, 2); |
|||
var best_match; |
|||
if (raw_lang_code in accepted_languages_dict) { |
|||
best_match = accepted_languages_dict[raw_lang_code]; |
|||
} else if (processed_lang_code in accepted_languages_dict) { |
|||
best_match = accepted_languages_dict[processed_lang_code]; |
|||
} else if (processed_lang_code_short in accepted_languages_dict) { |
|||
best_match = accepted_languages_dict[processed_lang_code_short]; |
|||
} else { |
|||
best_match = null; |
|||
} |
} |
||
yield checkEditConflict(); |
|||
if (all_acceptable_codes === null || _typeof(all_acceptable_codes) !== "object" || |
|||
if (!isContinue) { |
|||
// eslint-disable-next-line no-unsafe-negation |
|||
break; |
|||
!all_acceptable_codes instanceof Array || all_acceptable_codes.length === 0 || all_acceptable_codes.indexOf(best_match) !== -1) { |
|||
return best_match; |
|||
} |
} |
||
yield (0, import_ext_gadget4.delay)(3 * 1e3); |
|||
var current_group = group_world.group_of(best_match); |
|||
if (current_group === null) { |
|||
return all_acceptable_codes[0]; |
|||
} |
|||
// this was originally a while(true) loop, but i changed it into a for loop that will force quit if it runs more than a specified length, |
|||
// just as a fail safe in case the current_group.parent somehow referred to itself. |
|||
for (var i = 0; i < PREVENT_INFINITE_LOOP; i++) { |
|||
var close_match_group = current_group.all(); |
|||
for (var _i4 = 0; _i4 < close_match_group.length; _i4++) { |
|||
if (all_acceptable_codes.indexOf(close_match_group[_i4]) !== -1) { |
|||
return close_match_group[_i4]; |
|||
} |
|||
} |
|||
if (current_group.parent) { |
|||
current_group = current_group.parent; |
|||
} else { |
|||
return all_acceptable_codes[0]; |
|||
} |
|||
} |
|||
console.log("[warning][peculiarity] produced at accepted_languages.js:175, forced jump out of a suspected 1k loop that should not happen. This indicates that a faulty language proximity group has one/multiple parent pointer(s) that formed a circle."); |
|||
return all_acceptable_codes[0]; |
|||
}; |
|||
return accepted_languages; |
|||
}(); |
|||
var ui_notify = function ui_notify() { |
|||
ding(lang.notice[lang_code], "info", "long"); |
|||
}; |
|||
var expose = function () { |
|||
var glb = { |
|||
url: mw.config.values.wgServer, |
|||
p: mw.config.values.wgPageName, |
|||
un: mw.config.values.wgUserName, |
|||
u: "User:".concat(mw.config.values.wgUserName), |
|||
ut: "User_talk:".concat(mw.config.values.wgUserName), |
|||
t: null |
|||
}; |
|||
glb.a = "".concat(glb.url).concat(mw.config.get("wgScriptPath"), "/api.php"); |
|||
var eur = encodeURIComponent; |
|||
var asyncPost = function asyncPost(url, body, cb) { |
|||
var z1 = "Content-Type"; |
|||
var z2 = "application/x-www-form-urlencoded"; |
|||
var a = new XMLHttpRequest(); |
|||
a.onreadystatechange = cb; |
|||
a.open("POST", url, true); |
|||
a.setRequestHeader(z1, z2); |
|||
a.send(body); |
|||
}; |
|||
var getPage = function getPage(a, cb) { |
|||
var z = "action=query&prop=revisions&rvprop=ids|flags|timestamp|user|userid|size&format=json&titles="; |
|||
asyncPost(glb.a, z + eur(a), cb); |
|||
}; |
|||
var pickPageRevid = function pickPageRevid(a) { |
|||
var focus = "revid"; |
|||
if (typeof a === "string") { |
|||
var b = JSON.parse(a); |
|||
if (_typeof(b) === "object") { |
|||
for (var x in b.query.pages) { |
|||
var c = b.query.pages[x]; |
|||
return c.revisions[0][focus]; |
|||
} |
|||
} else { |
|||
return false; |
|||
} |
|||
// from now on pick functions will only work with string inputs. DO NOT parse pages before passing them into pick functions. |
|||
} else { |
|||
return false; |
|||
} |
|||
}; |
|||
var tellPageExist = function tellPageExist(a) { |
|||
try { |
|||
a = JSON.parse(a); |
|||
} catch (e) { |
|||
return false; |
|||
} |
|||
if (_typeof(a) !== "object") { |
|||
return false; |
|||
} |
|||
if (!("query" in a)) { |
|||
return false; |
|||
} |
|||
if (!("pages" in a.query)) { |
|||
return false; |
|||
} |
|||
if (-1 in a.query.pages) { |
|||
return false; |
|||
} |
|||
return true; |
|||
}; |
|||
var check_page_revid = function check_page_revid(title) { |
|||
// eslint-disable-next-line compat/compat, no-unused-vars |
|||
return new Promise(function (r, _s) { |
|||
getPage(title, function () { |
|||
if (this.readyState !== 4) { |
|||
return; |
|||
} |
|||
if (tellPageExist(this.responseText)) { |
|||
r(pickPageRevid(this.responseText)); |
|||
} else { |
|||
r(null); |
|||
} |
|||
}); |
|||
}); |
|||
}; |
|||
return check_page_revid; |
|||
}(); |
|||
// end of libs |
|||
var raw_lang_code = mw.config.get("wgUserLanguage") || navigator.language; |
|||
lang_code = acc_lang(raw_lang_code, ["en_us", "zh_cn", "zh_hk"]); |
|||
var main_loop = function main_loop() { |
|||
if (done) { |
|||
return; |
|||
} |
} |
||
}); |
|||
expose(mw.config.values.wgPageName || w.wgPageName).then(function (a) { |
|||
return function editConflict2() { |
|||
if (a === null) { |
|||
return _ref3.apply(this, arguments); |
|||
// the page does not exist. stop polling. |
|||
done = true; |
|||
clearInterval(interval_id); |
|||
} else if (a > current_revid) { |
|||
ui_notify(); |
|||
done = true; |
|||
if (interval_id !== null) { |
|||
clearInterval(interval_id); |
|||
} |
|||
} else { |
|||
return 0; |
|||
} |
|||
}); |
|||
}; |
}; |
||
}(); |
|||
interval_id = setInterval(main_loop, 2000); |
|||
//! src/EditConflict/EditConflict.ts |
|||
try { |
|||
var { |
|||
document.getElementById("wpSave").addEventListener("click", function () { |
|||
wgAction, |
|||
done = true; |
|||
wgCurRevisionId |
|||
clearInterval(interval_id); |
|||
} = mw.config.get(); |
|||
}); |
|||
if (["edit", "submit"].includes(wgAction) && wgCurRevisionId) { |
|||
} catch (e) {} |
|||
void editConflict(); |
|||
})(window); |
|||
} |
|||
})(); |
|||
/* </nowiki> */ |
|||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL0VkaXRDb25mbGljdC9tb2R1bGVzL2NvcmUudHMiLCAic3JjL0VkaXRDb25mbGljdC9tb2R1bGVzL25vdGljZU1lc3NhZ2UudHN4IiwgInNyYy9FZGl0Q29uZmxpY3QvbW9kdWxlcy9pMThuLnRzIiwgInNyYy9FZGl0Q29uZmxpY3Qvb3B0aW9ucy5qc29uIiwgInNyYy9FZGl0Q29uZmxpY3QvbW9kdWxlcy9hcGkudHMiLCAic3JjL0VkaXRDb25mbGljdC9tb2R1bGVzL3V0aWwvcXVlcnlQYWdlSW5mby50cyIsICJzcmMvRWRpdENvbmZsaWN0L21vZHVsZXMvZ2V0Q3VycmVudFJldmlzaW9uSWQudHMiLCAic3JjL0VkaXRDb25mbGljdC9FZGl0Q29uZmxpY3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7ZGVsYXksIGdldEJvZHl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5pbXBvcnQge05vdGljZU1lc3NhZ2V9IGZyb20gJy4vbm90aWNlTWVzc2FnZSc7XG5pbXBvcnQge2dldEN1cnJlbnRSZXZpc2lvbklkfSBmcm9tICcuL2dldEN1cnJlbnRSZXZpc2lvbklkJztcbmltcG9ydCB7dG9hc3RpZnl9IGZyb20gJ2V4dC5nYWRnZXQuVG9hc3RpZnknO1xuXG5jb25zdCBlZGl0Q29uZmxpY3QgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdGxldCBpc0NvbnRpbnVlOiBib29sZWFuID0gdHJ1ZTtcblxuXHR2b2lkIGdldEJvZHkoKS50aGVuKCgkYm9keTogSlF1ZXJ5PEhUTUxCb2R5RWxlbWVudD4pOiB2b2lkID0+IHtcblx0XHQkYm9keS5maW5kKCdpbnB1dFtuYW1lPVwid3BTYXZlXCJdJykub24oJ2NsaWNrJywgKCk6IHZvaWQgPT4ge1xuXHRcdFx0aXNDb250aW51ZSA9IGZhbHNlO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRjb25zdCBjaGVja0VkaXRDb25mbGljdCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRjb25zdCB7d2dDdXJSZXZpc2lvbklkLCB3Z1BhZ2VOYW1lfSA9IG13LmNvbmZpZy5nZXQoKTtcblx0XHRjb25zdCBwYWdlUmV2aXNpb25JZDogbnVtYmVyID0gYXdhaXQgZ2V0Q3VycmVudFJldmlzaW9uSWQod2dQYWdlTmFtZSk7XG5cdFx0aWYgKCFwYWdlUmV2aXNpb25JZCkge1xuXHRcdFx0aXNDb250aW51ZSA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAocGFnZVJldmlzaW9uSWQgPiB3Z0N1clJldmlzaW9uSWQpIHtcblx0XHRcdGlzQ29udGludWUgPSBmYWxzZTtcblx0XHRcdHRvYXN0aWZ5KFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bm9kZTogTm90aWNlTWVzc2FnZSgpLFxuXHRcdFx0XHRcdGNsb3NlOiB0cnVlLFxuXHRcdFx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHRcdFx0fSxcblx0XHRcdFx0J2luZm8nXG5cdFx0XHQpO1xuXHRcdH1cblx0fTtcblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdC8vIElmICFpc0NvbnRpbnVlIHRyaWdnZXJlZCAoYnkgb25DbGljaykgdGhlbiBicmVha1xuXHRcdGlmICghaXNDb250aW51ZSkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0YXdhaXQgY2hlY2tFZGl0Q29uZmxpY3QoKTtcblxuXHRcdC8vIElmICFpc0NvbnRpbnVlIHRyaWdnZXJlZCAoYnkgY2hlY2tFZGl0Q29uZmxpY3QpIHRoZW4gYnJlYWtcblx0XHRpZiAoIWlzQ29udGludWUpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGF3YWl0IGRlbGF5KDMgKiAxMDAwKTtcblx0fVxufTtcblxuZXhwb3J0IHtlZGl0Q29uZmxpY3R9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tICdleHQuZ2FkZ2V0LlJlYWN0JztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi9pMThuJztcblxuY29uc3QgbG9jYXRpb25SZWxvYWQgPSAoKSA9PiB7XG5cdGxvY2F0aW9uLnJlbG9hZCgpO1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBOb3RpY2VNZXNzYWdlID0gKCkgPT4gKFxuXHQ8c3Bhbj5cblx0XHR7Z2V0TWVzc2FnZSgnTm90aWNlJyl9XG5cdFx0PGEgb25DbGljaz17bG9jYXRpb25SZWxvYWR9PntnZXRNZXNzYWdlKCdSZWZyZXNoJyl9PC9hPlxuXHQ8L3NwYW4+XG4pO1xuXG5leHBvcnQge05vdGljZU1lc3NhZ2V9O1xuIiwgImltcG9ydCB7bG9jYWxpemV9IGZyb20gJ2V4dC5nYWRnZXQuaTE4bic7XG5cbmNvbnN0IGdldEkxOG5NZXNzYWdlcyA9ICgpID0+IHtcblx0cmV0dXJuIHtcblx0XHROb3RpY2U6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVGhpcyBwYWdlIGhhcyBiZWVuIGNoYW5nZWQgYnkgc29tZW9uZSBlbHNlIGFmdGVyIHlvdSBzdGFydGVkIGVkaXRpbmcuIENvcHkgeW91ciBjaGFuZ2VzLCByZWZyZXNoIGFuZCBzdGFydCBvdmVyIHRvIGF2b2lkIGVkaXQgY29uZmxpY3RzLicsXG5cdFx0XHRqYTogJ+OBk+OBruODmuODvOOCuOOBr+S7luOBruS6uuOBq+OCiOOBo+OBpuWkieabtOOBleOCjOOBpuOBhOOBvuOBmeOAgue3qOmbhuihneeqgeOCkumBv+OBkeOCi+OBn+OCgeOAgee3qOmbhuWGheWuueOCkuOCs+ODlOODvOOBl+OBpuODmuODvOOCuOOCkuWGjeiqreOBv+i+vOOBv+OBl+OAgee3qOmbhuOCkue2muOBkeOBpuOBj+OBoOOBleOBhOOAgicsXG5cdFx0XHQnemgtaGFucyc6ICfmraTpobXpnaLlt7Looqvku5bkurrmm7TmlLnjgILor7flpI3liLbmgqjnmoTnvJbovpHvvIznhLblkI7liLfmlrDpobXpnaLvvIzph43mlrDlvIDlp4vnvJbovpHvvIzku6Xpgb/lhY3nvJbovpHlhrLnqoHjgIInLFxuXHRcdFx0J3poLWhhbnQnOiAn5pys6aCB5bey6KKr5LuW5Lq65pu05pS544CC6KuL5bCH5oKo55qE57eo6Lyv6KSH6KO977yM5Lim6YeN5paw6LyJ5YWl6aCB6Z2i77yM54S25b6M57m857qM57eo6Lyv77yM5L6G6YG/5YWN57eo6Lyv6KGd56qB44CCJyxcblx0XHR9KSxcblx0XHRSZWZyZXNoOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1JlZnJlc2gnLFxuXHRcdFx0amE6ICflho3oqq3jgb/ovrzjgb8nLFxuXHRcdFx0J3poLWhhbnMnOiAn5Yi35paw6aG16Z2iJyxcblx0XHRcdCd6aC1oYW50JzogJ+mHjeaWsOi8ieWFpScsXG5cdFx0fSksXG5cdH07XG59O1xuXG5jb25zdCBpMThuTWVzc2FnZXMgPSBnZXRJMThuTWVzc2FnZXMoKTtcblxuY29uc3QgZ2V0TWVzc2FnZTogR2V0TWVzc2FnZXM8dHlwZW9mIGkxOG5NZXNzYWdlcz4gPSAoa2V5KSA9PiB7XG5cdHJldHVybiBpMThuTWVzc2FnZXNba2V5XSB8fCBrZXk7XG59O1xuXG5leHBvcnQge2dldE1lc3NhZ2V9O1xuIiwgIntcblx0XCJ2ZXJzaW9uXCI6IFwiMi4wXCJcbn1cbiIsICJpbXBvcnQgKiBhcyBPUFRJT05TIGZyb20gJy4uL29wdGlvbnMuanNvbic7XG5pbXBvcnQge2luaXRNd0FwaX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxuY29uc3QgYXBpOiBtdy5BcGkgPSBpbml0TXdBcGkoYEVkaXRDb25mbGljdC8ke09QVElPTlMudmVyc2lvbn1gKTtcblxuZXhwb3J0IHthcGl9O1xuIiwgImltcG9ydCB7YXBpfSBmcm9tICcuLi9hcGknO1xuXG5pbnRlcmZhY2UgUGFnZUluZm8ge1xuXHRxdWVyeT86IHtcblx0XHRwYWdlczogQXJyYXk8e1xuXHRcdFx0bWlzc2luZz86IGJvb2xlYW47XG5cdFx0XHRyZXZpc2lvbnM6IEFycmF5PHtcblx0XHRcdFx0cmV2aWQ6IG51bWJlcjtcblx0XHRcdH0+O1xuXHRcdH0+O1xuXHR9O1xufVxuXG5jb25zdCBwYXJhbWV0ZXJzOiBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcyA9IHtcblx0YWN0aW9uOiAncXVlcnknLFxuXHRmb3JtYXQ6ICdqc29uJyxcblx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRwcm9wOiAncmV2aXNpb25zJyxcblx0cnZwcm9wOiAnaWRzJyxcbn07XG5cbmNvbnN0IHF1ZXJ5UGFnZUluZm8gPSBhc3luYyAodGl0bGU6IHN0cmluZyk6IFByb21pc2U8UGFnZUluZm8+ID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gKGF3YWl0IGFwaS5wb3N0KHtcblx0XHRcdC4uLnBhcmFtZXRlcnMsXG5cdFx0XHR0aXRsZXM6IHRpdGxlLFxuXHRcdH0gYXMgdHlwZW9mIHBhcmFtZXRlcnMpKSBhcyBQYWdlSW5mbztcblx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRjb25zb2xlLmVycm9yKCdbRWRpdENvbmZsaWN0XSBBamF4IGVycm9yOicsIGVycm9yKTtcblx0XHRyZXR1cm4ge307XG5cdH1cbn07XG5cbmV4cG9ydCB7cXVlcnlQYWdlSW5mb307XG4iLCAiaW1wb3J0IHtxdWVyeVBhZ2VJbmZvfSBmcm9tICcuL3V0aWwvcXVlcnlQYWdlSW5mbyc7XG5cbmNvbnN0IGdldEN1cnJlbnRSZXZpc2lvbklkID0gYXN5bmMgKHRpdGxlOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuXHRjb25zdCBwYWdlSW5mbzogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBxdWVyeVBhZ2VJbmZvPj4gPSBhd2FpdCBxdWVyeVBhZ2VJbmZvKHRpdGxlKTtcblxuXHRjb25zdCB7cXVlcnl9ID0gcGFnZUluZm87XG5cdGlmICghcXVlcnkpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IFtwYWdlXSA9IHF1ZXJ5LnBhZ2VzO1xuXHRpZiAoIXBhZ2UgfHwgcGFnZS5taXNzaW5nKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRyZXR1cm4gcGFnZS5yZXZpc2lvbnNbMF0hLnJldmlkO1xufTtcblxuZXhwb3J0IHtnZXRDdXJyZW50UmV2aXNpb25JZH07XG4iLCAiaW1wb3J0IHtlZGl0Q29uZmxpY3R9IGZyb20gJy4vbW9kdWxlcy9jb3JlJztcblxuY29uc3Qge3dnQWN0aW9uLCB3Z0N1clJldmlzaW9uSWR9ID0gbXcuY29uZmlnLmdldCgpO1xuXG5pZiAoWydlZGl0JywgJ3N1Ym1pdCddLmluY2x1ZGVzKHdnQWN0aW9uKSAmJiB3Z0N1clJldmlzaW9uSWQpIHtcblx0dm9pZCBlZGl0Q29uZmxpY3QoKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLHFCQUE2QkMsUUFBQSxpQkFBQTs7QUNBN0IsSUFBQUMscUJBQWtCQyxRQUFBRixRQUFBLGtCQUFBLEdBQUEsQ0FBQTs7QUNBbEIsSUFBQUcsb0JBQXVCSCxRQUFBLGlCQUFBO0FBRXZCLElBQU1JLGtCQUFrQkEsTUFBTTtBQUM3QixTQUFPO0lBQ05DLFNBQUEsR0FBUUYsa0JBQUFHLFVBQVM7TUFDaEJDLElBQUk7TUFDSkMsSUFBSTtNQUNKLFdBQVc7TUFDWCxXQUFXO0lBQ1osQ0FBQztJQUNEQyxVQUFBLEdBQVNOLGtCQUFBRyxVQUFTO01BQ2pCQyxJQUFJO01BQ0pDLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztJQUNaLENBQUM7RUFDRjtBQUNEO0FBRUEsSUFBTUUsZUFBZU4sZ0JBQWdCO0FBRXJDLElBQU1PLGFBQWdEQyxTQUFRO0FBQzdELFNBQU9GLGFBQWFFLEdBQUcsS0FBS0E7QUFDN0I7O0FEcEJBLElBQU1DLGlCQUFpQkEsTUFBTTtBQUM1QkMsV0FBU0MsT0FBTztBQUNoQixTQUFPO0FBQ1I7QUFFQSxJQUFNQyxnQkFBZ0JBLE1BQ3JCZixtQ0FBQWdCLFFBQUFDLGNBQUMsUUFBQSxNQUNDUCxXQUFXLFFBQVEsR0FDcEJWLG1DQUFBZ0IsUUFBQUMsY0FBQyxLQUFBO0VBQUVDLFNBQVNOO0FB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QyxRQUFRLFFBQVEsRUFBRVEsU0FBU0QsUUFBUSxLQUFLWixpQkFBaUI7QUFDN0QsT0FBS1YsYUFBYTtBQUNuQjsiLAogICJuYW1lcyI6IFsiaW1wb3J0X2V4dF9nYWRnZXQ0IiwgInJlcXVpcmUiLCAiaW1wb3J0X2V4dF9nYWRnZXQyIiwgIl9fdG9FU00iLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAiZ2V0STE4bk1lc3NhZ2VzIiwgIk5vdGljZSIsICJsb2NhbGl6ZSIsICJlbiIsICJqYSIsICJSZWZyZXNoIiwgImkxOG5NZXNzYWdlcyIsICJnZXRNZXNzYWdlIiwgImtleSIsICJsb2NhdGlvblJlbG9hZCIsICJsb2NhdGlvbiIsICJyZWxvYWQiLCAiTm90aWNlTWVzc2FnZSIsICJkZWZhdWx0IiwgImNyZWF0ZUVsZW1lbnQiLCAib25DbGljayIsICJ2ZXJzaW9uIiwgImltcG9ydF9leHRfZ2FkZ2V0MyIsICJhcGkiLCAiaW5pdE13QXBpIiwgImNvbmNhdCIsICJwYXJhbWV0ZXJzIiwgImFjdGlvbiIsICJmb3JtYXQiLCAiZm9ybWF0dmVyc2lvbiIsICJwcm9wIiwgInJ2cHJvcCIsICJxdWVyeVBhZ2VJbmZvIiwgIl9yZWYiLCAiX2FzeW5jVG9HZW5lcmF0b3IiLCAidGl0bGUiLCAicG9zdCIsICJ0aXRsZXMiLCAiZXJyb3IiLCAiY29uc29sZSIsICJfeCIsICJhcHBseSIsICJhcmd1bWVudHMiLCAiZ2V0Q3VycmVudFJldmlzaW9uSWQiLCAiX3JlZjIiLCAicGFnZUluZm8iLCAicXVlcnkiLCAicGFnZSIsICJwYWdlcyIsICJtaXNzaW5nIiwgInJldmlzaW9ucyIsICJyZXZpZCIsICJfeDIiLCAiaW1wb3J0X2V4dF9nYWRnZXQ1IiwgImVkaXRDb25mbGljdCIsICJfcmVmMyIsICJpc0NvbnRpbnVlIiwgImdldEJvZHkiLCAidGhlbiIsICIkYm9keSIsICJmaW5kIiwgIm9uIiwgImNoZWNrRWRpdENvbmZsaWN0IiwgIl9yZWY0IiwgIndnQ3VyUmV2aXNpb25JZCIsICJ3Z0N1clJldmlzaW9uSWQyIiwgIndnUGFnZU5hbWUiLCAibXciLCAiY29uZmlnIiwgImdldCIsICJwYWdlUmV2aXNpb25JZCIsICJ0b2FzdGlmeSIsICJub2RlIiwgImNsb3NlIiwgImR1cmF0aW9uIiwgImRlbGF5IiwgIndnQWN0aW9uIiwgImluY2x1ZGVzIl0KfQo= |
2024年5月31日 (五) 15:56的最新版本
/**
* SPDX-License-Identifier: GPL-3.0-or-later
* _addText: '{{Gadget Header|license=GPL-3.0-or-later}}'
*
* @source {@link https://github.com/TopRealm/YsArchives-Gadgets/tree/master/src/EditConflict}
* @author 安忆 <i@anyi.in>
* @license GPL-3.0-or-later {@link https://youshou.wiki/wiki/H:GPLV3}
*/
/**
* +------------------------------------------------------------+
* | === 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/EditConflict/EditConflict.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 __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
));
//! src/EditConflict/modules/core.ts
var import_ext_gadget4 = require("ext.gadget.Util");
//! src/EditConflict/modules/noticeMessage.tsx
var import_ext_gadget2 = __toESM(require("ext.gadget.React"), 1);
//! src/EditConflict/modules/i18n.ts
var import_ext_gadget = require("ext.gadget.i18n");
var getI18nMessages = () => {
return {
Notice: (0, import_ext_gadget.localize)({
en: "This page has been changed by someone else after you started editing. Copy your changes, refresh and start over to avoid edit conflicts.",
ja: "このページは他の人によって変更されています。編集衝突を避けるため、編集内容をコピーしてページを再読み込みし、編集を続けてください。",
"zh-hans": "此页面已被他人更改。请复制您的编辑,然后刷新页面,重新开始编辑,以避免编辑冲突。",
"zh-hant": "本頁已被他人更改。請將您的編輯複製,並重新載入頁面,然後繼續編輯,來避免編輯衝突。"
}),
Refresh: (0, import_ext_gadget.localize)({
en: "Refresh",
ja: "再読み込み",
"zh-hans": "刷新页面",
"zh-hant": "重新載入"
})
};
};
var i18nMessages = getI18nMessages();
var getMessage = (key) => {
return i18nMessages[key] || key;
};
//! src/EditConflict/modules/noticeMessage.tsx
var locationReload = () => {
location.reload();
return false;
};
var NoticeMessage = () => /* @__PURE__ */ import_ext_gadget2.default.createElement("span", null, getMessage("Notice"), /* @__PURE__ */ import_ext_gadget2.default.createElement("a", {
onClick: locationReload
}, getMessage("Refresh")));
//! src/EditConflict/options.json
var version = "2.0";
//! src/EditConflict/modules/api.ts
var import_ext_gadget3 = require("ext.gadget.Util");
var api = (0, import_ext_gadget3.initMwApi)("EditConflict/".concat(version));
//! src/EditConflict/modules/util/queryPageInfo.ts
var parameters = {
action: "query",
format: "json",
formatversion: "2",
prop: "revisions",
rvprop: "ids"
};
var queryPageInfo = /* @__PURE__ */ function() {
var _ref = _asyncToGenerator(function* (title) {
try {
return yield api.post({
...parameters,
titles: title
});
} catch (error) {
console.error("[EditConflict] Ajax error:", error);
return {};
}
});
return function queryPageInfo2(_x) {
return _ref.apply(this, arguments);
};
}();
//! src/EditConflict/modules/getCurrentRevisionId.ts
var getCurrentRevisionId = /* @__PURE__ */ function() {
var _ref2 = _asyncToGenerator(function* (title) {
const pageInfo = yield queryPageInfo(title);
const {
query
} = pageInfo;
if (!query) {
return 0;
}
const [page] = query.pages;
if (!page || page.missing) {
return 0;
}
return page.revisions[0].revid;
});
return function getCurrentRevisionId2(_x2) {
return _ref2.apply(this, arguments);
};
}();
//! src/EditConflict/modules/core.ts
var import_ext_gadget5 = require("ext.gadget.Toastify");
var editConflict = /* @__PURE__ */ function() {
var _ref3 = _asyncToGenerator(function* () {
let isContinue = true;
void (0, import_ext_gadget4.getBody)().then(($body) => {
$body.find('input[name="wpSave"]').on("click", () => {
isContinue = false;
});
});
const checkEditConflict = /* @__PURE__ */ function() {
var _ref4 = _asyncToGenerator(function* () {
const {
wgCurRevisionId: wgCurRevisionId2,
wgPageName
} = mw.config.get();
const pageRevisionId = yield getCurrentRevisionId(wgPageName);
if (!pageRevisionId) {
isContinue = false;
} else if (pageRevisionId > wgCurRevisionId2) {
isContinue = false;
(0, import_ext_gadget5.toastify)({
node: NoticeMessage(),
close: true,
duration: -1
}, "info");
}
});
return function checkEditConflict2() {
return _ref4.apply(this, arguments);
};
}();
while (true) {
if (!isContinue) {
break;
}
yield checkEditConflict();
if (!isContinue) {
break;
}
yield (0, import_ext_gadget4.delay)(3 * 1e3);
}
});
return function editConflict2() {
return _ref3.apply(this, arguments);
};
}();
//! src/EditConflict/EditConflict.ts
var {
wgAction,
wgCurRevisionId
} = mw.config.get();
if (["edit", "submit"].includes(wgAction) && wgCurRevisionId) {
void editConflict();
}
})();
/* </nowiki> */
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL0VkaXRDb25mbGljdC9tb2R1bGVzL2NvcmUudHMiLCAic3JjL0VkaXRDb25mbGljdC9tb2R1bGVzL25vdGljZU1lc3NhZ2UudHN4IiwgInNyYy9FZGl0Q29uZmxpY3QvbW9kdWxlcy9pMThuLnRzIiwgInNyYy9FZGl0Q29uZmxpY3Qvb3B0aW9ucy5qc29uIiwgInNyYy9FZGl0Q29uZmxpY3QvbW9kdWxlcy9hcGkudHMiLCAic3JjL0VkaXRDb25mbGljdC9tb2R1bGVzL3V0aWwvcXVlcnlQYWdlSW5mby50cyIsICJzcmMvRWRpdENvbmZsaWN0L21vZHVsZXMvZ2V0Q3VycmVudFJldmlzaW9uSWQudHMiLCAic3JjL0VkaXRDb25mbGljdC9FZGl0Q29uZmxpY3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7ZGVsYXksIGdldEJvZHl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5pbXBvcnQge05vdGljZU1lc3NhZ2V9IGZyb20gJy4vbm90aWNlTWVzc2FnZSc7XG5pbXBvcnQge2dldEN1cnJlbnRSZXZpc2lvbklkfSBmcm9tICcuL2dldEN1cnJlbnRSZXZpc2lvbklkJztcbmltcG9ydCB7dG9hc3RpZnl9IGZyb20gJ2V4dC5nYWRnZXQuVG9hc3RpZnknO1xuXG5jb25zdCBlZGl0Q29uZmxpY3QgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdGxldCBpc0NvbnRpbnVlOiBib29sZWFuID0gdHJ1ZTtcblxuXHR2b2lkIGdldEJvZHkoKS50aGVuKCgkYm9keTogSlF1ZXJ5PEhUTUxCb2R5RWxlbWVudD4pOiB2b2lkID0+IHtcblx0XHQkYm9keS5maW5kKCdpbnB1dFtuYW1lPVwid3BTYXZlXCJdJykub24oJ2NsaWNrJywgKCk6IHZvaWQgPT4ge1xuXHRcdFx0aXNDb250aW51ZSA9IGZhbHNlO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRjb25zdCBjaGVja0VkaXRDb25mbGljdCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRjb25zdCB7d2dDdXJSZXZpc2lvbklkLCB3Z1BhZ2VOYW1lfSA9IG13LmNvbmZpZy5nZXQoKTtcblx0XHRjb25zdCBwYWdlUmV2aXNpb25JZDogbnVtYmVyID0gYXdhaXQgZ2V0Q3VycmVudFJldmlzaW9uSWQod2dQYWdlTmFtZSk7XG5cdFx0aWYgKCFwYWdlUmV2aXNpb25JZCkge1xuXHRcdFx0aXNDb250aW51ZSA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAocGFnZVJldmlzaW9uSWQgPiB3Z0N1clJldmlzaW9uSWQpIHtcblx0XHRcdGlzQ29udGludWUgPSBmYWxzZTtcblx0XHRcdHRvYXN0aWZ5KFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bm9kZTogTm90aWNlTWVzc2FnZSgpLFxuXHRcdFx0XHRcdGNsb3NlOiB0cnVlLFxuXHRcdFx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHRcdFx0fSxcblx0XHRcdFx0J2luZm8nXG5cdFx0XHQpO1xuXHRcdH1cblx0fTtcblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdC8vIElmICFpc0NvbnRpbnVlIHRyaWdnZXJlZCAoYnkgb25DbGljaykgdGhlbiBicmVha1xuXHRcdGlmICghaXNDb250aW51ZSkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0YXdhaXQgY2hlY2tFZGl0Q29uZmxpY3QoKTtcblxuXHRcdC8vIElmICFpc0NvbnRpbnVlIHRyaWdnZXJlZCAoYnkgY2hlY2tFZGl0Q29uZmxpY3QpIHRoZW4gYnJlYWtcblx0XHRpZiAoIWlzQ29udGludWUpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGF3YWl0IGRlbGF5KDMgKiAxMDAwKTtcblx0fVxufTtcblxuZXhwb3J0IHtlZGl0Q29uZmxpY3R9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tICdleHQuZ2FkZ2V0LlJlYWN0JztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi9pMThuJztcblxuY29uc3QgbG9jYXRpb25SZWxvYWQgPSAoKSA9PiB7XG5cdGxvY2F0aW9uLnJlbG9hZCgpO1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBOb3RpY2VNZXNzYWdlID0gKCkgPT4gKFxuXHQ8c3Bhbj5cblx0XHR7Z2V0TWVzc2FnZSgnTm90aWNlJyl9XG5cdFx0PGEgb25DbGljaz17bG9jYXRpb25SZWxvYWR9PntnZXRNZXNzYWdlKCdSZWZyZXNoJyl9PC9hPlxuXHQ8L3NwYW4+XG4pO1xuXG5leHBvcnQge05vdGljZU1lc3NhZ2V9O1xuIiwgImltcG9ydCB7bG9jYWxpemV9IGZyb20gJ2V4dC5nYWRnZXQuaTE4bic7XG5cbmNvbnN0IGdldEkxOG5NZXNzYWdlcyA9ICgpID0+IHtcblx0cmV0dXJuIHtcblx0XHROb3RpY2U6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVGhpcyBwYWdlIGhhcyBiZWVuIGNoYW5nZWQgYnkgc29tZW9uZSBlbHNlIGFmdGVyIHlvdSBzdGFydGVkIGVkaXRpbmcuIENvcHkgeW91ciBjaGFuZ2VzLCByZWZyZXNoIGFuZCBzdGFydCBvdmVyIHRvIGF2b2lkIGVkaXQgY29uZmxpY3RzLicsXG5cdFx0XHRqYTogJ+OBk+OBruODmuODvOOCuOOBr+S7luOBruS6uuOBq+OCiOOBo+OBpuWkieabtOOBleOCjOOBpuOBhOOBvuOBmeOAgue3qOmbhuihneeqgeOCkumBv+OBkeOCi+OBn+OCgeOAgee3qOmbhuWGheWuueOCkuOCs+ODlOODvOOBl+OBpuODmuODvOOCuOOCkuWGjeiqreOBv+i+vOOBv+OBl+OAgee3qOmbhuOCkue2muOBkeOBpuOBj+OBoOOBleOBhOOAgicsXG5cdFx0XHQnemgtaGFucyc6ICfmraTpobXpnaLlt7Looqvku5bkurrmm7TmlLnjgILor7flpI3liLbmgqjnmoTnvJbovpHvvIznhLblkI7liLfmlrDpobXpnaLvvIzph43mlrDlvIDlp4vnvJbovpHvvIzku6Xpgb/lhY3nvJbovpHlhrLnqoHjgIInLFxuXHRcdFx0J3poLWhhbnQnOiAn5pys6aCB5bey6KKr5LuW5Lq65pu05pS544CC6KuL5bCH5oKo55qE57eo6Lyv6KSH6KO977yM5Lim6YeN5paw6LyJ5YWl6aCB6Z2i77yM54S25b6M57m857qM57eo6Lyv77yM5L6G6YG/5YWN57eo6Lyv6KGd56qB44CCJyxcblx0XHR9KSxcblx0XHRSZWZyZXNoOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1JlZnJlc2gnLFxuXHRcdFx0amE6ICflho3oqq3jgb/ovrzjgb8nLFxuXHRcdFx0J3poLWhhbnMnOiAn5Yi35paw6aG16Z2iJyxcblx0XHRcdCd6aC1oYW50JzogJ+mHjeaWsOi8ieWFpScsXG5cdFx0fSksXG5cdH07XG59O1xuXG5jb25zdCBpMThuTWVzc2FnZXMgPSBnZXRJMThuTWVzc2FnZXMoKTtcblxuY29uc3QgZ2V0TWVzc2FnZTogR2V0TWVzc2FnZXM8dHlwZW9mIGkxOG5NZXNzYWdlcz4gPSAoa2V5KSA9PiB7XG5cdHJldHVybiBpMThuTWVzc2FnZXNba2V5XSB8fCBrZXk7XG59O1xuXG5leHBvcnQge2dldE1lc3NhZ2V9O1xuIiwgIntcblx0XCJ2ZXJzaW9uXCI6IFwiMi4wXCJcbn1cbiIsICJpbXBvcnQgKiBhcyBPUFRJT05TIGZyb20gJy4uL29wdGlvbnMuanNvbic7XG5pbXBvcnQge2luaXRNd0FwaX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxuY29uc3QgYXBpOiBtdy5BcGkgPSBpbml0TXdBcGkoYEVkaXRDb25mbGljdC8ke09QVElPTlMudmVyc2lvbn1gKTtcblxuZXhwb3J0IHthcGl9O1xuIiwgImltcG9ydCB7YXBpfSBmcm9tICcuLi9hcGknO1xuXG5pbnRlcmZhY2UgUGFnZUluZm8ge1xuXHRxdWVyeT86IHtcblx0XHRwYWdlczogQXJyYXk8e1xuXHRcdFx0bWlzc2luZz86IGJvb2xlYW47XG5cdFx0XHRyZXZpc2lvbnM6IEFycmF5PHtcblx0XHRcdFx0cmV2aWQ6IG51bWJlcjtcblx0XHRcdH0+O1xuXHRcdH0+O1xuXHR9O1xufVxuXG5jb25zdCBwYXJhbWV0ZXJzOiBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcyA9IHtcblx0YWN0aW9uOiAncXVlcnknLFxuXHRmb3JtYXQ6ICdqc29uJyxcblx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRwcm9wOiAncmV2aXNpb25zJyxcblx0cnZwcm9wOiAnaWRzJyxcbn07XG5cbmNvbnN0IHF1ZXJ5UGFnZUluZm8gPSBhc3luYyAodGl0bGU6IHN0cmluZyk6IFByb21pc2U8UGFnZUluZm8+ID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gKGF3YWl0IGFwaS5wb3N0KHtcblx0XHRcdC4uLnBhcmFtZXRlcnMsXG5cdFx0XHR0aXRsZXM6IHRpdGxlLFxuXHRcdH0gYXMgdHlwZW9mIHBhcmFtZXRlcnMpKSBhcyBQYWdlSW5mbztcblx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRjb25zb2xlLmVycm9yKCdbRWRpdENvbmZsaWN0XSBBamF4IGVycm9yOicsIGVycm9yKTtcblx0XHRyZXR1cm4ge307XG5cdH1cbn07XG5cbmV4cG9ydCB7cXVlcnlQYWdlSW5mb307XG4iLCAiaW1wb3J0IHtxdWVyeVBhZ2VJbmZvfSBmcm9tICcuL3V0aWwvcXVlcnlQYWdlSW5mbyc7XG5cbmNvbnN0IGdldEN1cnJlbnRSZXZpc2lvbklkID0gYXN5bmMgKHRpdGxlOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuXHRjb25zdCBwYWdlSW5mbzogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBxdWVyeVBhZ2VJbmZvPj4gPSBhd2FpdCBxdWVyeVBhZ2VJbmZvKHRpdGxlKTtcblxuXHRjb25zdCB7cXVlcnl9ID0gcGFnZUluZm87XG5cdGlmICghcXVlcnkpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IFtwYWdlXSA9IHF1ZXJ5LnBhZ2VzO1xuXHRpZiAoIXBhZ2UgfHwgcGFnZS5taXNzaW5nKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRyZXR1cm4gcGFnZS5yZXZpc2lvbnNbMF0hLnJldmlkO1xufTtcblxuZXhwb3J0IHtnZXRDdXJyZW50UmV2aXNpb25JZH07XG4iLCAiaW1wb3J0IHtlZGl0Q29uZmxpY3R9IGZyb20gJy4vbW9kdWxlcy9jb3JlJztcblxuY29uc3Qge3dnQWN0aW9uLCB3Z0N1clJldmlzaW9uSWR9ID0gbXcuY29uZmlnLmdldCgpO1xuXG5pZiAoWydlZGl0JywgJ3N1Ym1pdCddLmluY2x1ZGVzKHdnQWN0aW9uKSAmJiB3Z0N1clJldmlzaW9uSWQpIHtcblx0dm9pZCBlZGl0Q29uZmxpY3QoKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLHFCQUE2QkMsUUFBQSxpQkFBQTs7QUNBN0IsSUFBQUMscUJBQWtCQyxRQUFBRixRQUFBLGtCQUFBLEdBQUEsQ0FBQTs7QUNBbEIsSUFBQUcsb0JBQXVCSCxRQUFBLGlCQUFBO0FBRXZCLElBQU1JLGtCQUFrQkEsTUFBTTtBQUM3QixTQUFPO0lBQ05DLFNBQUEsR0FBUUYsa0JBQUFHLFVBQVM7TUFDaEJDLElBQUk7TUFDSkMsSUFBSTtNQUNKLFdBQVc7TUFDWCxXQUFXO0lBQ1osQ0FBQztJQUNEQyxVQUFBLEdBQVNOLGtCQUFBRyxVQUFTO01BQ2pCQyxJQUFJO01BQ0pDLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztJQUNaLENBQUM7RUFDRjtBQUNEO0FBRUEsSUFBTUUsZUFBZU4sZ0JBQWdCO0FBRXJDLElBQU1PLGFBQWdEQyxTQUFRO0FBQzdELFNBQU9GLGFBQWFFLEdBQUcsS0FBS0E7QUFDN0I7O0FEcEJBLElBQU1DLGlCQUFpQkEsTUFBTTtBQUM1QkMsV0FBU0MsT0FBTztBQUNoQixTQUFPO0FBQ1I7QUFFQSxJQUFNQyxnQkFBZ0JBLE1BQ3JCZixtQ0FBQWdCLFFBQUFDLGNBQUMsUUFBQSxNQUNDUCxXQUFXLFFBQVEsR0FDcEJWLG1DQUFBZ0IsUUFBQUMsY0FBQyxLQUFBO0VBQUVDLFNBQVNOO0FB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QyxRQUFRLFFBQVEsRUFBRVEsU0FBU0QsUUFBUSxLQUFLWixpQkFBaUI7QUFDN0QsT0FBS1YsYUFBYTtBQUNuQjsiLAogICJuYW1lcyI6IFsiaW1wb3J0X2V4dF9nYWRnZXQ0IiwgInJlcXVpcmUiLCAiaW1wb3J0X2V4dF9nYWRnZXQyIiwgIl9fdG9FU00iLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAiZ2V0STE4bk1lc3NhZ2VzIiwgIk5vdGljZSIsICJsb2NhbGl6ZSIsICJlbiIsICJqYSIsICJSZWZyZXNoIiwgImkxOG5NZXNzYWdlcyIsICJnZXRNZXNzYWdlIiwgImtleSIsICJsb2NhdGlvblJlbG9hZCIsICJsb2NhdGlvbiIsICJyZWxvYWQiLCAiTm90aWNlTWVzc2FnZSIsICJkZWZhdWx0IiwgImNyZWF0ZUVsZW1lbnQiLCAib25DbGljayIsICJ2ZXJzaW9uIiwgImltcG9ydF9leHRfZ2FkZ2V0MyIsICJhcGkiLCAiaW5pdE13QXBpIiwgImNvbmNhdCIsICJwYXJhbWV0ZXJzIiwgImFjdGlvbiIsICJmb3JtYXQiLCAiZm9ybWF0dmVyc2lvbiIsICJwcm9wIiwgInJ2cHJvcCIsICJxdWVyeVBhZ2VJbmZvIiwgIl9yZWYiLCAiX2FzeW5jVG9HZW5lcmF0b3IiLCAidGl0bGUiLCAicG9zdCIsICJ0aXRsZXMiLCAiZXJyb3IiLCAiY29uc29sZSIsICJfeCIsICJhcHBseSIsICJhcmd1bWVudHMiLCAiZ2V0Q3VycmVudFJldmlzaW9uSWQiLCAiX3JlZjIiLCAicGFnZUluZm8iLCAicXVlcnkiLCAicGFnZSIsICJwYWdlcyIsICJtaXNzaW5nIiwgInJldmlzaW9ucyIsICJyZXZpZCIsICJfeDIiLCAiaW1wb3J0X2V4dF9nYWRnZXQ1IiwgImVkaXRDb25mbGljdCIsICJfcmVmMyIsICJpc0NvbnRpbnVlIiwgImdldEJvZHkiLCAidGhlbiIsICIkYm9keSIsICJmaW5kIiwgIm9uIiwgImNoZWNrRWRpdENvbmZsaWN0IiwgIl9yZWY0IiwgIndnQ3VyUmV2aXNpb25JZCIsICJ3Z0N1clJldmlzaW9uSWQyIiwgIndnUGFnZU5hbWUiLCAibXciLCAiY29uZmlnIiwgImdldCIsICJwYWdlUmV2aXNpb25JZCIsICJ0b2FzdGlmeSIsICJub2RlIiwgImNsb3NlIiwgImR1cmF0aW9uIiwgImRlbGF5IiwgIndnQWN0aW9uIiwgImluY2x1ZGVzIl0KfQo=