ผู้ใช้:Patsagorn Y./js/revert.js

จากวิกิพีเดีย สารานุกรมเสรี

หมายเหตุ: หลังเผยแพร่ คุณอาจต้องล้างแคชเว็บเบราว์เซอร์ของคุณเพื่อดูการเปลี่ยนแปลง

  • ไฟร์ฟอกซ์ / ซาฟารี: กด Shift ค้างขณะคลิก Reload หรือกด Ctrl-F5 หรือ Ctrl-R (⌘-R บนแมค)
  • กูเกิล โครม: กด Ctrl-Shift-R (⌘-Shift-R บนแมค)
  • อินเทอร์เน็ตเอกซ์พลอเรอร์ และ Edge: กด Ctrl ค้างขณะคลิก Refresh หรือกด Ctrl-F5
  • โอเปร่า: กด Ctrl-F5
/*
<pre><nowiki> */
// ==============================================================
// สคริปต์จัดให้: revert module
// Taken from Wikipedia:WikiProject User scripts/Scripts/Twinkle
// [[User:AzaToth/twinklefluff.js]]
//
// Modified by Jutiphan Mongkolsuthree
// Certain functions are copyrighted by respective copyright holders
//
// Created: 25/2/2007
// Replaced: none
// 

// Copied from [[ผู้ใช้:Jutiphan/iScript/revert.js]]
// For human-readable version
// 17-05-20
==============================================================
var Twinkle = {};
window.Twinkle = Twinkle;
Twinkle.initCallbacks = [];
Twinkle.addInitCallback = function twinkleAddInitCallback(a) {
    Twinkle.initCallbacks.push(a)
};
Twinkle.defaultConfig = {};
Twinkle.defaultConfig.twinkle = {
    summaryAd: "ด้วย[[WP:iScript|สจห.]]",
    deletionSummaryAd: " ([[WP:iScript|สจห.]])",
    protectionSummaryAd: " ([[WP:iScript|สจห.]])",
    userTalkPageMode: iScriptConfig.userTalkPageMode,
    dialogLargeFont: false,
    openTalkPage: ["agf", "norm", "vand"],
    openTalkPageOnAutoRevert: false,
    markRevertedPagesAsMinor: ["vand"],
    watchRevertedPages: ["agf", "norm", "vand", "torev"],
    offerReasonOnNormalRevert: true,
    confirmOnFluff: false,
    showRollbackLinks: ["diff", "others"],
    notifyUserOnDeli: true,
    deliWatchPage: "default",
    deliWatchUser: "default",
    watchProdPages: true,
    prodReasonDefault: "",
    logProdPages: false,
    prodLogPageName: "PROD log",
    speedySelectionStyle: "buttonClick",
    speedyPromptOnG7: false,
    watchSpeedyPages: ["g3", "g5", "g10", "g11", "g12"],
    markSpeedyPagesAsPatrolled: true,
    notifyUserOnSpeedyDeletionNomination: ["db", "g1", "g2", "g3", "g4", "g6", "g10", "g11", "g12", "a1", "a2", "a3", "a5", "a7", "a9", "a10", "f1", "f2", "f3", "f7", "f9", "f10", "u3", "t2", "t3", "p1", "p2"],
    welcomeUserOnSpeedyDeletionNotification: ["db", "g1", "g2", "g3", "g4", "g6", "g10", "g11", "g12", "a1", "a2", "a3", "a5", "a7", "a9", "a10", "f1", "f2", "f3", "f7", "f9", "f10", "u3", "t2", "t3", "p1", "p2"],
    promptForSpeedyDeletionSummary: ["db", "g1", "g2", "g3", "g4", "g6", "g7", "g8", "g10", "g11", "g12", "a1", "a2", "a3", "a5", "a7", "a9", "a10", "f2", "f4", "f7", "f8", "f10", "t2", "t3", "p1", "p2"],
    openUserTalkPageOnSpeedyDelete: ["db", "g1", "g2", "g3", "g4", "g5", "g10", "g11", "g12", "a1", "a3", "a7", "a9", "a10", "f3", "f7", "f9", "u3", "t2", "p1"],
    deleteTalkPageOnDelete: false,
    deleteRedirectsOnDelete: true,
    deleteSysopDefaultToTag: false,
    speedyWindowHeight: 500,
    speedyWindowWidth: 800,
    logSpeedyNominations: false,
    speedyLogPageName: "CSD log",
    noLogOnSpeedyNomination: ["u1"],
    unlinkNamespaces: ["0", "100"],
    defaultWarningGroup: "1",
    showSharedIPNotice: true,
    watchWarnings: true,
    blankTalkpageOnIndefBlock: false,
    xfdWatchDiscussion: "default",
    xfdWatchList: "no",
    xfdWatchPage: "default",
    xfdWatchUser: "default",
    revertMaxRevisions: 50,
    batchdeleteChunks: 50,
    batchDeleteMinCutOff: 5,
    batchMax: 5000,
    batchProtectChunks: 50,
    batchProtectMinCutOff: 5,
    batchundeleteChunks: 50,
    batchUndeleteMinCutOff: 5,
    deliChunks: 500,
    deliMax: 5000,
    proddeleteChunks: 50
};
if (mw.config.get("skin") === "vector") {
    Twinkle.defaultConfig.twinkle.portletArea = "right-navigation";
    Twinkle.defaultConfig.twinkle.portletId = "p-twinkle";
    Twinkle.defaultConfig.twinkle.portletName = "TW";
    Twinkle.defaultConfig.twinkle.portletType = "menu";
    Twinkle.defaultConfig.twinkle.portletNext = "p-search"
} else {
    Twinkle.defaultConfig.twinkle.portletArea = null;
    Twinkle.defaultConfig.twinkle.portletId = "p-cactions";
    Twinkle.defaultConfig.twinkle.portletName = null;
    Twinkle.defaultConfig.twinkle.portletType = null;
    Twinkle.defaultConfig.twinkle.portletNext = null
}
Twinkle.getPref = function twinkleGetPref(a) {
    var b;
    if (typeof Twinkle.prefs === "object" && typeof Twinkle.prefs.twinkle === "object") {
        b = Twinkle.prefs.twinkle[a]
    } else if (typeof window.TwinkleConfig === "object") {
        b = window.TwinkleConfig[a]
    }
    if (b === undefined) {
        return Twinkle.defaultConfig.twinkle[a]
    }
    return b
};
Twinkle.getFriendlyPref = function twinkleGetFriendlyPref(a) {
    var b;
    if (typeof Twinkle.prefs === "object" && typeof Twinkle.prefs.friendly === "object") {
        b = Twinkle.prefs.friendly[a]
    } else if (typeof window.FriendlyConfig === "object") {
        b = window.FriendlyConfig[a]
    }
    if (b === undefined) {
        return Twinkle.defaultConfig.friendly[a]
    }
    return b
};

function twAddPortlet(b, c, d, e, f) {
    var g = document.getElementById(b);
    if (!g) {
        return null
    }
    var h = document.getElementById(c);
    if (h) {
        if (h.parentNode && h.parentNode === g) {
            return h
        }
        return null
    }
    var i;
    if (f) {
        i = document.getElementById(f)
    }
    e = (skin === "vector" && e === "menu" && (b === "left-navigation" || b === "right-navigation")) ? "menu" : "";
    var j;
    var k;
    switch (skin) {
        case "vector":
            if (b !== "portal" && b !== "left-navigation" && b !== "right-navigation") {
                b = "mw-panel"
            }
            j = (b === "mw-panel") ? "portal" : (e === "menu" ? "vectorMenu extraMenu" : "vectorTabs extraMenu");
            k = (b === "mw-panel") ? "body" : (e === "menu" ? "menu" : "");
            break;
        case "modern":
            if (b !== "mw_portlets" && b !== "mw_contentwrapper") {
                b = "mw_portlets"
            }
            j = "portlet";
            k = "pBody";
            break;
        default:
            b = "column-one";
            j = "portlet";
            k = "pBody";
            break
    }
    var l = document.createElement("div");
    l.className = j + " emptyPortlet";
    l.id = c;
    if (e === "menu") {
        l.style.backgroundImage = 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAQCAMAAAAlM38UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFsbGxmpqa3d3deXl58/n79CzHcQAAAAV0Uk5T/////wD7tg5TAAAAMklEQVR42mJgwQoYBkqYiZEZAhiZUFRDxWGicEPA4nBRhNlAcYQokpVMDEwD6kuAAAMAyGMFQVv5ldcAAAAASUVORK5CYII=")';
        l.style.backgroundPosition = "right 60%"
    }
    if (i && i.parentNode === g) {
        g.insertBefore(l, i)
    } else {
        g.appendChild(l)
    }
    var m = document.createElement("h3");
    if (e === "menu") {
        var n = document.createElement("span");
        n.appendChild(document.createTextNode(d));
        m.appendChild(n);
        var a = document.createElement("a");
        a.href = "#";
        n = document.createElement("span");
        n.appendChild(document.createTextNode(d));
        a.appendChild(n);
        m.appendChild(a)
    } else {
        m.appendChild(document.createTextNode(d))
    }
    l.appendChild(m);
    var o = document.createElement("div");
    o.className = k;
    l.appendChild(o);
    var p = document.createElement("ul");
    o.appendChild(p);
    return l
}

function twAddPortletLink(b, c, d, e) {
    if (Twinkle.getPref("portletArea") !== null) {
        twAddPortlet(Twinkle.getPref("portletArea"), Twinkle.getPref("portletId"), Twinkle.getPref("portletName"), Twinkle.getPref("portletType"), Twinkle.getPref("portletNext"))
    }
    var f = mw.util.addPortletLink(Twinkle.getPref("portletId"), typeof b === "string" ? b : "#", c, d, e);
    if ($.isFunction(b)) {
        $(f).click(function(a) {
            b();
            a.preventDefault()
        })
    }
    return f
}
var twinkleUserAuthorized = Morebits.userIsInGroup("autoconfirmed") || Morebits.userIsInGroup("confirmed");
Twinkle.fluff = {
    auto: function() {
        if (parseInt(Morebits.queryString.get('oldid'), 10) !== mw.config.get('wgCurRevisionId')) {
            alert("ขออภัย ไม่สามารถย้อนกลับได้ หน้ามีการปรับเปลี่ยนระหว่างดำเนินการย้อนกลับ");
            return
        }
        var a = $("#mw-diff-ntitle2").find("a.mw-userlink").text();
        Twinkle.fluff.revert(Morebits.queryString.get('iScriptRevert'), a, true)
    },
    normal: function() {
        var f = function(a, b) {
            var c = document.createElement('span');
            c.style.color = a;
            c.appendChild(document.createTextNode(b));
            return c
        };
        if (mw.config.get('wgNamespaceNumber') === -1 && mw.config.get('wgCanonicalSpecialPageName') === "Contributions") {
            username = decodeURIComponent(/wiki\/Special:Log\/(.+)$/.exec($('#contentSub').find('a[title^="Special:Log"]').last().attr("href").replace(/_/g, "%20"))[1]);
            if (Twinkle.getPref('showRollbackLinks').indexOf('contribs') !== -1 || (mw.config.get('wgUserName') !== username && Twinkle.getPref('showRollbackLinks').indexOf('others') !== -1) || (mw.config.get('wgUserName') === username && Twinkle.getPref('showRollbackLinks').indexOf('mine') !== -1)) {
                var g = $("#bodyContent").find("ul li:has(span.mw-uctop)");
                var h = document.createElement('strong');
                var i = document.createElement('a');
                i.appendChild(f('Black', '['));
                i.appendChild(f('SteelBlue', 'ย้อน'));
                i.appendChild(f('Black', ']'));
                h.appendChild(i);
                var j = document.createElement('strong');
                var k = document.createElement('a');
                k.appendChild(f('Black', '['));
                k.appendChild(f('Red', 'ย้อนก่อกวน'));
                k.appendChild(f('Black', ']'));
                j.appendChild(k);
                g.each(function(a, b) {
                    var c = $(b).children("a:eq(1)").attr("href");
                    b.appendChild(document.createTextNode(' '));
                    var d = h.cloneNode(true);
                    d.firstChild.setAttribute('href', c + '&' + Morebits.queryString.create({
                        'iScriptRevert': 'norm'
                    }));
                    b.appendChild(d);
                    b.appendChild(document.createTextNode(' '));
                    d = j.cloneNode(true);
                    d.firstChild.setAttribute('href', c + '&' + Morebits.queryString.create({
                        'iScriptRevert': 'vand'
                    }));
                    b.appendChild(d)
                })
            }
        } else {
            if (mw.config.get('wgCanonicalSpecialPageName') === "Undelete") {
                return
            }
            var l = document.getElementById('bodyContent');
            var m = $("div.firstrevisionheader").length;
            if (m) {
                return
            }
            var n, ntitle;
            try {
                var o = document.getElementById('mw-diff-otitle1');
                var p = document.getElementById('mw-diff-ntitle1');
                if (!o || !p) {
                    return
                }
                n = o.parentNode;
                ntitle = p.parentNode
            } catch (e) {
                return
            }
            var q = $("#mw-diff-otitle1").find("strong a").attr("href");
            var r = new Morebits.queryString(q.split('?', 2)[1]);
            var s = r.get('oldid');
            var t = document.createElement('div');
            t.setAttribute('id', 'tw-revert-to-orevision');
            t.style.fontWeight = 'bold';
            var u = t.appendChild(document.createElement('a'));
            u.href = "#";
            $(u).click(function() {
                Twinkle.fluff.revertToRevision(s)
            });
            u.appendChild(f('Black', '['));
            u.appendChild(f('SaddleBrown', 'ย้อนกลับมาเป็นรุ่นนี้'));
            u.appendChild(f('Black', ']'));
            n.insertBefore(t, n.firstChild);
            if (document.getElementById('differences-nextlink')) {
                curVersion = false;
                var v = $("#mw-diff-ntitle1").find("strong a").attr("href");
                r = new Morebits.queryString(v.split('?', 2)[1]);
                var w = r.get('oldid');
                t = document.createElement('div');
                t.setAttribute('id', 'tw-revert-to-nrevision');
                t.style.fontWeight = 'bold';
                u = t.appendChild(document.createElement('a'));
                u.href = "#";
                $(u).click(function() {
                    Twinkle.fluff.revertToRevision(w)
                });
                u.appendChild(f('Black', '['));
                u.appendChild(f('SaddleBrown', 'ย้อนกลับมาเป็นรุ่นนี้'));
                u.appendChild(f('Black', ']'));
                ntitle.insertBefore(t, ntitle.firstChild);
                return
            }
            if (Twinkle.getPref('showRollbackLinks').indexOf('diff') !== -1) {
                var x = $("#mw-diff-ntitle2").find("a").first().text();
                var y = document.createElement('div');
                y.setAttribute('id', 'tw-revert');
                var z = document.createElement('strong');
                var A = document.createElement('strong');
                var B = document.createElement('strong');
                var C = document.createElement('a');
                var D = document.createElement('a');
                var E = document.createElement('a');
                C.href = "#";
                D.href = "#";
                E.href = "#";
                $(C).click(function() {
                    Twinkle.fluff.revert('agf', x)
                });
                $(D).click(function() {
                    Twinkle.fluff.revert('vand', x)
                });
                $(E).click(function() {
                    Twinkle.fluff.revert('norm', x)
                });
                C.appendChild(f('Black', '['));
                C.appendChild(f('DarkOliveGreen', 'ย้อนเจตนาดี'));
                C.appendChild(f('Black', ']'));
                D.appendChild(f('Black', '['));
                D.appendChild(f('Red', 'ย้อนก่อกวน'));
                D.appendChild(f('Black', ']'));
                E.appendChild(f('Black', '['));
                E.appendChild(f('SteelBlue', 'ย้อน'));
                E.appendChild(f('Black', ']'));
                z.appendChild(C);
                A.appendChild(D);
                B.appendChild(E);
                y.appendChild(z);
                y.appendChild(document.createTextNode(' || '));
                y.appendChild(B);
                y.appendChild(document.createTextNode(' || '));
                y.appendChild(A);
                ntitle.insertBefore(y, ntitle.firstChild)
            }
        }
    }
};
Twinkle.fluff.revert = function revertPage(a, b, c, d, e) {
    var f = e || mw.config.get('wgPageName');
    var g = d || mw.config.get('wgCurRevisionId');
    Morebits.status.init(document.getElementById('bodyContent'));
    var h = {
        type: a,
        user: b,
        pagename: f,
        revid: g,
        autoRevert: !!c
    };
    var i = {
        'action': 'query',
        'prop': ['info', 'revisions'],
        'titles': f,
        'rvlimit': 50,
        'rvprop': ['ids', 'timestamp', 'user', 'comment'],
        'intoken': 'edit'
    };
    var j = new Morebits.wiki.api('กำลังดึงข้อมูลรุ่นก่อนหน้านี้...', i, Twinkle.fluff.callbacks.main);
    j.params = h;
    j.post()
};
Twinkle.fluff.revertToRevision = function revertToRevision(a) {
    Morebits.status.init(document.getElementById('bodyContent'));
    var b = {
        'action': 'query',
        'prop': ['info', 'revisions'],
        'titles': mw.config.get('wgPageName'),
        'rvlimit': 1,
        'rvstartid': a,
        'rvprop': ['ids', 'timestamp', 'user', 'comment'],
        'intoken': 'edit',
        'format': 'xml'
    };
    var c = new Morebits.wiki.api('กำลังดึงข้อมูลรุ่นก่อนหน้านี้...', b, Twinkle.fluff.callbacks.toRevision.main);
    c.params = {
        rev: a
    };
    c.post()
};
Twinkle.fluff.userIpLink = function(a) {
    return (Morebits.isIPAddress(a) ? "[[Special:Contributions/" : "[[User:") + a + "|" + a + "]]"
};
Twinkle.fluff.callbacks = {
    toRevision: {
        main: function(a) {
            var b = a.responseXML;
            var c = parseInt($(b).find('page').attr('lastrevid'), 10);
            var d = $(b).find('page').attr('touched');
            var e = $(b).find('page').attr('starttimestamp');
            var f = $(b).find('page').attr('edittoken');
            var g = $(b).find('rev').attr('revid');
            var h = $(b).find('rev').attr('user');
            if (g !== a.params.rev) {
                a.statitem.error('พบข้อผิดพลาด รุ่นที่ดึงข้อมูลมา ไม่ตรงกับรุ่นที่ต้องการ ยกเลิกการย้อน');
                return
            }
            var i = prompt("กรุณาระบุสาเหตุที่ต้องการย้อนการแก้ไข:                      ", "");
            if (i === null) {
                a.statelem.error('ยกเลิกโดยผู้ใช้');
                return
            }
            var j = "ย้อนกลับไปรุ่นที่ " + g + " โดย " + h + (i ? ": " + i : '') + "" + Twinkle.getPref('summaryAd');
            var k = {
                'action': 'edit',
                'title': mw.config.get('wgPageName'),
                'summary': j,
                'token': f,
                'undo': c,
                'undoafter': g,
                'basetimestamp': d,
                'starttimestamp': e,
                'watchlist': Twinkle.getPref('watchRevertedPages').indexOf(a.params.type) !== -1 ? 'watch' : undefined,
                'minor': Twinkle.getPref('markRevertedPagesAsMinor').indexOf(a.params.type) !== -1 ? true : undefined
            };
            Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
            Morebits.wiki.actionCompleted.notice = "ดำเนินการย้อนเรียบร้อยแล้ว";
            var l = new Morebits.wiki.api('กำลังบันทึกข้อมูล...', k, null, a.statelem);
            l.params = a.params;
            l.post()
        },
        complete: function(a) {}
    },
    main: function(a) {
        var b = a.responseXML;
        var c = parseInt($(b).find('page').attr('lastrevid'), 10);
        var d = $(b).find('page').attr('touched');
        var e = $(b).find('page').attr('starttimestamp');
        var f = $(b).find('page').attr('edittoken');
        var g = $(b).find('rev').attr('user');
        var h = $(b).find('rev');
        if (h.length < 1) {
            a.statelem.error('ขออภัย ไม่มีรุ่นก่อนหน้านี้ให้ย้อนกลับได้ จึงไม่สามารถดำเนินการได้ ยกเลิกการย้อน');
            return
        }
        var j = h[0];
        if (c < a.params.revid) {
            Morebits.status.error('Error', ['ขออภัย เนื่องจากว่ารุ่น ', Morebits.htmlNode('strong', c), ' ที่ต้องการย้อนนั้นไม่ใช่รุ่นล่าสุด ซึ่งอาจถูกลบไปแล้ว หรือมีปัญหาเชื่อมต่อวิกิพีเดีย กรุณาตรวจสอบและลองใหม่อีกครั้ง ยกเลิกการย้อน']);
            return
        }
        var k = 1;
        if (a.params.revid !== c) {
            Morebits.status.warn('Warning', ['โปรดทราบ: รุ่นล่าสุดที่ ', Morebits.htmlNode('strong', c), ' ไม่เหมือนกับรุ่นปัจจุบันที่ ', Morebits.htmlNode('strong', a.params.revid)]);
            if (g === a.params.user) {
                switch (a.params.type) {
                    case 'vand':
                        Morebits.status.info('Info', ['Latest revision was made by ', Morebits.htmlNode('strong', a.params.user), '. As we assume vandalism, we continue to revert']);
                        break;
                    case 'agf':
                        Morebits.status.warn('Warning', ['Latest revision was made by ', Morebits.htmlNode('strong', a.params.user), '. As we assume good faith, we stop reverting, as the problem might have been fixed.']);
                        return;
                    default:
                        Morebits.status.warn('Notice', ['Latest revision was made by ', Morebits.htmlNode('strong', a.params.user), ', but we will stop reverting anyway.']);
                        return
                }
            } else if (a.params.type === 'vand' && Twinkle.fluff.whiteList.indexOf(j.getAttribute('user')) !== -1 && h.length > 1 && h[1].getAttribute('pageId') === a.params.revid) {
                Morebits.status.info('Info', ['การแก้ไขล่าสุดเป็นของ ', Morebits.htmlNode('strong', g), ' ซึ่งเป็นบอตที่ได้รับการอนุมัติ ซึ่งการแก้ไขก่อนหน้านั้นเป็นผู้ก่อกวนที่ต้องการย้อน ดังนั้นดำเนินการย้อนไปรุ่นก่อนหน้าที่บอตแก้ไข']);
                k = 2
            } else {
                Morebits.status.error('Error', ['การแก้ไขล่าสุดเป็นของ ', Morebits.htmlNode('strong', g), ' ดังนั้นจึงอาจถูกย้อนการก่อกวนไปเรียบร้อยแล้ว หยุดดำเนินการย้อนกลับ']);
                return
            }
        }
        if (Twinkle.fluff.whiteList.indexOf(a.params.user) !== -1) {
            switch (a.params.type) {
                case 'vand':
                    Morebits.status.info('Info', ['คุณได้เลือกให้ย้อนการก่อกวนของ ', Morebits.htmlNode('strong', a.params.user), ' ซึ่งเป็นบอตที่ได้รับการอนุมัติ โดยเราเชื่อว่าคุณต้องการย้อนกลับการแก้ไขของผู้ใช้ก่อนหน้านี้แทน']);
                    k = 2;
                    vandal = h[1].getAttribute('user');
                    a.params.user = h[1].getAttribute('user');
                    break;
                case 'agf':
                    Morebits.status.warn('Notice', ['คุณได้เลือกย้อนเจตนาดีของ ', Morebits.htmlNode('strong', a.params.user), ' ซึ่งเป็นบอตที่ได้รับการอนุมัติและมีเจตนาดีโดยเสมอ หากพบว่าการแก้ไขบอตไม่ถูกต้อง และต้องการย้อนกลับ ให้เลือกการย้อนปกติแทน']);
                    return;
                case 'norm':
                default:
                    var l = confirm('การแก้ไขล่าสุดเป็นของ ' + a.params.user + ' ซึ่งเป็นบอตที่ได้รับการอนุมัติ คุณต้องการย้อนการแก้ไขของผู้ใช้ก่อนหน้านี้ (OK) หรือการแก้ไขของบอต (Cancel)');
                    if (l) {
                        Morebits.status.info('Info', ['ตามที่คุณยืนยัน เราจะทำการย้อนการแก้ไขไปรุ่นก่อนการแก้ไขของ ', Morebits.htmlNode('strong', a.params.user), '']);
                        k = 2;
                        a.params.user = h[1].getAttribute('user')
                    } else {
                        Morebits.status.warn('Notice', ['คุณได้ยืนยันย้อนการแก้ไขของ ', Morebits.htmlNode('strong', a.params.user), ' ซึ่งเป็นบอตที่ได้รับการอนุมัติ แต่คุณยืนยันจึงดำเนินการต่อ'])
                    }
                    break
            }
        }
        var m = false;
        var n = 0;
        for (var i = k; i < h.length; ++i) {
            ++n;
            if (h[i].getAttribute('user') !== a.params.user) {
                m = i;
                break
            }
        }
        if (!m) {
            a.statelem.error(['ขออภัย ไม่พบเจอรุ่นที่จะย้อนกลับ หยุดดำเนินการ อาจเป็นเพราะว่า ', Morebits.htmlNode('strong', a.params.user), ' เป็นผู้แก้ไขหน้านี้แต่เพียงผู้เดียว หรือได้แก้ไขติดต่อกันมากกว่า ' + Twinkle.getPref('revertMaxRevisions') + ' ครั้ง']);
            return
        }
        if (!n) {
            Morebits.status.error('Error', "ไม่พบเจอรุ่นที่จะย้อนกลับ หยุดการดำเนินการ ซึ่งอาจเป็นเพราะว่าการแก้ไขได้ถูกย้อนกลับไปแล้ว แต่รหัสรุ่นยังเหมือนเดิม");
            return
        }
        var o = h[m];
        var p = false;
        if (a.params.type !== 'vand' && n > 1) {
            if (!confirm(a.params.user + ' ได้ทำการแก้ไขทั้งหมด ' + n + ' ครั้งติดต่อกัน คุณแน่ใจว่าต้องการย้อนการแก้ไขดังกล่าวทั้งหมด?')) {
                Morebits.status.info('Notice', 'ยกเลิกการย้อนกลับตามความต้องการของผู้ใช้');
                return
            }
            p = true
        }
        a.params.count = n;
        a.params.goodid = o.getAttribute('revid');
        a.params.gooduser = o.getAttribute('user');
        a.statelem.status([' พบเจอรุ่นที่ ', Morebits.htmlNode('strong', a.params.goodid), ' ซึ่งเป็น ', Morebits.htmlNode('strong', n), ' การแก้ไขที่แล้วโดย ', Morebits.htmlNode('strong', a.params.gooduser)]);
        var q, extra_summary, userstr, gooduserstr;
        switch (a.params.type) {
            case 'agf':
                extra_summary = prompt("กรุณาระบุสาเหตุที่ย้อนการแก้ไข (เว้นว่างหากไม่ระบุ):", "");
                if (extra_summary === null) {
                    a.statelem.error('ยกเลิกการย้อนกลับโดยผู้ใช้');
                    return
                }
                p = true;
                userstr = a.params.user;
                q = "ย้อนการแก้ไข[[WP:AGF|เจตนาดี]]ของ [[Special:Contributions/" + userstr + "|" + userstr + "]] ([[User talk:" + userstr + "|พูดคุย]])" + Twinkle.fluff.formatSummaryPostfix(extra_summary) + Twinkle.getPref('summaryAd');
                break;
            case 'vand':
                userstr = a.params.user;
                gooduserstr = a.params.gooduser;
                q = "ย้อน[[WP:VAND|การก่อกวน]] " + a.params.count + (a.params.count > 1 ? ' ครั้ง' : ' ครั้ง') + "ของ [[Special:Contributions/" + userstr + "|" + userstr + "]] ([[User talk:" + userstr + "|พูดคุย]]) ไปยังรุ่นโดย " + gooduserstr + "." + Twinkle.getPref('summaryAd');
                break;
            case 'norm':
            default:
                if (Twinkle.getPref('offerReasonOnNormalRevert')) {
                    extra_summary = prompt("กรุณาระบุสาเหตุที่ย้อนการแก้ไข (เว้นว่างหากไม่ระบุ):", "");
                    if (extra_summary === null) {
                        a.statelem.error('ยกเลิกการย้อนกลับโดยผู้ใช้');
                        return
                    }
                    p = true
                }
                userstr = a.params.user;
                q = "ย้อน " + a.params.count + (a.params.count > 1 ? ' การแก้ไข' : ' การแก้ไข') + "ของ [[Special:Contributions/" + userstr + "|" + userstr + "]] ([[User talk:" + userstr + "|พูดคุย]])" + Twinkle.fluff.formatSummaryPostfix(extra_summary) + Twinkle.getPref('summaryAd');
                break
        }
        if (Twinkle.getPref('confirmOnFluff') && !p && !confirm("Reverting page: are you sure?")) {
            a.statelem.error('Aborted by user.');
            return
        }
        var r;
        if ((!a.params.autoRevert || Twinkle.getPref('openTalkPageOnAutoRevert')) && Twinkle.getPref('openTalkPage').indexOf(a.params.type) !== -1 && mw.config.get('wgUserName') !== a.params.user) {
            Morebits.status.info('Info', ['กำลังเปิดหน้าพูดคุยกับผู้ใช้ของ ', Morebits.htmlNode('strong', a.params.user)]);
            r = {
                'title': 'User talk:' + a.params.user,
                'action': 'edit',
                'preview': 'yes',
                'vanarticle': a.params.pagename.replace(/_/g, ' '),
                'vanarticlerevid': a.params.revid,
                'vanarticlegoodrevid': a.params.goodid,
                'type': a.params.type,
                'count': a.params.count
            };
            WarnUser(a.params.user, a.params.pagename.replace(/_/g, ' '), "Vandal")
        }
        r = {
            'action': 'edit',
            'title': a.params.pagename,
            'summary': q,
            'token': f,
            'undo': c,
            'undoafter': a.params.goodid,
            'basetimestamp': d,
            'starttimestamp': e,
            'watchlist': Twinkle.getPref('watchRevertedPages').indexOf(a.params.type) !== -1 ? 'watch' : undefined,
            'minor': Twinkle.getPref('markRevertedPagesAsMinor').indexOf(a.params.type) !== -1 ? true : undefined
        };
        Morebits.wiki.actionCompleted.redirect = a.params.pagename;
        Morebits.wiki.actionCompleted.notice = "ดำเนินการย้อนเรียบร้อยแล้ว";
        var s = new Morebits.wiki.api('กำลังบันทีกข้อมูลการแก้ไข...', r, Twinkle.fluff.callbacks.complete, a.statelem);
        s.params = a.params;
        s.post()
    },
    complete: function(a) {
        a.statelem.info("done")
    }
};
Twinkle.fluff.formatSummaryPostfix = function(a) {
    if (a) {
        a = ': ' + Morebits.string.toUpperCaseFirstChar(a);
        if (a.search(/[.?!;]$/) === -1) {
            a = a + '.'
        }
        return a
    } else {
        return '.'
    }
};
Twinkle.fluff.init = function twinklefluffinit() {
    if (twinkleUserAuthorized) {
        Twinkle.fluff.whiteList = ['BotKung', 'TBot', 'JBot', 'NongBot', 'Chobot', 'Escarbot', 'Idioma-bot', 'Nullzerobot', 'Robbot', 'RoboDick', 'SieBot', 'Thijs!bot', 'TuvicBot', 'VolkovBot', 'YurikBot', 'Zwobot'];
        if (Morebits.queryString.exists('iScriptRevert')) {
            Twinkle.fluff.auto()
        } else {
            Twinkle.fluff.normal()
        }
    }
};
$(document).ready(function() {
    Twinkle.fluff.init()
});
/*</nowiki></pre> */