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

User:Nzh21/js/QuickUndo.js

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
< User:Nzh21‎ | 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/User:Nzh21/js/QuickUndo.js?_=1}-
$(function () {
    function undo(pageid, undoid, undoafter, ignoreabusefilter = true) {
        ajaxdata = {
            "action": "edit",
            "format": "json",
            "pageid": pageid,
            "summary": '[[User:Nzh21/js/QuickUndo.js|快速撤销]]从版本' + undoafter + '到版本' + undoid + '的[[Special:Diff/' + undoafter + '/' + undoid + '|所有编辑]]',
            "undo": undoid,
            "token": mw.user.tokens.values.editToken,
        };
        if (undoafter) ajaxdata.undoafter = undoafter;
        mw.notify('正在操作');
        $.ajax({
            type: "POST",
            url: '/api.php',
            data: ajaxdata,
            success: function (data) {
                if (data.edit && data.edit.result == 'Success') {
                    if (data.edit.nochange != undefined) {
                        mw.notify('这次编辑似乎已被撤销。');
                    } else {
                        mw.notify('完成');
                        setTimeout(function () { window.open('/Special:Diff/' + data.edit.newrevid); }, 0);
                    }
                } else if (data.edit && data.edit.result == 'Failure' && data.edit.abusefilter && data.edit.abusefilter.actions.indexOf('warn') != -1 && ignoreabusefilter) {
                    mw.notify('遇到过滤器' + data.edit.abusefilter.id + '(' + data.edit.abusefilter.description + '),忽略警告');
                    setTimeout(function () { undo(pageid, undoid, undoafter, false) }, 0);
                } else if (data.error && data.error.info == 'The edit could not be undone due to conflicting intermediate edits.') {
                    mw.notify('因存在冲突的中间编辑,本编辑不能撤销。');
                } else {
                    mw.notify('出现未知错误,以下是错误信息:'
                        + JSON.stringify(data));
                    console.log(JSON.stringify(data))
                }
            },
            error: function () {
                mw.notify('网络连接出错');
            }
        })
    }
    if (mw.config.values.wgDiffNewId || mw.config.values.wgDiffOldId) {
        $('.mw-diff-undo').each(function () {
            this.innerHTML = this.innerHTML.replace(/)$/, '/<a href="#." title = "无需确定并忽略过滤器警告" class="quickundo_diff">快速撤销</a >)')
        });
        $('a.quickundo_diff').each(function () {
            this.onclick = function () {
                undo(mw.config.values.wgArticleId, mw.config.values.wgDiffNewId, mw.config.values.wgDiffOldId);
            }
        });
    }
    if (mw.config.values.wgAction == 'history') {
        $('.mw-history-undo').append('/<a href="#." title = "无需确定并忽略过滤器警告" class="quickundo_history">快速撤销</a >');
        $('a.quickundo_history').each(function () {
            this.onclick = function () {
                var href = $(this).parents('span.mw-history-undo').children('a:not(.quickundo_history)')[0].href;
                var undoid = href.match(/undo=(\d+)/)[1];
                var undoafter = href.match(/undoafter=(\d+)/)[1];
                undo(mw.config.values.wgArticleId, undoid, undoafter);
            }
        });

        var last_user = $('.history-user:first .mw-userlink:first')[0].href;
        var undoafter = -1;
        var times = 0;
        $.each($('.history-user .mw-userlink'), function () {
            if (this.href != last_user) {
                undoafter = $(this).parents('li')[0].dataset.mwRevid;
                return false;
            } else {
                times++;
            }
        });
        var rollback = document.createElement('a');
        rollback.innerText = '回退' + times + '次的编辑';
        rollback.href = '#.';
        rollback.onclick = function () {
            undo(mw.config.values.wgArticleId, mw.config.values.wgCurRevisionId, undoafter);
        }
        $('#pagehistory li:first').append('[').append(rollback).append(']')
    }
    window.QuickDiffExtension = window.QuickDiffExtension || [];
    window.QuickDiffExtension.push(function (that, data) {
        $(that).find('#quick-diff-content').prepend('<input class="quick-undo-quick-diff" title="查无需确定并忽略过滤器警告" type="submit" value="快速撤销此编辑">');
        $(that).find('input.quick-undo-quick-diff').each(function () {
            this.onclick = function () {
                undo(data.compare.fromid, data.compare.fromrevid, data.compare.torevid);
            }
        });
    });
});