Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/**
* @name FastBlock
* @version v1.0
* @author TheGoldenPatrik1
* @description Adds fully customizable buttons to quickly block users.
*/
require([
'wikia.window',
'jquery',
'mw',
'BannerNotification'
], function (window, $, mw, BannerNotification) {
'use strict';
var buttons = window.FastBlock,
$masthead = $('#UserProfileMasthead'),
$user = $masthead.find('.masthead-info h1').text(),
config = mw.config.get([
'wgUserGroups',
'wgUserName'
]),
i18n;
if (
window.FastBlockLoaded ||
!buttons ||
!Array.isArray(buttons) ||
buttons.length === 0 ||
!$masthead.exists() ||
!/sysop|staff|helper|global-discussions-moderator|wiki-manager|soap/.test(config.wgUserGroups) ||
$user === config.wgUserName
) {
return;
}
window.FastBlockLoaded = true;
/**
* @class Main
* @classdesc Main FastBlock class
*/
var Main = {
/**
* @method init
* @description Creates the buttons
* @param {Object} i18nData - I18n-js data
* @returns {void}
*/
init: function (i18nData) {
i18n = i18nData;
$masthead.find('.masthead-info-lower').append(
$('<br/>')
);
buttons.forEach(function (b) {
if (!b.expiry || !b.reason || !b.label) {
console.warn('FastBlock: please specify an expiry, reason, and label.');
return;
}
$.each(b, function (k, v) {
if (typeof v === 'string') {
b[k] = v.trim();
}
});
$masthead.find('.masthead-info-lower').append(
$('<a>', {
'title': i18n.msg('title', b.expiry, b.reason).plain(),
'data': {
'expiry': b.expiry,
'reason': b.reason,
'nocreate': b.nocreate,
'autoblock': b.autoblock
},
'class': 'wds-button wds-is-secondary',
'id': 'fast-block',
'css': {
'margin': '2px'
},
'text': b.label,
'click': Main.click
})
);
});
},
/**
* @method click
* @description Button click event
* @returns {void}
*/
click: function () {
if (!confirm(i18n.msg('confirm').plain())) {
return;
}
var data = $(this).data();
console.log(data);
Main.blockUser(data);
},
/**
* @method blockUser
* @description Blocks the user
* @param {Object} d - The button data
* @returns {void}
*/
blockUser: function (d) {
new mw.Api().post({
action: 'block',
user: $user,
expiry: d.expiry,
nocreate: d.nocreate || 0,
autoblock: d.autoblock || 0,
reason: d.reason,
bot: true,
token: mw.user.tokens.get('editToken')
}).done(function (d) {
if (d.error) {
Main.notif(
i18n.msg('error', d.error.code).plain(),
'error'
);
} else {
Main.notif(
i18n.msg('success', $user).parse(),
'confirm'
);
}
});
},
/**
* @method notif
* @description Shows a BannerNotification
* @param {String} text - The notif text
* @param {String} type - The notif type
* @returns {void}
*/
notif: function (text, type) {
new BannerNotification(
text,
type
).show();
}
};
mw.hook('dev.i18n').add(function (lib) {
$.when(
lib.loadMessages('FastBlock'),
mw.loader.using([
'mediawiki.api',
'mediawiki.user',
'mediawiki.util'
])
).then(Main.init);
});
});