Thành viên:NgocAnMaster/undo.js

//  mobileUndo 2.0.3, một tiện ích cho phép lùi lại các sửa đổi trên thiết bị di động.//  Tất cả các mã được phát hành theo giấy phép nội dung Wikipedia hiện hành.//  Hướng dẫn sử dụng có tại [[Wikipedia:MobileUndo]].//  <doc>  Về cơ bản, đoạn mã này kết nối điểm API cuối với //         nút mw-ui-destructive được thêm vào phần cuối trang //         sử dụng jQuery. Các tính năng khác bao gồm việc//         thay đổi vị trí của nút cảm ơn và thêm hộp thoại xác nhận//         vào nút cảm ơn, để tránh việc chạm nhầm do //         hai nút đó ở vị trí gần với nhau.//  </doc> //<nowiki>console.time('mobileUndo');$.when(mw.loader.using(['mediawiki.util', 'mediawiki.api', 'oojs-ui-windows', 'oojs-ui-core', 'oojs-ui.styles.icons-editing-core'])).then(function() {    return new mw.Api().getMessages(['editundo', 'Undo-nochange']);}).then(function(globalmessages) {    var mobileUndo, i18n_lang = mw.config.get('wgUserLanguage');    var i18n = {        "vi": {            "mu-success": "Thành công",            "mu-fail": "Thất bại",            "mu-loading": "Đang tải",            "editsummary-ad": " ([[vi:Wikipedia:MobileUndo|mobileUndo]])",            "mu-undo-successful": "Lùi sửa thành công.... Sẽ tải lại trong giây lát",            "mu-empty-reponse-from-server": "Máy chủ không phản hồi",            "mu-edit-summary-prompt": "Thêm lý do vào phần tóm lược sửa đổi!",            "mu-edit-summary-prompt-placeholder": "Lý do...",            "mu-thank-success": "Đã cảm ơn",            "mu-thank-confirm": "Gửi lời cảm ơn công khai?",            "mu-thank-loading": "Đang cảm ơn...",            "mu-thank-successful": "Bạn đã cảm ơn $1.",            "mu-thank-failed": "Không thể cảm ơn $1.",            "mu-http-error":"Lỗi HTTP: "        }    };if(undefined === i18n[i18n_lang]){i18n_lang = 'en';}    if (mw.config.get('wgCanonicalSpecialPageName') === 'MobileDiff') {        mw.util.addCSS('#mw-mf-userinfo .mobileUndo-ui .mw-ui-icon.mw-ui-icon-before:before{display:none;}\n#mobileUndo > a > span.oo-ui-iconElement-icon.oo-ui-icon-editUndo.oo-ui-image-invert{display:inline-block; position:initial;}\n#mobileUndo > a{padding:0.57142857em 0.9375em;}'+        '#mw-mf-userinfo > div > div.mobileUndo-ui > a > div{line-height:normal;}');        if (mw.config.get('wgVisualEditor').pageLanguageDir === 'ltr') {            $('#mw-mf-userinfo .post-content').append($('<div>').attr('class', 'mobileUndo-ui').css({                'display': 'inline-block',                'float': 'right'            }));        } else {            $('#mw-mf-userinfo .post-content').append($('<div>').attr('class', 'mobileUndo-ui').css({                'display': 'inline-block',                'float': 'left'            }));        }        $('.mobileUndo-ui').append($('.mw-mf-action-button').remove().css({            'clear': 'none'        }));        if (!$('.warningbox').length && mw.config.get('wgRelevantPageIsProbablyEditable')) {            mobileUndo = new OO.ui.ButtonWidget({                label: (globalmessages.editundo).charAt(0).toUpperCase() + (globalmessages.editundo).slice(1),                icon: 'editUndo',                title: 'mobileUndo',                flags: ['destructive', 'primary'],                id: 'mobileUndo'            });            $('.mobileUndo-ui').append(mobileUndo.$element);            if (mw.config.get('wgVisualEditor').pageLanguageDir === 'ltr') {                $('#mobileUndo').css('margin-right', '0.3em');            } else {                $('#mobileUndo').css('margin-left', '0.3em');            }        }        window.wgRelevantUser = function() {            var user;            if ($('.mw-mf-user-link').text() !== '') {                user = $('.mw-mf-user-link').text();            } else {                user = $('#mw-mf-userinfo .post-content div:nth-child(2)').text();            }            return user;        };        window.wgRevId = ($('#mw-mf-diffarea > div.mw-mf-diff-info > h3 > a').attr('href')).split('&oldid=')[1];        var revId = wgRevId;        console.log(revId);        var username = wgRelevantUser();        $('#mw-mf-userinfo .post-content .mobileUndo-ui .mw-mf-action-button').click(function(e) {            e.preventDefault();            OO.ui.confirm(i18n[i18n_lang]['mu-thank-confirm']).done(function(confirmed) {                if (confirmed) {                    $('.mw-mf-action-button').css('pointer-events', 'none').text(i18n[i18n_lang]['mu-thank-loading']);                    var api = new mw.Api();                    api.postWithToken('csrf', {                        action: "thank",                        rev: revId,                    }).done(function(result) {                        mw.notify((i18n[i18n_lang]['mu-thank-successful']).replace(/\$1/g, username));                        $('.mw-mf-action-button').text(i18n[i18n_lang]['mu-thank-success']);                    }).fail(function() {                        mw.notify((i18n[i18n_lang]['mu-thank-failed']).replace(/\$1/g, username));                        $('.mw-mf-action-button').text(i18n[i18n_lang]['mu-failed']);                    });                }            });        });        console.timeEnd('mobileUndo');        mobileUndo.on('click', function() {            OO.ui.prompt(i18n[i18n_lang]['mu-edit-summary-prompt'], {                textInput: {                    placeholder: i18n[i18n_lang]['mu-edit-summary-prompt-placeholder']                 }            }).done(function(customEditSummary) {                $.when(mw.loader.using('mediawiki.api')).then(function() {                    return new mw.Api().getMessages(['undo-summary'], {                        amlang: mw.config.get('wgServerName').split('.wik')[0]                    });                }).then(function(message) {                    var editSummaryMessage = message['undo-summary'];                    var editSummary = editSummaryMessage.replace(/\$1/g, revId);                    editSummary = editSummary.replace(/\$2/g, username);                    if (customEditSummary !== null) {                        mobileUndo.setDisabled(true);                        editSummary = editSummary + ' ' + customEditSummary + (i18n[i18n_lang]['editsummary-ad']);                        //call the API                        var api = new mw.Api({                            ajax: {                                headers: {                                    'Api-User-Agent': 'mobileUndo/2.0.2(https://www.search.com.vn/wiki/en/User:FR30799386/undo.js)'                                }                            }                        });                        //Feedback UI                        mobileUndo.setLabel(i18n[i18n_lang]['mu-loading']);                        api.postWithToken('csrf', {                            action: "edit",                            title: mw.config.get('wgRelevantPageName'),                            summary: editSummary,                            undo: revId,                        }).done(function(result) {                            if (result.edit.code === 'abusefilter-warning' || result.edit.code === 'abusefilter-disallowed') {                                mobileUndo.setLabel(i18n[i18n_lang]['mu-fail']);                                OO.ui.alert($('<p>').html(result.edit.warning), {                                    title: result.edit.info                                }).done(function() {});                                return;                            } else if (typeof result.edit.nochange !== 'undefined') {                                mobileUndo.setLabel(i18n[i18n_lang]['mu-fail']);                                OO.ui.alert($('<p>').html(globalmessages['Undo-nochange'])).done(function() {});                                return;                            }                            console.log(result);                            mobileUndo.setLabel(i18n[i18n_lang]['mu-success']);                            mw.notify(i18n[i18n_lang]['mu-undo-successful']);                            setTimeout(function() {                                location.href = mw.util.getUrl('Special:MobileDiff/' + result.edit.newrevid);                            }, 1500);                        }).fail(function(code, jqxhr) {                            mobileUndo.setLabel(i18n[i18n_lang]['mu-fail']);                            var details;                            if (code === 'http' && jqxhr.textStatus === 'error') {                                details = i18n[i18n_lang]['mu-http-error'] + jqxhr.xhr.status;                            } else if (code === 'http') {                                details = i18n[i18n_lang]['mu-http-error'] + jqxhr.textStatus;                            } else if (code === 'ok-but-empty') {                                details = i18n[i18n_lang]['mu-empty response-from-server'];                            } else {                                details = jqxhr.error.info;                            }                            OO.ui.alert($('<p>').html(details)).done(function() {});                        });                    }                });            });        });    }});//Kết thúc đoạn mã//</nowiki>