LLWiki正在建设中,欢迎加入我们

MediaWiki:Gadget-patrolPlus.js

来自LLWiki
跳转到导航 跳转到搜索

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

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:前往菜单 → 设置(Mac为Opera → Preferences),然后隐私和安全 → 清除浏览数据 → 缓存的图片和文件
//引自[[moegirl:mediawiki:gadget-patrolPlus.js]]
$(function () {
    if (!["Recentchanges", "Recentchangeslinked", "Watchlist"].includes(mw.config.get("wgCanonicalSpecialPageName"))) { return; }

    var api = new mw.Api();
    var patrolling = false;
    var list = [];
    function handlePatrol(title, _revid) {
        return new Promise(function (res, rej) {
            if (typeof _revid !== "number") {
                api.get({ action: "query", prop: "revisions", rvprop: "ids", rvlimit: 1, rvdir: "newer", titles: title, formatversion:2 })
                    .then(function (data) {
                    if ("error" in data) {
                        rej(data.error);
                    } else {
                        res(data.query.pages[0].revisions[0].revid);
                    }
                }, function (error) {
                    rej(error);
                });
            } else {
                res(_revid);
            }
        }).then(function (revid) {
            return api.postWithToken("patrol", {
                action: "patrol",
                format: "json",
                revid: revid
            });
        });
    }

    $("abbr.unpatrolled").each(function () {
        var self = $(this);
        if (self.closest("tbody").find("tr")[1] && self.closest("tr").index() === 0) { return; }
        var container = $('<a href="#" class="patrolLink"></a>');
        self.after(container).appendTo(container).before("[").after("]");
        self = container;
        var link = self.closest("li, tr").find('a[href*="diff"]:not([href*="diff=0"])').first();
        var uri, title, revid;
        if (link.length) {
            uri = new mw.Uri(link.attr("href"));
            title = uri.query.title;
            revid = +uri.query.diff;
        } else {
            uri = new mw.Uri(self.closest("li, tr").find(".mw-changeslist-history").first().attr("href"));
            title = uri.query.title;
        }
        if (!list.includes(title)) {
            list.push(title);
        }
        self.attr({
            "data-title": list.indexOf(title),
            "data-revid": revid,
        });
        self.on("click", function (event) {
            event.preventDefault();
            if (patrolling) { return; }
            if (!window.confirm(wgULS("您确定要标记此编辑为已巡查吗?","您確定要標示此編輯為已巡查嗎?"))) { return; }
            patrolling = true;
            $("a.patrolLink").not(self).css({
                color: "#aaa",
                "text-decoration": "none"
            });
            var textStatus = $("<span></span>", {
                html: wgULS('[正在标记中……]','[正在標示中……]')
            });
            self.after(textStatus).hide();
            handlePatrol(title, revid).then(function (data) {
                if ("error" in data) {
                    throw data.error;
                }
                textStatus.text(wgULS("[标记成功]","[標示成功]"));
                patrolling = false;
                $("a.patrolLink").removeAttr("style");
                self.parents('.row-unpatrolled').removeClass( 'row-unpatrolled' );
                var parentTable = self.parents('table');
                self.remove();
                if($('.row-unpatrolled').length === 0 && $('.mark-all-as-patrolled').length)
                    $('.mark-all-as-patrolled').remove();
                if(parentTable.find('a.patrolLink').length === 0)
                    parentTable.find('abbr.unpatrolled').remove();
            }, function (error) {
                textStatus.text(wgULS("[标记失败:" + (error instanceof Error ? error.name : error.code) + ",请在3秒后重试]","[標示失敗:" + (error instanceof Error ? error.name : error.code) + ",請在3秒後重試"));
                window.setTimeout(function () {
                    textStatus.remove();
                    self.show();
                }, 3000);
                patrolling = false;
                $("a.patrolLink").removeAttr("style");
            });
        });
    });
});