Thành viên:NgocAnMaster/undo.js
Giao diện
Chú ý: Sau khi lưu thay đổi trang, bạn phải xóa bộ nhớ đệm của trình duyệt để nhìn thấy các thay đổi. Google Chrome, Firefox, Internet Explorer và Safari: Giữ phím ⇧ Shift và nhấn nút Reload/Tải lại trên thanh công cụ của trình duyệt. Để biết chi tiết và hướng dẫn cho các trình duyệt khác, xem Trợ giúp:Xóa bộ nhớ đệm.
// 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('wgContentLanguage') }); }).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://en.wikipedia.org/wiki/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>