MediaWiki:Gadget-patrolPlus.js

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

  • 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),然后隐私和安全 → 清除浏览数据 → 缓存的图片和文件
$(function() {
    if (['Special:监视列表', 'Special:最近更改'].indexOf(mw.config.get('wgPageName')) === -1) return;
    $('abbr.unpatrolled').each(function() {
    	if ($(this).closest('tr').index() === 0) return;
    	var link = $(this).closest('li,tr').find('a[href*="diff"]').not('[href*="diff=0"]').first();
        if (!link[0]) return;
        if (/action=history/.test(link.attr('href'))) return; // 历史遗留问题
        var span = $('<span/>'),
            a = $('<a/>', {
                href: 'javascript:void(0)',
                class: 'patrolLink'
            }).appendTo(span),
            attr = $(this),
            revid = +link.attr('href').match(/diff=(\d+)/)[1];
        attr.before(span).appendTo(a).before('[').after(']');
        a.on('click', function() {
            if (mw.config.get('wgPatroling')) return;
            if (!window.confirm('你确定要标记此编辑为已巡查吗?')) return;
            var self = $(this),
                backup = self.clone();
            mw.config.set('wgPatroling', true);
            $('a.patrolLink').not(self).css({
                color: '#aaa',
                "text-decoration": 'none'
            });
            self.replaceWith($('<span/>', {
                html: '[<img src="https://upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif" />正在标记中……]'
            }));
            $.ajax({
                type: 'GET',
                url: 'http://xilinghost.tk/wiki/api.php?action=query&meta=tokens&type=patrol&format=json',
                success: function(d) {
                    if (d.error) {
                        self.text('[标记失败(第一步:' + e['*'] + '),请在3秒后重试]');
                        window.setTimeout(function() {
                            self.replaceWith(backup);
                            mw.config.set('wgPatroling', false);
                            $('a.patrolLink').removeAtrr('style');
                        }, 3000);
                    } else {
                        var token = d.query.tokens.patroltoken;
                        $.ajax({
                            type: 'POST',
                            url: 'http://xilinghost.tk/wiki/api.php',
                            data: {
                                action: 'patrol',
                                format: 'json',
                                revid: revid,
                                token: token
                            },
                            error: function(o) {
                                self.text('[标记失败(第二步:' + o.status + ' - ' + o.statusText + '),请在3秒后重试]');
                                window.setTimeout(function() {
                                    self.replaceWith(backup);
                                }, 3000);
                            },
                            success: function(d) {
                                if (d.error) {
                                    self.text('[标记失败(第二步:' + d['*'] + '),请在3秒后重试]');
                                    window.setTimeout(function() {
                                        self.replaceWith(backup);
                                    }, 3000);
                                } else {
                                    self.text('[标记成功]');
                                    window.setTimeout(function() {
                                        var tbody = span.closest('tbody');
                                        span.remove();
                                        if (tbody[0]) {
                                            var abbr = tbody.find('abbr'),
                                                a = tbody.find('a.patrolLink');
                                            if (!a[0]) abbr.remove();
                                        }
                                    }, 3000);
                                }
                            },
                            complete: function() {
                                window.setTimeout(function() {
                                    mw.config.set('wgPatroling', false);
                                    $('a.patrolLink').removeAttr('style');
                                }, 3000);
                            }
                        });
                    }
                },
                error: function(o) {
                    self.text('[标记失败(第一步:' + o.status + ' - ' + o.statusText + '),请在3秒后重试]');
                    window.setTimeout(function() {
                        self.replaceWith(backup);
                        mw.config.set('wgPatroling', false);
                        $('a.patrolLink').removeAttr('style');
                    }, 3000);
                }
            });
        });
    });
});