Bước tới nội dung

Thành viên:Veritas Sapientiae/userRightsManager.js

Bách khoa toàn thư mở Wikipedia
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 ExplorerSafari: 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.
// <nowiki>// Some UI code adapted from [[User:Mr. Stradivarius/gadgets/Draftify.js]](function() { if (!/Wikipedia:Yêu cầu cấp quyền\//.test(document.title)) { return; } var permissionNames = { // Mã của các cờ trong phần mềm 'Người tự đánh dấu tuần tra': 'autopatrolled', 'Thành viên được xác nhận': 'confirmed', // Chỉ Hành chính viên// 'Event coordinator': 'eventcoordinator',// 'Extended confirmed': 'extendedconfirmed',// 'File mover': 'filemover',// 'Mass message sender': 'massmessage-sender', 'Tuần tra viên': 'patroller',// 'Page mover': 'extendedmover',// 'Pending changes reviewer': 'reviewer', 'Lùi sửa': 'rollbacker', 'Kỹ thuật viên bản mẫu': 'templateeditor', 'Người tải lên': 'uploader' }; var templates = {// 'Account creator': 'Account creator granted', 'Người tự đánh dấu tuần tra': 'Đã cấp quyền autopatrolled', 'AutoWikiBrowser': '',// 'Confirmed': '',// 'Event coordinator': 'Event coordinator granted',// 'Extended confirmed': '',// 'File mover': 'Filemovergiven',// 'Mass message sender': 'Mass message sender granted', 'Tuần tra viên': '',// 'Page mover': 'Page mover granted',// 'Pending changes reviewer': 'Pending changes reviewer granted', 'Lùi sửa': 'Đã cấp quyền lùi sửa', 'Kỹ thuật viên bản mẫu': '' }; var api, permission = mw.config.get('wgTitle').split('/').slice(-1)[0], revisionId = mw.config.get('wgRevisionId'), tagLine = ' ([[Thành viên:Tryvix1509/userRightsManager.js|userRightsManager]])', permaLink, userName, dialog; mw.loader.using(['oojs-ui', 'mediawiki.api', 'mediawiki.widgets.DateInputWidget'], function() { api = new mw.Api(); $('.perm-assign-permissions a').on('click', function(e) { if (permission === 'AutoWikiBrowser') return true; e.preventDefault(); userName = $(this).parents('.plainlinks').find('a').eq(0).text(); showDialog(); }); }); function showDialog() { Dialog = function(config) { Dialog.super.call(this, config); }; OO.inheritClass(Dialog, OO.ui.ProcessDialog); Dialog.static.name = 'user-rights-manager'; Dialog.static.title = 'Cấp ' + permission + ' cho ' + userName; Dialog.static.actions = [ { action: 'submit', label: 'Thực hiện', flags: ['primary', 'constructive'] }, { label: 'Hủy bỏ', flags: 'safe' } ]; Dialog.prototype.getApiManager = function() { return this.apiManager; }; Dialog.prototype.getBodyHeight = function() { return 208; }; Dialog.prototype.initialize = function() { Dialog.super.prototype.initialize.call( this ); this.editFieldset = new OO.ui.FieldsetLayout( { classes: ['container'] }); this.editPanel = new OO.ui.PanelLayout({ expanded: false }); this.editPanel.$element.append( this.editFieldset.$element ); this.rightsChangeSummaryInput = new OO.ui.TextInputWidget({ value: 'Theo yêu cầu tại [[WP:YCCQ]]' }); this.expiryInput = new mw.widgets.DateInputWidget({ $overlay: $('.oo-ui-window') }); this.closingRemarksInput = new OO.ui.TextInputWidget({ value: '{{tick}} ~~~~' }); this.watchTalkPageCheckbox = new OO.ui.CheckboxInputWidget({ selected: false }); var formElements = [ new OO.ui.FieldLayout(this.rightsChangeSummaryInput, { label: 'Nhập tóm lược' }), new OO.ui.FieldLayout(this.expiryInput, { label: 'Thời hạn (tuỳ chọn)' }), new OO.ui.FieldLayout(this.closingRemarksInput, { label: 'Đóng' }) ]; if (!!templates[permission]) { formElements.push( new OO.ui.FieldLayout(this.watchTalkPageCheckbox, { label: 'Theo dõi trang thảo luận thành viên' }) ); } this.editFieldset.addItems(formElements); this.submitPanel = new OO.ui.PanelLayout( { $: this.$, expanded: false } ); this.submitFieldset = new OO.ui.FieldsetLayout( { classes: ['container'] } ); this.submitPanel.$element.append( this.submitFieldset.$element ); this.changeRightsProgressLabel = new OO.ui.LabelWidget(); this.changeRightsProgressField = new OO.ui.FieldLayout( this.changeRightsProgressLabel ); this.markAsDoneProgressLabel = new OO.ui.LabelWidget(); this.markAsDoneProgressField = new OO.ui.FieldLayout( this.markAsDoneProgressLabel ); this.issueTemplateProgressLabel = new OO.ui.LabelWidget(); this.issueTemplateProgressField = new OO.ui.FieldLayout( this.issueTemplateProgressLabel ); this.stackLayout = new OO.ui.StackLayout( { items: [this.editPanel, this.submitPanel], padded: true } ); this.$body.append( this.stackLayout.$element ); $( '.mw-widget-dateInputWidget' ).css( 'width', '100%' ); }; Dialog.prototype.onSubmit = function() { var self = this, promiseCount = !!templates[permission] ? 3 : 2; self.actions.setAbilities( { submit: false } ); addPromise = function( field, promise ) { self.pushPending(); promise.done(function() { field.$field.append( $( '<span>' ) .text( 'Đã thực hiện!' ) .prop('style', 'position:relative; top:0.5em; color: #009000; font-weight: bold') ); }).fail(function(obj) { if ( obj && obj.error && obj.error.info ) { field.$field.append( $( '<span>' ) .text('Đã xảy ra lỗi: ' + obj.error.info) .prop('style', 'position:relative; top:0.5em; color: #cc0000; font-weight: bold') ); } else { field.$field.append( $( '<span>' ) .text('Đã xảy ra lỗi không xác định.') .prop('style', 'position:relative; top:0.5em; color: #cc0000; font-weight: bold') ); } }).always( function() { promiseCount--; // FIXME: maybe we could use a self.isPending() or something self.popPending(); if (promiseCount === 0) { setTimeout(function() { location.reload(true); }, 1000); } }); return promise; }; self.markAsDoneProgressField.setLabel( 'Đang đánh dấu đã thực hiện yêu cầu...' ); self.submitFieldset.addItems( [self.markAsDoneProgressField] ); self.changeRightsProgressField.setLabel( 'Đang cấp quyền...' ); self.submitFieldset.addItems( [self.changeRightsProgressField] );  if (!!templates[permission]) { self.issueTemplateProgressField.setLabel( 'Đang thông báo với thành viên...' ); self.submitFieldset.addItems( [self.issueTemplateProgressField] ); } addPromise( self.markAsDoneProgressField, markAsDone('\n:' + this.closingRemarksInput.getValue()) ).then(function(data) { addPromise( self.changeRightsProgressField, assignPermission( this.rightsChangeSummaryInput.getValue(), data.edit.newrevid, this.expiryInput.getValue() ) ).then(function() { if (!!templates[permission]) { addPromise( self.issueTemplateProgressField, issueTemplate(this.watchTalkPageCheckbox.isSelected(), this.expiryInput.getValue()) ); } }.bind(this)); }.bind(this)); self.stackLayout.setItem( self.submitPanel ); }; Dialog.prototype.getActionProcess = function( action ) { return Dialog.super.prototype.getActionProcess.call( this, action ).next( function() { if ( action === 'submit' ) { return this.onSubmit(); } else { return Dialog.super.prototype.getActionProcess.call( this, action ); } }, this ); }; dialog = new Dialog({ size: 'medium' }); var windowManager = new OO.ui.WindowManager(); $('body').append(windowManager.$element); windowManager.addWindows([dialog]); windowManager.openWindow(dialog); } function assignPermission(summary, revId, expiry) { permaLink = '[[Đặc biệt:/Liên kết thường trực' + revId + '#Thành viên:' + userName + '|yêu cầu]]'; return api.postWithToken( 'userrights', { action: 'userrights', format: 'json', user: userName.replace(/ /g, '_'), add: permissionNames[permission], reason: 'Đã cấp' + permissionNames[permission] + '; ' + summary + '; theo' + permaLink + tagLine, expiry: expiry === '' ? 'infinity' : expiry }); } function markAsDone(closingRemarks) { var sectionNode = document.getElementById('User:' + userName.replace(/"/g, '.22').replace(/ /g, '_')), sectionNumber = $(sectionNode).siblings('.mw-editsection').find("a:not('.mw-editsection-visualeditor')").prop('href').match(/section=(\d+)/)[1]; return api.postWithToken( 'edit', { format: 'json', action: 'edit', title: mw.config.get('wgPageName'), section: sectionNumber, summary: '/* Thành viên:' + userName + ' */ đã thực hiện' + tagLine, appendtext: closingRemarks }); } function issueTemplate(watch, expiry) { var talkPage = 'Thảo luận Thành viên:' + userName.replace(/ /g, '_'); return api.postWithToken( 'edit', { format: 'json', action: 'edit', title: talkPage, section: 'new', summary: 'Thông báo: Đã cấp quyền' + permission + ' theo ' + permaLink + tagLine, text: '{{subst:' + templates[permission] + (expiry === '' ? '' : '|expiry=' + expiry) + '}}', sectiontitle: 'Đã cấp ' + permission , watchlist: watch ? 'watch' : 'unwatch' }); }})();// </nowiki>