2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

MediaWiki:Group-checkuser.js

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索

注意:在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox/Safari:按住“Shift”的同时单击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)
  • Google Chrome:按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)
  • Internet Explorer:按住“Ctrl”的同时单击“刷新”,或按“Ctrl-F5”
  • Opera:在“工具→首选项”中清除缓存
如果您已登录但该页面出现未登录状态,请尝试在地址栏的地址最后添加代码?_=1来访问最新页面。
添加代码后的本页地址如下:-{R|https://moegirl.icu/MediaWiki:Group-checkuser.js?_=1}-
引用api时用mw.loader.using(["mediawiki.api"]),引用uri时用mw.loader.using(["mediawiki.Uri"])
萌娘百科界面管理员团队提醒您
大萌字-InterfaceAdmin.png
本页面由萌娘百科界面管理员团队在其 GitHub 库内进行维护,通过机器人自动生成可被 MediaWiki Gadget 扩展接受的版本并保存到此处。
Co-authored-by: Bhsd <55071315+bhsd-harry📧users.noreply.github.com>↩Co-authored-by: github-actions[bot] <41898282+github-actions[bot]📧users.noreply.github.com>
如果您有任何意见或建议,建议您到技术实现版提出。
/**
 * -------------------------------------------------------------------------
 * !!! DON'T MODIFY THIS PAGE MANUALLY, YOUR CHANGES WILL BE OVERWRITTEN !!!
 * -------------------------------------------------------------------------
 */
var _addText = '{{GHIACode|page=GHIA:MoegirlPediaInterfaceCodes/blob/master/src/groups/zh/checkuser/MediaWiki:Group-checkuser.js|user=[[U:AnnAngela]]|co-authors=[[U:Bhsd]]、GH:github-actions[bot]|longId=bf83eaea8eb4d94405bdf6885ec072fec997dd56|shortId=bf83eaea|summary=ci: use eslint flat config (#400)|body=<nowiki>Co-authored-by: Bhsd <55071315+bhsd-harry📧users.noreply.github.com>↩Co-authored-by: github-actions[bot] <41898282+github-actions[bot]📧users.noreply.github.com></nowiki>}}'; 

/* <pre> */

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (g && (g = 0, op[0] && (_ = 0)), _) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
var __values = (this && this.__values) || function(o) {
    var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
    if (m) return m.call(o);
    if (o && typeof o.length === "number") return {
        next: function () {
            if (o && i >= o.length) o = void 0;
            return { value: o && o[i++], done: !o };
        }
    };
    throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
var __read = (this && this.__read) || function (o, n) {
    var m = typeof Symbol === "function" && o[Symbol.iterator];
    if (!m) return o;
    var i = m.call(o), r, ar = [], e;
    try {
        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
    }
    catch (error) { e = { error: error }; }
    finally {
        try {
            if (r && !r.done && (m = i["return"])) m.call(i);
        }
        finally { if (e) throw e.error; }
    }
    return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
        if (ar || !(i in from)) {
            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
            ar[i] = from[i];
        }
    }
    return to.concat(ar || Array.prototype.slice.call(from));
};
(function () { return __awaiter(void 0, void 0, void 0, function () {
    var copyUsername, copyUserlist, wgArticleId, wgIsArticle;
    return __generator(this, function (_a) {
        switch (_a.label) {
            case 0:
                copyUsername = function () {
                    var e_1, _a;
                    var _b;
                    var nodes = ((_b = document.querySelector("#mw-content-text")) === null || _b === void 0 ? void 0 : _b.querySelectorAll('a[href*="user:" i]')) || [];
                    var _loop_1 = function (usernameNode) {
                        try {
                            var uri = new mw.Uri(usernameNode.href);
                            var username_1 = decodeURIComponent(uri.path).substring(1);
                            if (!/user:/i.test(username_1)) {
                                username_1 = uri.query.title;
                            }
                            if (!/user:/i.test(username_1)) {
                                return "continue";
                            }
                            var node_1 = document.createElement("button");
                            node_1.classList.add("copyUsername");
                            node_1.innerText = "复制用户名";
                            node_1.dataset.username = username_1;
                            node_1.addEventListener("click", function () { return __awaiter(void 0, void 0, void 0, function () {
                                var e_2;
                                return __generator(this, function (_a) {
                                    switch (_a.label) {
                                        case 0:
                                            _a.trys.push([0, 2, 3, 4]);
                                            return [4, navigator.clipboard.writeText(username_1)];
                                        case 1:
                                            _a.sent();
                                            node_1.innerText = "复制成功";
                                            return [3, 4];
                                        case 2:
                                            e_2 = _a.sent();
                                            console.error("copyUsername", e_2);
                                            node_1.innerText = "复制失败,请查看控制台";
                                            return [3, 4];
                                        case 3:
                                            node_1.dataset.timestamp = Date.now();
                                            return [7];
                                        case 4: return [2];
                                    }
                                });
                            }); });
                            usernameNode.after(node_1);
                        }
                        catch (_c) { }
                    };
                    try {
                        for (var nodes_1 = __values(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {
                            var usernameNode = nodes_1_1.value;
                            _loop_1(usernameNode);
                        }
                    }
                    catch (e_1_1) { e_1 = { error: e_1_1 }; }
                    finally {
                        try {
                            if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1["return"])) _a.call(nodes_1);
                        }
                        finally { if (e_1) throw e_1.error; }
                    }
                    setInterval(function () {
                        var e_3, _a;
                        var now = Date.now();
                        try {
                            for (var _b = __values(document.querySelectorAll(".copyUsername[data-timestamp]")), _c = _b.next(); !_c.done; _c = _b.next()) {
                                var node = _c.value;
                                var timestamp = node.dataset.timestamp;
                                if (now >= +timestamp + 3000) {
                                    node.removeAttribute("data-timstamp");
                                    node.innerText = "复制用户名";
                                }
                            }
                        }
                        catch (e_3_1) { e_3 = { error: e_3_1 }; }
                        finally {
                            try {
                                if (_c && !_c.done && (_a = _b["return"])) _a.call(_b);
                            }
                            finally { if (e_3) throw e_3.error; }
                        }
                    }, 1000);
                };
                copyUserlist = function () {
                    var h3s = __spreadArray(__spreadArray([], __read(document.querySelectorAll("#mw-content-text > .mw-parser-output > h3")), false), [document.querySelector("table.navbox")], false);
                    h3s.slice(0, -1).forEach(function (section, index) {
                        var nextSection = h3s[index + 1];
                        var userlist = [];
                        for (var ele = section.nextElementSibling; ele && ele !== nextSection; ele = ele.nextElementSibling) {
                            var elements = ele.querySelectorAll("li:not(:has( small.checkuser-show)) > a");
                            var usernames = Array.from(elements)
                                .map(function (a) { return a.textContent.trim(); })
                                .filter(function (text) { return text.match(/^user:/i); });
                            userlist.push.apply(userlist, __spreadArray([], __read(usernames), false));
                        }
                        var $bar = $(section.getElementsByClassName("mw-editsection")[0]);
                        var $divider = $('<span class="mw-editsection-divider"> | </span>');
                        var $copyButton = $("<a class=\"section-username-list\" title=\"\u5171".concat(userlist.length, "\u4E2A\u7528\u6237\u540D\">\u590D\u5236\u7528\u6237\u5217\u8868</a>"));
                        $bar.find(".mw-editsection-bracket").first().after($divider).after($copyButton);
                        var lastClicked = -1;
                        $copyButton.on("click", function () {
                            navigator.clipboard.writeText(userlist.join("\n"));
                            $copyButton.text("复制列表成功");
                            lastClicked = Date.now() + 2000 - 2;
                            setTimeout(function () {
                                if (Date.now() > lastClicked) {
                                    $copyButton.text("复制用户列表");
                                }
                            }, 2000);
                        });
                    });
                };
                return [4, Promise.all([
                        $.ready,
                        mw.loader.using(["mediawiki.Uri"]),
                    ])];
            case 1:
                _a.sent();
                wgArticleId = mw.config.get("wgArticleId");
                wgIsArticle = mw.config.get("wgIsArticle");
                if (wgArticleId === 325714 && wgIsArticle) {
                    copyUsername();
                    copyUserlist();
                }
                return [2];
        }
    });
}); })(); 

/* </pre> */