MediaWiki:Gadget-Adiutor-UBM.js
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./*
* Adiutor: Adiutor enables versatile editing options and modules to assist a variety of user actions to enhance the Wikipedia editing experience.
* Author: Vikipolimer
* Learn more at: https://meta.wikimedia.org/wiki/Adiutor
* Licensing and Attribution: Licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
* Module: User block module
*/
/* <nowiki> */
// Get essential configuration from MediaWiki
var mwConfig = mw.config.get(["skin", "wgAction", "wgArticleId", "wgPageName", "wgNamespaceNumber", "wgTitle", "wgUserGroups", "wgUserName", "wgUserEditCount", "wgUserRegistration", "wgCanonicalNamespace", "wgRelevantUserName"]);
var api = new mw.Api();
var wikiId = mw.config.get('wgWikiID');
var adiutorUserOptions = JSON.parse(mw.user.options.get('userjs-adiutor-'+wikiId));
var duration;
var reason;
var blockReason;
var additionalReason;
var preventAccountCreationValue,
preventEmailSendingValue,
preventEditOwnTalkPageValue;
function UserBlockDialog(config) {
UserBlockDialog.super.call(this, config);
}
OO.inheritClass(UserBlockDialog, OO.ui.ProcessDialog);
UserBlockDialog.static.title = new OO.ui.deferMsg('user-blocking'),
UserBlockDialog.static.name = 'UserBlockDialog';
UserBlockDialog.static.actions = [{
action: 'continue',
modes: 'edit',
label: new OO.ui.deferMsg('block'),
flags: ['primary', 'destructive']
}, {
action: 'help',
modes: 'edit',
label: new OO.ui.deferMsg('help'),
}, {
modes: 'edit',
label: new OO.ui.deferMsg('cancel'),
flags: 'safe'
}, {
action: 'back',
modes: 'help',
label: new OO.ui.deferMsg('back'),
flags: 'safe'
}];
UserBlockDialog.prototype.initialize = function() {
UserBlockDialog.super.prototype.initialize.apply(this, arguments);
this.userBlockPanel = new OO.ui.PanelLayout({
padded: true,
expanded: false
});
// Create a dropdown for block duration
var durationDropdown = new OO.ui.DropdownInputWidget({
options: [{
data: '',
label: mw.message('choose-duration').text(),
}, {
data: 'infinity',
label: mw.message('infinity').text()
}, {
data: '2 hours',
label: mw.message('2-hours').text()
}, {
data: '12 hours',
label: mw.message('12-hours').text()
}, {
data: '1 day',
label: mw.message('1-day').text()
}, {
data: '2 days',
label: mw.message('2-days').text()
}, {
data: '3 days',
label: mw.message('3-days').text()
}, {
data: '1 week',
label: mw.message('1-week').text()
}, {
data: '2 weeks',
label: mw.message('2-weeks').text()
}, {
data: '1 month',
label: mw.message('1-month').text()
}, {
data: '3 months',
label: mw.message('3-months').text()
}, {
data: '6 months',
label: mw.message('6-months').text()
}, {
data: '1 year',
label: mw.message('1-year').text()
}, {
data: '2 years',
label: mw.message('2-years').text()
}, {
data: '3 years',
label: mw.message('3-years').text()
}]
});
// Create an input field for the block reason
var reasonInput = new OO.ui.MultilineTextInputWidget({
placeholder: mw.message('please-choose-block-rationale').text()
});
var reasonDropdown = new OO.ui.DropdownInputWidget({
options: [{
data: '',
label: mw.message('choose-reason').text()
}, {
data: 'Bot non autorisé',
label: mw.message('unauthorized-bots').text()
}, {
data: '[[WP:Guerre d\'édition|Guerre d\'édition]]',
label: mw.message('three-revert-rule-abuse').text()
}, {
data: 'Vandalisme',
label: mw.message('vandalism').text()
}, {
data: '[[Wikipédia:Pas de menace de poursuites judiciaires|Menace de poursuites judiciaires]]',
label: mw.message('threatening-legal-action').text()
}, {
data: 'Divulgation non autorisée d\'informations personnelles',
label: mw.message('disclosure-of-personal-information').text()
}, {
data: '[[Wikipédia:Droit d\'auteur|Violation des droits d\'auteur]]',
label: mw.message('copyright-violation').text()
}, {
data: '[[Wikipédia:Nom d\'utilisateur|Nom d\'utilisateur inapproprié]]',
label: mw.message('inappropriate-username').text()
}, {
data: '[[Wikipédia:Proxy ouvert|Proxy ouvert]]',
label: mw.message('anonymous-proxy').text()
}, {
data: 'Utilisation inappropriée de [[WP:Faux-nez]]',
label: mw.message('inappropriate-sockpuppetry').text()
}, {
data: '[[WP:Pas d\'attaque personnelle|Attaques personnelles ou insultes]]',
label: mw.message('personal-attacks').text()
}, {
data: 'Manquements aux [[WP:Règles de savoir-vivre|règles de savoir-vivre]]',
label: mw.message('incivility').text()
}]
});
// Add a listener for the change event of durationDropdown
durationDropdown.on('change', function(value) {
duration = value;
});
reasonDropdown.on('change', function(value) {
blockReason = value;
});
reasonInput.on('change', function(value) {
additionalReason = value;
});
// Create a fieldset to group the widgets
var fieldset = new OO.ui.FieldsetLayout({});
// Create checkboxes for additional block options
var preventAccountCreationCheckbox = new OO.ui.CheckboxInputWidget({
selected: true
}),
preventEmailSendingCheckbox = new OO.ui.CheckboxInputWidget({
selected: false
}),
preventEditOwnTalkPageCheckbox = new OO.ui.CheckboxInputWidget({
selected: false
}),
// Create a fieldset layout with fields for each checkbox.
additionalOptionsFieldset = new OO.ui.FieldsetLayout({
label: mw.message('additional-options').text(),
padded: true // Add padding
});
additionalOptionsFieldset.$element.addClass('additional-options-fieldset'); // Add a CSS class
mw.loader.addStyleTag(`
.additional-options-fieldset {
margin-top: 20px;
}
`);
additionalOptionsFieldset.addItems([
new OO.ui.FieldLayout(preventAccountCreationCheckbox, {
label: mw.message('prevent-account-creation').text(),
align: 'inline'
}),
new OO.ui.FieldLayout(preventEmailSendingCheckbox, {
label: mw.message('prevent-sending-email').text(),
align: 'inline'
}),
new OO.ui.FieldLayout(preventEditOwnTalkPageCheckbox, {
label: mw.message('prevent-editing-own-talk-page').text(),
align: 'inline'
}),
]);
preventAccountCreationCheckbox.on('change', function(selected) {
preventAccountCreationValue = selected;
});
preventEmailSendingCheckbox.on('change', function(selected) {
preventEmailSendingValue = selected;
});
preventEditOwnTalkPageCheckbox.on('change', function(selected) {
preventEditOwnTalkPageValue = selected;
});
// Add additional options fieldset to the main fieldset
fieldset.addItems([
new OO.ui.FieldLayout(durationDropdown, {
label: mw.message('block-duration').text(),
}),
new OO.ui.FieldLayout(reasonDropdown, {
label: mw.message('block-reason').text(),
}),
new OO.ui.FieldLayout(reasonInput, {
label: mw.message('other-reason').text(),
align: 'inline'
}),
additionalOptionsFieldset
]);
// Append fieldset to the document body
this.userBlockPanel.$element.append(fieldset.$element);
this.userBlockStackLayout = new OO.ui.StackLayout({
items: [this.userBlockPanel]
});
preventAccountCreationValue = preventAccountCreationCheckbox.isSelected();
preventEmailSendingValue = preventEmailSendingCheckbox.isSelected();
preventEditOwnTalkPageValue = preventEditOwnTalkPageCheckbox.isSelected();
this.$body.append(this.userBlockStackLayout.$element);
};
UserBlockDialog.prototype.getSetupProcess = function(data) {
return UserBlockDialog.super.prototype.getSetupProcess.call(this, data).next(function() {
this.actions.setMode('edit');
}, this);
};
UserBlockDialog.prototype.getActionProcess = function(action) {
if(action === 'help') {
this.actions.setMode('help');
this.stackLayout.setItem(this.panel2);
} else if(action === 'back') {
this.actions.setMode('edit');
this.userBlockStackLayout.setItem(this.userBlockPanel);
} else if(action === 'continue') {
var BlockingDialog = this;
return new OO.ui.Process(function() {
function CheckDurationAndRationaleMessageDialog(config) {
CheckDurationAndRationaleMessageDialog.super.call(this, config);
}
if(mwConfig.wgPageName.includes(mwConfig.wgUserName)) {
mw.notify(mw.message('you-can-not-block-yourself').text(), {
title: mw.msg('operation-completed'),
type: 'error'
});
BlockingDialog.close();
} else {
if(!duration || !blockReason) {
OO.inheritClass(CheckDurationAndRationaleMessageDialog, OO.ui.MessageDialog);
CheckDurationAndRationaleMessageDialog.static.name = 'myCheckDurationAndRationaleMessageDialog';
CheckDurationAndRationaleMessageDialog.static.actions = [{
action: 'okay',
label: mw.message('okay').text(),
flags: 'primary'
}, ];
CheckDurationAndRationaleMessageDialog.prototype.initialize = function() {
CheckDurationAndRationaleMessageDialog.super.prototype.initialize.apply(this, arguments);
this.content = new OO.ui.PanelLayout({
padded: true
});
this.content.$element.append(mw.message('please-select-block-duration-reason').text());
this.$body.append(this.content.$element);
};
CheckDurationAndRationaleMessageDialog.prototype.getBodyHeight = function() {
return 100;
};
CheckDurationAndRationaleMessageDialog.prototype.getActionProcess = function(action) {
var WarningDialog = this;
if(action === 'okay') {
WarningDialog.close();
}
return CheckDurationAndRationaleMessageDialog.super.prototype.getActionProcess.call(this, action);
};
var windowManager = new OO.ui.WindowManager();
$(document.body).append(windowManager.$element);
var WarningDialog = new CheckDurationAndRationaleMessageDialog();
windowManager.addWindows([WarningDialog]);
windowManager.openWindow(WarningDialog);
return;
} else {
// Gather input values
var username = mwConfig.wgRelevantUserName;
var allowusertalkValue = !preventEditOwnTalkPageValue;
// API request parameters
var params = {
action: 'block',
user: username,
expiry: duration,
reason: blockReason + (additionalReason ? '\xA0: ' + additionalReason : ''),
nocreate: preventAccountCreationValue,
allowusertalk: allowusertalkValue,
noemail: preventEmailSendingValue,
tags: 'Adiutor'
};
// Send API request
api.postWithToken('csrf', params).done(function(result) {
mw.notify(mw.msg('user-blocked'), {
title: mw.msg('operation-completed'),
type: 'success'
});
}).fail(function(error) {
mw.notify(error, {
title: mw.msg('operation-failed'),
type: 'error'
});
});
BlockingDialog.close();
}
}
});
}
return UserBlockDialog.super.prototype.getActionProcess.call(this, action);
};
UserBlockDialog.prototype.getBodyHeight = function() {
return this.userBlockPanel.$element.outerHeight(true);
};
var windowManager = new OO.ui.WindowManager();
$(document.body).append(windowManager.$element);
var BlockingDialog = new UserBlockDialog({
size: 'medium'
});
windowManager.addWindows([BlockingDialog]);
windowManager.openWindow(BlockingDialog);
/* </nowiki> */