MediaWiki:Gadget-cvuform-core.js
Jump to navigation
Jump to search
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)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/**<nowiki>
* Adds a 'Report a vandal' button to the CVU page
*
* This gadget is enabled on mobile. Please make sure that any code used here
* also works on mobile.
*/
var conf = mw.config.get([
'wgArticlePath',
'wgPageName',
'wgScriptPath',
'wgRestrictionEdit',
'wgUserGroups',
'wgScript'
]);
function showSuccess() {
OO.ui.alert( 'Thanks for your submission. The page will now be reloaded.' ).done( function () {
document.location.replace(conf.wgArticlePath.replace('$1', conf.wgPageName));
} );
}
function showError(msg) {
OO.ui.alert( msg );
}
function callAPI(data, method, callback) {
data['format'] = 'json';
$.ajax({
data: data,
dataType: 'json',
url: conf.wgScriptPath + '/api.php',
type: method,
success: function(response) {
if (response.error)
showError('API error: ' + response.error.info);
else
callback(response);
},
error: function(xhr, error) { showError('AJAX error: ' + error); }
});
}
function cvuSubmit(editor) {
callAPI({
'action': 'query',
'prop': 'info|revisions',
'intoken': 'edit',
'titles': conf.wgPageName,
'rvprop': 'content',
'rvlimit': '1',
'indexpageids': 'true',
}, 'GET', function(response) {
var page = response.query.pages[response.query.pageids[0]];
var content = page.revisions[0]['*'];
var template = '\{\{cvuid\|insert vandal\}\}';
if (content.match(template) === null)
showError('An error occurred.');
content = content.replace(template, '{' + '{cvuid|' + editor + '}' + '}');
callAPI({
'minor': 'yes',
'summary': 'Reported new user: [' + '[Special:Contributions/' + editor + '|' + editor + ']' + ']',
'action': 'edit',
'title': conf.wgPageName,
'basetimestamp': page.revisions[0].timestamp,
'startimestamp': page.starttimestamp,
'token': page.edittoken,
'text': content
}, 'POST', function(response) {
if (response.edit.result == 'Success')
showSuccess();
else
showError('An error occurred while submitting the edit.');
});
});
return false;
}
if(conf.wgPageName=='GSWiki:Counter-Vandalism_Unit') {
var $div = $('#cvu_guide');
var $p = $('<p />');
var ppLink = 'Due to vandalism, this page has been <a href="' + conf.wgArticlePath.replace('$1', 'GS:PP') + '">protected</a> from editing.';
if ($.inArray('sysop', conf.wgRestrictionEdit) > -1 && $.inArray('sysop', conf.wgUserGroups) == -1)
$p.append($('<p />').append(ppLink + ' Please <a href="' + conf.wgArticlePath.replace('$1', 'GS:AR') + '">contact an administrator</a>.'));
else if ($.inArray('autoconfirmed', conf.wgRestrictionEdit) > -1 && $.inArray('autoconfirmed', conf.wgUserGroups) == -1)
$p.append($('<p />').append(ppLink + ' Please <a href="' + conf.wgScript + '?title=Special:UserLogin&returnto=' + conf.wgPageName + '">log in</a> to report users.'));
else {
var button = new OO.ui.ButtonWidget( {
label: 'Report a vandal',
icon: 'alert',
title: 'Reports a new vandal to the CVU'
} );
$p.append(button.$element
.click(function () {
new OO.ui.prompt( 'Enter a username', { textInput: { placeholder: 'Username' } } ).done( function ( result ) {
if ( result !== null && result !== '' ) {
cvuSubmit(result);
}
} );
})
);
}
if ($div !== null)
$div.empty().append($p);
$("span").each(function() {
var name = this.className;
if(this.id == 'cvu_remove' && this.className != 'insert vandal') {
var $img1 = $("<img>").attr('src', conf.wgArticlePath.replace('$1', 'Special:FilePath/Yes_check.png'));
$img1.attr('width', '15').attr('height', '16').attr('title', 'Remove this user as blocked').css('cursor', 'pointer');
$img1.click(function() {
removeUser(name.replace(/ /g,"_").replace(/-/g,"."), "blocked");
});
var $img2 = $("<img>").attr('src', conf.wgArticlePath.replace('$1', 'Special:FilePath/X_mark.png'));
$img2.attr('width', '15').attr('height', '16').attr('title', 'Disregard this report').css('cursor', 'pointer');
$img2.click(function() {
removeUser(name.replace(/ /g,"_").replace(/-/g,"."), "");
});
$(this).append(" ").append($img1).append($img2);
}
});
}
function removeUser(user, state) {
var template = '\{\{cvuid\|' + user.split("_").join(" ") + '(\|.*?)?\}\}';
callAPI({
'action': 'query',
'prop': 'info|revisions',
'intoken': 'edit',
'titles': conf.wgPageName,
'rvprop': 'content',
'rvlimit': '1',
'indexpageids': 'true'
}, 'GET', function(response) {
var page = response.query.pages[response.query.pageids[0]];
var content = page.revisions[0]['*'];
if (content.match(template) === null) {
showError('An error occurred.');
return;
}
content = content.replace('{' + '{cvuid|' + user.split("_").join(" "), '{' + '{cvuid|insert vandal}' + '}');
content = content.replace(/\}\}(\|.*?)?\}\}/, '}' + '}');
var summary = '[' + '[Special:Contributions/' + user + '|' + user.split("_").join(" ") + ']' + ']';
if(state == "blocked")
summary += ' has been blocked.';
else
summary += ' has not been blocked.';
callAPI({
'minor': 'yes',
'summary': summary,
'action': 'edit',
'title': conf.wgPageName,
'basetimestamp': page.revisions[0].timestamp,
'startimestamp': page.starttimestamp,
'token': page.edittoken,
'text': content
}, 'POST', function(response) {
if (response.edit.result != 'Success')
showError('An error occurred while submitting the edit.');
else
document.location.replace(conf.wgArticlePath.replace('$1', conf.wgPageName));
});
});
}
// </nowiki>