MediaWiki:Group-sysop.js
Appearance
This is the JavaScript for admins only. Any changes to this page should first be proposed on its talk page or the Village pump.
Please note that changes are visible within minutes. Errors you make here can disrupt the entire encyclopedia, so make sure you know what you are doing. Testing can be done on your personal common.js or skin-specific JS file. |
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// <nowiki>
$(function () {
// Opt-out
if ( window.disableSysopJS ) {
return;
}
/**
* Automatic deletion dropdown
*
* Looks for CSD/XFD/PROD templates on a page; if one is present, picks up
* the deletion reason that's hidden on the template and tweaks the 'delete'
* tab link to preload that deletion summary.
*
* Maintainers: Happy-melon
*/
(function () {
var link, reason;
if (document.getElementById('ca-delete') && document.getElementById('delete-criterion')) {
link = document.getElementById('ca-delete').getElementsByTagName('A')[0];
reason = document.getElementById('delete-reason').innerHTML;
link.setAttribute('href' , link.getAttribute('href') + '&wpReason=' + reason);
}
})();
/**
* Sensitive IP checker
*
* Notify admins when they might block a sensitive IP address. IP addresses
* may be classed as sensitive for political reasons, or because they
* affect bots or other technical services which Wikipedia uses. See
* [[WP:SIP]] for more details.
*
* Maintainers: Mr. Stradivarius
*/
if (mw.config.get('wgCanonicalSpecialPageName') === 'Block' || mw.config.get('wgCanonicalSpecialPageName') === 'Contributions') {
// Load dependencies.
mw.loader.using([
'ext.gadget.libSensitiveIPs',
'mediawiki.api',
'mediawiki.util',
'mediawiki.jqueryMsg',
]).then( function() {
// Check whether we have a valid IP address or CIDR range, and exit
// if not. (If the second argument to isIPAddress is true, then
// CIDR ranges are allowed as well.)
// Can't use wgRelevantUserName, it isn't defined for IP ranges: [[phab:T206954]]
if (mw.config.get('wgCanonicalSpecialPageName') === 'Block') {
$ip = $('input[name=wpTarget]');
} else if (mw.config.get('wgCanonicalSpecialPageName') === 'Contributions') {
$ip = $('input[name=target]');
}
if (!$ip.length || !mw.util.isIPAddress($ip.val(), true)) {
return;
}
// Test whether the IP or range is sensitive.
mw.libs.sensitiveIPs.query({
test: [$ip.val()]
}).then(function (data) {
var match = data.sensitiveips.matches[0],
description,
$msg;
if (!match) {
// The IP address or range is not sensitive, so exit.
return;
}
// The IP or range is sensitive, so notify the user. First,
// get the description of the entity the IP or range belongs
// to.
description = data.sensitiveips.entities[match['entity-id']].description;
if (!description) {
throw new Error('No description found for entity with code "' + match['entity-id'] + '"');
}
// Vary message according to page
var action = mw.config.get('wgCanonicalSpecialPageName') === 'Block' ? 'blocking' : 'viewing';
// Set the message text. The description is in wikitext, so
// we set the whole message as wikitext and then parse it into
// HTML with message.parse().
mw.messages.set({
'sysop-sensitive-ip-block-warning': 'You are ' + action +
' a sensitive IP address belonging to ' +
description +
'. Please be sure to ' +
'[[meta:Communications committee/Notable blocks|notify]] the ' +
'[[meta:Communications committee|Wikimedia Foundation Communications Committee]] ' +
'immediately if blocked.'
});
// Assemble the message to notify the user with.
$msg = $('<table>').append(
$('<tr>').append(
$('<td>').css({'vertical-align':'center'}).append(
$('<img>').attr({'src': '//upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Nuvola_apps_important.svg/48px-Nuvola_apps_important.svg.png'})
)
).append(
'<td>' + mw.message('sysop-sensitive-ip-block-warning').parse() + '</td>'
)
);
// Send the notification.
mw.notify($msg);
});
});
}
});
// </nowiki>