mNo edit summary |
mNo edit summary |
||
Line 1: | Line 1: | ||
+ | importArticles({ |
||
+ | type: 'script', |
||
+ | articles: [ |
||
+ | 'u:dev:MediaWiki:UserAndIPTools.js', |
||
+ | ] |
||
+ | }); |
||
importArticles({ |
importArticles({ |
||
type: 'script', |
type: 'script', |
Revision as of 06:29, 26 February 2020
importArticles({
type: 'script',
articles: [
'u:dev:MediaWiki:UserAndIPTools.js',
]
});
importArticles({
type: 'script',
articles: [
'u:dev:MediaWiki:UserInfo.js',
]
});
importArticles({
type: 'script',
articles: [
'u:dev:QuickContribs/code.js'
]
});
importArticle({
type: 'script',
article: 'u:dev:MediaWiki:AdminDashboard block/code.js',
});
var MessageBlock = {
title : 'Blocked',
message : 'You have been blocked for $2 for $1.',
autocheck : true
};
importArticles({
type: 'script',
articles: [
'u:dev:MessageBlock/code.js'
]
});
importArticles({
type: 'script',
articles: [
'u:dev:MediaWiki:ArchiveTool/code.js',
]
});
importArticles({
type: 'script',
articles: [
'u:dev:MediaWiki:PowerDelete/code.js',
]
});
importArticles({
type: 'script',
articles: [
'u:dev:MediaWiki:AjaxDiff/code.js',
]
});
importArticles({
type: 'script',
articles: [
'u:dev:MediaWiki:CategoryRenameAuto-update/code.js',
]
});
importArticles({
type: 'script',
articles: [
'u:dev:MediaWiki:MultiUpload/code.js',
]
});
importArticles({
type: 'script',
articles: [
'u:dev:MediaWiki:AjaxEdit.js',
]
});
/* Redirect to base page if ends with '/' */
if (window.location.href.match("/$")) {
window.location.href = window.location.href.slice(0, -1);
}
/* Disable 5 sec edit save delay */
GlobalTriggers.bind("WikiaEditorReady", function(point) {
if (point.controls) {
point.controls.editform.off("submit").on("submit", function() {
point.setState(3);
});
}
});
/* Standard Edit Summary config */
window.dev = window.dev || {};
window.dev.editSummaries = {
select: [
'(click to browse)',
'Quick', [
'Credit to the wikia watchers',
'Redlink removal',
'Duplicate image',
'Removing vandalism',
'Fixing error(s)',
'Corrected spelling/grammar',
'Corrected formatting/layout'
],
'General', [
'Testing',
'Testing (will revert shortly if fails)',
'Testing complete',
'Added/removed/corrected wikilink(s)',
'Added/removed/corrected interwiki link(s)',
'Added/removed/corrected external link(s)',
'Cleanup',
'Comment',
'Correction(s), coding',
'Expanded',
'Formatting',
'Grammar',
'Headings (adjusting, etc.)',
'HTML → wikicode',
'Layout',
'Mini-wikifying',
'Punctuation',
'Redlink removal',
'Refactoring',
'Removing RTE refuse',
'Re-ordering/re-organizing',
'Reply',
'Revised',
'Signing',
'Spelling',
'Style/layout',
'Suggestion',
'Tidying',
'Updating',
'Wikifying',
'Factual correction',
'Added/removed/corrected sources/appearances'
],
'Removal/Reversion', [
'Reverted vandalism',
'Reverted test edit',
'Reverted vanity edit',
'Removed fanon',
'Removed libel/slander',
'Removed copyvio',
'Removed spam'
],
'Templates', [
'Added/removed/corrected template(s)',
'Added/removed/corrected infobox(es)',
'Substituting template(s)',
],
'Categories', [
'Added category(ies)',
'Alphabetised category(ies)',
'Creating Category page',
'Modified category(ies)',
'Removed category(ies)',
'Removed defunct category(ies)',
'Removed duplicate category(ies)'
],
'Images/Files', [
'Adding image(s)',
'Modifying image(s)'
]
]
};
/* Show bot edits on RecentChanges */
if (wgPageName == "Special:RecentChanges") {
if (window.location.href.indexOf("hidebots=") == -1 && window.location.href.indexOf("?") == -1) {
window.location.href = window.location.href + "?hidebots=0";
} else if (window.location.href.indexOf("hidebots=") == -1 && window.location.href.indexOf("?") !== -1) {
window.location.href = window.location.href + "&hidebots=0";
}
} else if (wgPageName == "Special:Newwikis") {
if (window.location.href.indexOf("language=") == -1 && window.location.href.indexOf("?") == -1) {
window.location.href = window.location.href + "?language=en";
} else if (window.location.href.indexOf("language=") == -1 && window.location.href.indexOf("?") != -1) {
window.location.href = window.location.href + "&language=en";
}
}
/* Block links */
$(function() {
if ($('#UserProfileMasthead').length) {
$('.tag-container').after('<a class="tag" style="float: right; color: white !important; top: 10px;" href="/wiki/Special:Block/' + $('[itemprop="name"]').text() + '">Block</a>');
}
// Threads
if (wgNamespaceNumber != 1201) return;
for (var i in $('.msg-toolbar')) {
var usr = $('.msg-toolbar:eq(' + i + ')').parent().find('.edited-by a').text();
$('.msg-toolbar:eq(' + i + ')').find('.WikiaMenuElement li').last().before('<li><a href="/wiki/Special:Block/' + usr + '">Block</a></li>');
}
});
/* Add gender tag to global masterhead */
$(function() {
if($("#UserProfileMasthead").length === 0) {
return;
}
mw.loader.using('mediawiki.api').then(function() {
new mw.Api().get({
action: 'parse',
text: '{{gender:' + $('.masthead-info h1').text() + '|male|female|thisisjustsomethingstupid}}'
}).done(function(d) {
if(d.parse.text['*'].indexOf('thisisjustsomethingstupid') === -1) {
$('.masthead-info hgroup').append('<span class="tag">' + d.parse.text['*'] + '</span>');
}
});
});
});
/* Create user page on link click */
$('<li>', {id: 'qcup',})
.html('<a href="#">Create user page</a>') //create the link
.prependTo('#my-tools-menu') //put it in the toolbar
.click(function() { //when clicked
$.ajax( { //create the userpage
type: 'POST',
url: mw.util.wikiScript( 'api' ),
dataType: 'json',
data: {
action: 'edit',
title: 'User:Dominic1743', //at this page
summary: 'Creating user page (script)', //with this edit summary
text: '{{w:User:Dominic1743}}', //using this tempalte
format: 'json',
token: mw.user.tokens.get( 'editToken' )
}
} ).done( function ( data ) {
if ( data.edit.result === 'Success' ) {
new BannerNotification("Successfully created user page!","confirm").show(); //say we created the page
} else {
new BannerNotification("An error occurred while creating user page.","error").show(); //say we didn't create the page
}
} ).fail( function ( data ) {
new BannerNotification("An error occurred while creating user page.","error").show(); //say we didn't create the page
} );
});
/* Create message wall greeting on link click */
$.ajax({
type: 'HEAD', //see if
url: wgServer + '/wiki/Message_Wall:Dominic1743', //my message wall exists
success: function() { //if it exists
$('<li>', {id: 'qcmwg',})
.html('<a href="#">Create Greeting</a>') //create the link
.prependTo('#my-tools-menu') //put it in the my tools menu on the toolbar
.click(function() { //when clicked
$.ajax( { //create the message wall greeting
type: 'POST',
url: mw.util.wikiScript( 'api' ),
dataType: 'json',
data: {
action: 'edit',
title: 'Message_Wall_Greeting:Dominic1743', //at this page
summary: 'Creating message wall greeting (script)', //with this edit summary
text: '{{w:User:Dominic1743/MessageWallGreeting}}', //using this template
format: 'json',
token: mw.user.tokens.get( 'editToken' )
}
} ).done( function ( data ) {
if ( data.edit.result === 'Success' ) {
new BannerNotification("Successfully created message wall greeting!","confirm").show(); //say we created the page
} else {
new BannerNotification("An error occurred creating while message wall greeting.","error").show(); //say we didn't create the page
}
} ).fail( function ( data ) {
new BannerNotification("An error occurred while creating message wall greeting.","error").show(); //say we didn't create the page
} );
});
},
error: function() { //if it doesn't exist
return; //do nothing
}
});
/* Revert buttons */
//@author-Prince(ss)_Platinum (http://community.wikia.com/wiki/User:Prince(ss)_Platinum/vda.js)
// Reverting tools V6.6 Gold (Original coding by VegaDark, modified by Ajraddatz and Manyman)
function getElementsByClass(searchClass,node,tag) {
// Function from http://www.dustindiaz.com/getelementsbyclass/
var classElements = new Array();
if ( node === null )
node = document;
if ( tag === null )
tag = '*';
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
for (i = 0, j = 0; i < elsLen; i++) {
if ( pattern.test(els[i].className) ) {
classElements[j] = els[i];
j++;
}
}
return classElements;
}
// _GET code from NoGray JS Library http://www.nogray.com/new_site/
var _GET = new Array();
var _uri = location.href;
var _temp_get_arr = _uri.substring(_uri.indexOf('?')+1, _uri.length).split("&");
var _temp_get_arr_1 = new Array();
for(_get_arr_i=0; _get_arr_i<_temp_get_arr.length; _get_arr_i++){
_temp_get_arr_1 = _temp_get_arr[_get_arr_i].split("=");
_GET[decodeURI(_temp_get_arr_1[0])] = decodeURI(_temp_get_arr_1[1]);
}
delete _uri; delete _temp_get_arr; delete _temp_get_arr_1;
function getMessage (where, user1, user2) {
var message = prompt ('Enter undo message below:', '');
window.location = 'http://'+ location.hostname + '/index.php?title=' + _GET['title'] + '&action=edit&oldid=' + _GET['oldid'] + '&'+where+'=2&user1='+user1+'&user2='+user2+'&message='+message;
}
function AGFMessage (where, user1, user2) {
var message = prompt ('Enter undo message below:', '');
window.location = 'http://'+ location.hostname + '/index.php?title=' + _GET['title'] + '&action=edit&oldid=' + _GET['oldid'] + '&'+where+'=3&user1='+user1+'&user2='+user2+'&message='+message;
}
addOnloadHook(function (){
if (location.href.match(/diff=/)) {
// Get username of submitter
var user1 = getElementsByClass('diff-otitle',null,'td'); user1 = user1[0].getElementsByTagName('a')[2].innerHTML;
var user2 = getElementsByClass('diff-ntitle',null,'td'); user2 = user2[0].getElementsByTagName('a')[3].innerHTML;
$('#mw-content-text').prepend('<div style="text-align: center" id="vda-cont"></div>');
document.getElementById('vda-cont').innerHTML = '<b><a class="wikia-button" href="javascript:var message = getMessage(\'revert\', \''+user1+'\', \''+user2+'\');">Custom</a></b> <b><a class="wikia-button" href="http://'+ location.hostname + '/index.php?title=' + _GET['title'] + '&action=edit&oldid=' + _GET['oldid'] +
'&revert=3&user1='+user1+'&user2='+user2+'">Speculation</a></b> <b><a class="wikia-button" href="http://'+ location.hostname + '/index.php?title=' + _GET['title'] + '&action=edit&oldid=' + _GET['oldid'] +
'&revert=1&user1='+user1+'&user2='+user2+'">Revert (Vandalism)</a></span></b> <b><a class="wikia-button" href="http://'+ location.hostname + '/index.php?title=' + _GET['title'] + '&action=edit&oldid=' + _GET['oldid'] +
'&revert=6&user1='+user1+'&user2='+user2+'">Revert (Good faith)</a></span></b> <b><a class="wikia-button" href="http://'+ location.hostname + '/index.php?title=' + _GET['title'] + '&action=edit&oldid=' + _GET['oldid'] +
'&revert=4&user1='+user1+'&user2='+user2+'">Revert (Spam)</a></span></b>' +
'';
} else if (location.href.match(/revert=1/)) {
document.getElementById('wpSummary').value = 'Reverted vandalism';
document.getElementById('editform').submit();
} else if (location.href.match(/revert=6/)) {
document.getElementById('wpSummary').value = 'Reverted good faith edits';
document.getElementById('editform').submit();
} else if (location.href.match(/revert=3/)) {
document.getElementById('wpSummary').value = 'Speculation';
document.getElementById('editform').submit();
} else if (location.href.match(/revert=2/)) {
document.getElementById('wpSummary').value = '' +_GET['message']+ '';
document.getElementById('editform').submit();
} else if (location.href.match(/revert=4/)) {
document.getElementById('wpSummary').value = 'Reverted spam';
document.getElementById('editform').submit();
}
});
/* AjaxBlock config */
window.AjaxBlock = {
blockReasons: {
'[[w:Help:Vandalism|Vandalism]]': 'Vandalism',
'[[w:Help:Spam|Spam]]': 'Spam',
'Repeated policy violations': 'Repeated violations',
'Sockpuppetry/Ban Evasion': 'Sockpuppetry',
'Moved to a new account': 'Moved',
'Removing content/blanking pages': 'Page blanking',
'Inserting false information or nonsense': 'Gibberish',
'Intimidating behaviour/harassment/trolling': 'Troll/Harassment',
'Unacceptable username, avatar, or global masthead': 'Name/avatar',
'Under the legal age': 'COPPA',
'Failing to comply with the [[Project:File Policy|File Policy]]': 'File Policy',
'Posting/Discussing leaked content': 'Leaks'
},
check: {
creation: true,
talk: true,
autoBlock: true,
override: true
}
};
/* Show removed replies */
$(".message-removed.hide").removeClass("hide").each(function() {
var $this = $(this),
id = $this.attr('data-id'),
relativeid = $this.attr('id'),
isBoardThread = !!$('.voting-controls').length,
Api = new mw.Api();
Api.get({
action: 'query',
prop: 'revisions',
rvprop: 'timestamp|user',
pageids: id,
rvlimit: 500
}).done(function(ts) {
var rev = ts.query.pages[id].revisions[0],
name = rev.user,
time = rev.timestamp,
d = new Date(time),
// this may be a readable string, but the code certainly isn't :P
readableTime = d.getHours() + d.getTimezoneOffset() / 60 + ':' + d.getMinutes() + ', ' + wgMonthNames[d.getMonth() + 1] + ' ' + d.getDate() + ', ' + d.getFullYear();
$.get('/api/v1/User/Details', {
ids: name,
size: 50
}).done(function(avi) {
avi = avi.items[0].avatar;
Api.get({
action: 'parse',
pageid: id
}).done(function(d) {
var html = d.parse.text['*'],
$avatar = $('<div>', {
class: 'speech-bubble-avatar'
}).append($('<a>', {
href: wgArticlePath.replace('$1', 'Message_Wall:' + name),
append: $('<img>', {
src: avi,
width: '30',
height: '30',
class: 'avatar',
alt: name
})
})),
$msg = $('<div>', {
class: 'speech-bubble-message'
}).append($('<div>', {
class: 'MiniEditorWrapper',
'data-min-height': '100',
'data-max-height': '400',
append: [
$('<div>', {
class: 'edited-by',
append: [
$('<a>', {
text: name,
href: wgArticlePath.replace('$1', 'Message_Wall:' + name)
}),
$('<a>', {
class: 'subtle',
href: wgArticlePath.replace('$1', 'Message_Wall:' + name)
})
]
}),
$('<div>', {
class: 'editarea',
'data-space-type': 'editarea',
append: [
$('<div>', {
class: 'msg-body',
id: 'WallMessage_' + id,
html: html
}),
$('<div>', {
class: 'loading-indicator',
'data-space-type': 'loading-status',
append: [
$('<div>', {
class: 'loading-background'
}),
$('<div>', {
class: 'loading-message',
append: [
$('<span>', {
class: 'loading-throbber',
html: ' '
}),
$('<span>', {
class: 'loading-text',
html: 'Loading editor'
})
]
})
]
})
]
}),
$('<div>', {
class: 'toolbar',
'data-space-type': 'toolbar'
}),
$('<div>', {
class: 'msg-toolbar',
append: [
$('<div>', {
class: 'timestamp',
append: $('<a>', {
class: 'permalink',
tabindex: '-1',
href: '#' + relativeid,
append: [
$('<span>', {
class: 'timeago abstimeago',
title: time,
alt: readableTime,
each: function() {
$(this).timeago();
}
}),
$('<span>', {
class: 'timeago-fmt',
text: readableTime
})
]
})
})/*, not adding buttons coz it's way too hard (also idk why you'd want to quote a removed message)
$('<div>', {
class: 'buttonswrapper',
append: the_buttons :P
})*/
]
})
]
}));
$this.append($avatar, $msg);
console.log(d);
});
});
});
});
/* PageCreator config */
window.pageCreatorAvatar = true;
window.pageCreatorTimestamp = true;
window.pageCreatorNamespaces = Object.keys(mw.config.get("wgFormattedNamespaces")).map(Number);
/* LastEdited config */
window.lastEdited = {
namespaces: {
include: Object.keys(mw.config.get("wgFormattedNamespaces")).map(Number)
}
};
/* Imports */
importArticles({
type: "script",
articles: [
'u:dev:MediaWiki:AjaxBatchDelete/code.js',
'u:dev:MediaWiki:AjaxBatchDelete/code.2.js',
'u:dev:MediaWiki:AjaxBatchUndelete.js',
'u:dev:MediaWiki:CatFilter/code.js',
'u:dev:MediaWiki:CategoryRenameAuto-update/code.js',
'u:dev:MediaWiki:FastDelete/code.js',
'u:dev:MediaWiki:CacheCheck/code.js',
'u:dev:MediaWiki:MarkBlocked.js',
'u:dev:MediaWiki:AjaxRC/code.js',
'u:dev:MediaWiki:AnchoredRollback/code.js',
'u:dev:MediaWiki:AjaxDelete/code.js',
'u:dev:MediaWiki:AjaxPatrol/code.js',
'u:dev:MediaWiki:LastEdited/code.js',
'u:dev:MediaWiki:AjaxUndo/code.js',
'u:dev:MediaWiki:PageCreator/code2.js',
'u:dev:MediaWiki:HoverEditCount/code.js',
'u:dev:MediaWiki:UserAccountAge/code.js',
'u:dev:MediaWiki:ContribsLink/code.js',
'u:dev:MediaWiki:DupImageList/code.js',
'u:dev:MediaWiki:DisplayTimer/code.js',
'u:dev:MediaWiki:CodeQuickLinks/code.js',
'u:dev:MediaWiki:Linksweeper/code.js',
'u:dev:MediaWiki:WorkingMoreUsersCount.js',
'u:dev:MediaWiki:ToggleSideBar/code.js',
'u:dev:MediaWiki:WHAM/code.2.js',
'u:dev:MediaWiki:FastOldImageDelete/code.js',
'u:dev:MediaWiki:ListFiles/code.js',
'u:dev:MediaWiki:WallGreetingButton/code.js',
'u:dev:MediaWiki:MassCreate/code.js',
'u:dev:MediaWiki:MassProtect/code.js',
'u:dev:MediaWiki:MassNullEdit/code.js',
'u:dev:MediaWiki:MassRename/code.js',
'u:dev:MediaWiki:MassRenameRevert/code.js',
'u:dev:MediaWiki:FileUsageAuto-update/code.js',
'u:dev:MediaWiki:PageRenameAuto-update/code.js',
'u:dev:MediaWiki:QuickToolsv2/code.js',
'u:dev:MediaWiki:OldFilePages/code.js',
'u:dev:MediaWiki:Rollback/code.2.js',
'u:dev:MediaWiki:Standard_Edit_Summary/code.js',
'u:dev:MediaWiki:Thread Inspection/code.js',
'u:dev:MediaWiki:SeeMoreActivityButton/code.js',
'u:dev:MediaWiki:RecentChangesMultiple/code.2.js',
'u:kocka:MediaWiki:AjaxCommentDelete/code.js',
'u:kocka:MediaWiki:AjaxThreadDelete/code.js',
'u:kocka:User:KockaAdmiralac/UnhideUserMasthead.javascript',
'u:admintools:MediaWiki:Common.js/extraRollbacks.js',
'u:admintools:MediaWiki:Common.js/Maintenance.js',
'u:noreply:MediaWiki:HideWikiaLogs.js',
'u:noreply:MediaWiki:FileUsage.js',
'u:starmanw:User:Dorumin/QuickLogs',
'u:dev:MediaWiki:WhatLinksHere/code.js',
'u:dev:MediaWiki:MultipleFileDelete/code.js',
'u:dev:MediaWiki:MassEdit/code.js',
'u:dev:MediaWiki:PurgeButton/code.js',
'u:dev:MediaWiki:AjaxBatchDelete.js',
'u:dev:MediaWiki:HistoryKey/code.js',
]
});
//<nowiki>
/*
* Mass Categorization
* @description (De)Categorize listed multiple pages.
* @author Ozuzanna
* @TODO fix replace
* Added option for <noinclude></include> (Dessamator)
*/
;(function($, mw) {
if ($('#t-mc').length)
return;
//<option value="3">Replace</option> \
var FormMC = '\
<form method="" name="" class="WikiaForm "> \
<fieldset> \
<p>Mode: \
<select id="select-mc"> \
<option value="1">Add</option> \
<option value="2">Remove</option> \
</select> \
</p> \
<p>Category: \
<input type="text" id="category-name" value="" /> \
<p>Matching: \
<br/> \
<label for="normal-removal"><input type="radio" id="normal-removal" name="mass-categorization-removal" value="1" checked="checked"/>General (does not account for piped categories)</label> \
<br/> \
<label for="broad-removal"><input type="radio" id="broad-removal" name="mass-categorization-removal"/ value="2">Broad (also match possible further characters of the specified category e.g. Foo and Foo123, but takes care of pipes)</label> \
<p> \
<br/> \
<label for="no-include"><input type="checkbox" id="no-include" name="mass-categorization-noinclude"/ value="1">Do not include in transclusion (for templates)</label> \
</p> \
<br/> \
<p>Put the name of each page you want to categorize on a <b>separate line</b>.</p> \
<textarea style="height: 20em; width: 80%;" id="text-categorization"/> \
</fieldset> \
<div id="text-error-output" style="height:10em; width: 80%; margin: 5px auto 0px auto; color: #000; background-color: #ffbfbf; height: 150px; border: 1px solid black; font-weight: bold; overflow: scroll">Any errors encountered will appear below<br/></div> \
</form>',
delay = window.massCategorizationDelay || 500;
//Support for Monobook
if (mw.config.get('skin') === 'monobook') {
mw.util.addPortletLink('p-tb', '#', 'Mass Categorization', 't-mc');
} else {
$('#my-tools-menu').prepend('<li class="custom"><a style="cursor:pointer" id="t-mc">Mass Categorization</a></li>');
}
document.getElementById('t-mc').addEventListener('click', function () {
$.showCustomModal('Mass Categorization', FormMC, {
id: 'form-categorization',
width: 500,
buttons: [{
message: 'Cancel',
handler: function() {
$('#form-categorization').closeModal();
}
}, {
message: 'Add category contents',
defaultButton: true,
handler: function() {
addCategoryContents();
}
}, {
id: 'start-button',
message: 'Initiate',
defaultButton: true,
handler: function () {
init();
}
}]
});
});
function addCategoryContents() {
var category = prompt('Please enter the category name (no category prefix):').replace('_',' ');
new mw.Api().get({
action: 'query',
list: 'categorymembers',
cmtitle: "Category:"+category,
cmlimit: 5000
})
.done(function(d) {
if (!d.error) {
var data = d.query;
if (data.categorymembers) {
for (var i in data.categorymembers) {
$('#text-categorization').append(data.categorymembers[i].title+'\n');
}
}
else {
$('#text-error-output').append(category + ' does not exist!\n');
}
}
else {
$('#text-error-output').append('Failed to get contents of '+ category +' : '+ d.error.code +'<br/>');
}
})
.fail(function() {
$('#text-error-output').append('Failed to get contents of '+ category +'!<br/>');
});
}
function init() {
var catName = document.getElementById('category-name').value,
txt = document.getElementById('text-categorization'),
pages = txt.value.split('\n'),
page = pages[0];
if (!catName) {
alert('Please enter the category name!');
return;
}
document.getElementById('start-button').setAttribute('disabled','disabled');
if (!page) {
document.getElementById('start-button').removeAttribute("disabled");
$.showCustomModal('Finished!', 'Nothing left to do, or next line is blank.', {
id: 'form-complete',
width: 200,
buttons: [{
message: 'Close',
defaultButton: true,
handler: function() {
$('#form-complete').closeModal();
}
}]
});
}
else {
categorize(page,catName);
}
pages = pages.slice(1,pages.length);
txt.value = pages.join('\n');
}
function categorize(pageToCat,cat) {
var actionVal = $('#select-mc').val();
if (actionVal == 1) {
//add category
new mw.Api().get({
format: 'json',
action: 'query',
titles: pageToCat,
prop: 'categories'
})
.done(function(d) {
var pages = d.query.pages;
for (var page in pages) {
var mPage = pages[page],
knownCats = [];
if (mPage.categories) {
for (var i = 0; i < mPage.categories.length; i++) {
knownCats.push(mPage.categories[i].title);
}
}
}
cat = 'Category:'+ cat.charAt(0).toUpperCase() + cat.substring(1);
if (knownCats.indexOf(cat) === -1 || knownCats === 'undefined') {
var sPrefix="";
var sSuffix = "";
if ($('input[name=mass-categorization-noinclude]').prop('checked')){
// sPrefix ="<noinclude>\n";
// sSuffix = "<\/noinclude>";
sPrefix ="\n--";
sSuffix = "";
}
var config = {
format: 'json',
action: 'edit',
title: pageToCat,
summary: 'Adding categories',
nocreate: '',
appendtext: sPrefix + '['+'['+cat+']]'+ sSuffix,
bot: true,
token: mw.user.tokens.get('editToken')
};
if (mw.config.get("wgUserGroups").join(' ').indexOf('bot') == -1)
delete config.bot;
$.ajax({
url: mw.util.wikiScript('api'),
data: config,
dataType: 'json',
type: 'POST',
success: function(d) {
if (!d.error) {
console.log('Category successfully added to '+pageToCat+'!');
}
else {
console.log('Failed to add category to '+pageToCat+': '+ d.error.code);
$('#text-error-output').append('Failed to add category to '+pageToCat+': '+ d.error.code +'<br/>');
}
},
error: function() {
console.log('Failed to add category to '+pageToCat+'!');
$('#text-error-output').append('Failed to add category to '+pageToCat+'!<br/>');
}
});
}
else {
console.log(pageToCat+ ' already has the category '+cat.substring(9)+' or an error was encountered. '+pageToCat+' has been skipped.');
$('#text-error-output').append(pageToCat+ ' already has the category '+cat.substring(9)+' or an error was encountered. '+pageToCat+' has been skipped.<br/>');
}
})
.fail(function() {
console.log('Category check failed for '+pageToCat+'! It has been skipped.');
$('#text-error-output').append('Category check failed for '+pageToCat+'! It has been skipped.<br/>');
});
}
if (actionVal == 2) {
//remove category
//get page contents
new mw.Api().get({
action: 'query',
prop: 'revisions',
rvprop: 'content',
titles: pageToCat
})
.done(function(d) {
if (!d.error) {
for (var i in d.query.pages) {
if (d.query.pages[i].revisions) {
var content = d.query.pages[i].revisions[0]["*"];
}
else {
$('#text-error-output').append('Page '+pageToCat+' does not exist!<br/>');
return;
}
}
//remove old category
var regex = new RegExp ("\\[\\[Category:"+cat+"\\]\\]","gi");
var sRegEx = "\\[\\[Category:"+cat+"\\|?.*?\\]\\]";
if ($('input[name=mass-categorization-removal]:checked').val() == 2){
regex = new RegExp (sRegEx,"gi");
}
if ($('input[name=mass-categorization-noinclude]').prop('checked')){
regex = new RegExp ("\\<noinclude\\>\\s*"+sRegEx+"\\s*\\<\/noinclude\\>","gi");
}
var changedContent = content.replace(regex,'');
cat = 'Category:'+ cat.charAt(0).toUpperCase() + cat.substring(1);
//don't submit if new and old contents are equal (no category found)
if (changedContent.valueOf() == content.valueOf()) {
$('#text-error-output').append('Category not found on '+pageToCat+'!<br/>');
return;
}
//submit new page
var config = {
format: 'json',
action: 'edit',
watchlist: 'nochange',
title: pageToCat,
summary: 'Removing category ['+'['+cat+'|'+cat.substring(9)+']] ',
nocreate: '',
text: changedContent,
bot: true,
token: mw.user.tokens.get('editToken')
};
if (mw.config.get("wgUserGroups").join(' ').indexOf('bot') == -1)
delete config.bot;
$.ajax({
url: mw.util.wikiScript('api'),
data: config,
dataType: 'json',
type: 'POST',
success: function(d) {
if (!d.error) {
console.log('Category successfully removed from '+pageToCat+'!');
}
else {
console.log('Failed to remove category from '+pageToCat+': '+ d.error.code);
$('#text-error-output').append('Failed to remove category from '+pageToCat+': '+ d.error.code +'<br/>');
}
},
error: function() {
console.log('Failed to remove category from '+pageToCat+'!');
$('#text-error-output').append('Failed to remove category from '+pageToCat+'!<br/>');
}
});
}
else {
console.log('Failed to get contents of page: '+ d.error.code);
$('#text-error-output').append('Failed to get contents of '+pageToCat+': '+ d.error.code +'<br/>');
}
})
.fail(function() {
console.log('Failed to get contents of '+pageToCat+'!');
$('#text-error-output').append('Failed to get contents of '+pageToCat+'!<br/>');
});
}
/* currently broken
if (actionVal == 3) {
//replace category
var newCat = prompt('Please enter the replacement category name (no category prefix):');
if (!newCat) {
alert('No name entered!');
document.getElementById('start-button').removeAttribute("disabled");
return;
}
//get page contents
new mw.Api().get({
action: 'query',
prop: 'revisions',
rvprop: 'content',
titles: pageToCat
})
.done(function(d) {
if (!d.error) {
for (var i in d.query.pages) {
if (d.query.pages[i].revisions) {
var content = d.query.pages[i].revisions[0]["*"];
}
else {
$('#text-error-output').append('Page '+pageToCat+' does not exist!<br/>');
return;
}
}
//replace old category
var regex = new RegExp ("\\[\\[Category:"+cat+"\\]\\]","gi");
if ($('input[name=mass-categorization-removal]:checked').val() == 2)
regex = new RegExp ("\\[\\[Category:"+cat+"\\|?.*?\\]\\]","gi");
newCat = 'Category:'+ newCat.charAt(0).toUpperCase() + newCat.substring(1);
var changedContent = content.replace(regex,'[['+newCat+']]');
cat = 'Category:'+ cat.charAt(0).toUpperCase() + cat.substring(1);
//don't submit if new and old contents are equal (no category found)
if (changedContent.valueOf() == content.valueOf()) {
$('#text-error-output').append('Category not found on '+pageToCat+'!<br/>');
return;
}
//submit new page
var config = {
format: 'json',
action: 'edit',
watchlist: 'nochange',
title: pageToCat,
summary: 'Replacing category ['+'['+cat+'|'+cat.substring(9)+']] with ['+'['+newCat+'|'+newCat.substring(9)+']]',
nocreate: '',
text: changedContent,
bot: true,
token: mw.user.tokens.get('editToken')
};
if (mw.config.get("wgUserGroups").indexOf('bot') == -1)
delete config.bot;
$.ajax({
url: mw.util.wikiScript('api'),
data: config,
dataType: 'json',
type: 'POST',
success: function(d) {
if (!d.error) {
console.log('Category successfully replaced on '+pageToCat+'!');
}
else {
console.log('Failed to remove category from '+pageToCat+': '+ d.error.code);
$('#text-error-output').append('Failed to replace category on '+pageToCat+': '+ d.error.code +'<br/>');
}
},
error: function() {
console.log('Failed to remove category from '+pageToCat+'!');
$('#text-error-output').append('Failed to replace category on '+pageToCat+'!<br/>');
}
});
}
else {
console.log('Failed to get contents of page: '+ d.error.code);
$('#text-error-output').append('Failed to get contents of '+pageToCat+': '+ d.error.code +'<br/>');
}
})
.fail(function() {
console.log('Failed to get contents of '+pageToCat+'!');
$('#text-error-output').append('Failed to get contents of '+pageToCat+'!<br/>');
});
}
*/
setTimeout(init,delay);
}
}) (this.jQuery, this.mediaWiki);//<nowiki>
/*
* Mass Categorization
* @description (De)Categorize listed multiple pages.
* @author Ozuzanna
* @TODO fix replace
* Added option for <noinclude></include> (Dessamator)
*/
;(function($, mw) {
if ($('#t-mc').length)
return;
//<option value="3">Replace</option> \
var FormMC = '\
<form method="" name="" class="WikiaForm "> \
<fieldset> \
<p>Mode: \
<select id="select-mc"> \
<option value="1">Add</option> \
<option value="2">Remove</option> \
</select> \
</p> \
<p>Category: \
<input type="text" id="category-name" value="" /> \
<p>Matching: \
<br/> \
<label for="normal-removal"><input type="radio" id="normal-removal" name="mass-categorization-removal" value="1" checked="checked"/>General (does not account for piped categories)</label> \
<br/> \
<label for="broad-removal"><input type="radio" id="broad-removal" name="mass-categorization-removal"/ value="2">Broad (also match possible further characters of the specified category e.g. Foo and Foo123, but takes care of pipes)</label> \
<p> \
<br/> \
<label for="no-include"><input type="checkbox" id="no-include" name="mass-categorization-noinclude"/ value="1">Do not include in transclusion (for templates)</label> \
</p> \
<br/> \
<p>Put the name of each page you want to categorize on a <b>separate line</b>.</p> \
<textarea style="height: 20em; width: 80%;" id="text-categorization"/> \
</fieldset> \
<div id="text-error-output" style="height:10em; width: 80%; margin: 5px auto 0px auto; color: #000; background-color: #ffbfbf; height: 150px; border: 1px solid black; font-weight: bold; overflow: scroll">Any errors encountered will appear below<br/></div> \
</form>',
delay = window.massCategorizationDelay || 500;
//Support for Monobook
if (mw.config.get('skin') === 'monobook') {
mw.util.addPortletLink('p-tb', '#', 'Mass Categorization', 't-mc');
} else {
$('#my-tools-menu').prepend('<li class="custom"><a style="cursor:pointer" id="t-mc">Mass Categorization</a></li>');
}
document.getElementById('t-mc').addEventListener('click', function () {
$.showCustomModal('Mass Categorization', FormMC, {
id: 'form-categorization',
width: 500,
buttons: [{
message: 'Cancel',
handler: function() {
$('#form-categorization').closeModal();
}
}, {
message: 'Add category contents',
defaultButton: true,
handler: function() {
addCategoryContents();
}
}, {
id: 'start-button',
message: 'Initiate',
defaultButton: true,
handler: function () {
init();
}
}]
});
});
function addCategoryContents() {
var category = prompt('Please enter the category name (no category prefix):').replace('_',' ');
new mw.Api().get({
action: 'query',
list: 'categorymembers',
cmtitle: "Category:"+category,
cmlimit: 5000
})
.done(function(d) {
if (!d.error) {
var data = d.query;
if (data.categorymembers) {
for (var i in data.categorymembers) {
$('#text-categorization').append(data.categorymembers[i].title+'\n');
}
}
else {
$('#text-error-output').append(category + ' does not exist!\n');
}
}
else {
$('#text-error-output').append('Failed to get contents of '+ category +' : '+ d.error.code +'<br/>');
}
})
.fail(function() {
$('#text-error-output').append('Failed to get contents of '+ category +'!<br/>');
});
}
function init() {
var catName = document.getElementById('category-name').value,
txt = document.getElementById('text-categorization'),
pages = txt.value.split('\n'),
page = pages[0];
if (!catName) {
alert('Please enter the category name!');
return;
}
document.getElementById('start-button').setAttribute('disabled','disabled');
if (!page) {
document.getElementById('start-button').removeAttribute("disabled");
$.showCustomModal('Finished!', 'Nothing left to do, or next line is blank.', {
id: 'form-complete',
width: 200,
buttons: [{
message: 'Close',
defaultButton: true,
handler: function() {
$('#form-complete').closeModal();
}
}]
});
}
else {
categorize(page,catName);
}
pages = pages.slice(1,pages.length);
txt.value = pages.join('\n');
}
function categorize(pageToCat,cat) {
var actionVal = $('#select-mc').val();
if (actionVal == 1) {
//add category
new mw.Api().get({
format: 'json',
action: 'query',
titles: pageToCat,
prop: 'categories'
})
.done(function(d) {
var pages = d.query.pages;
for (var page in pages) {
var mPage = pages[page],
knownCats = [];
if (mPage.categories) {
for (var i = 0; i < mPage.categories.length; i++) {
knownCats.push(mPage.categories[i].title);
}
}
}
cat = 'Category:'+ cat.charAt(0).toUpperCase() + cat.substring(1);
if (knownCats.indexOf(cat) === -1 || knownCats === 'undefined') {
var sPrefix="";
var sSuffix = "";
if ($('input[name=mass-categorization-noinclude]').prop('checked')){
// sPrefix ="<noinclude>\n";
// sSuffix = "<\/noinclude>";
sPrefix ="\n--";
sSuffix = "";
}
var config = {
format: 'json',
action: 'edit',
title: pageToCat,
summary: 'Adding category',
nocreate: '',
appendtext: sPrefix + '['+'['+cat+']]'+ sSuffix,
bot: true,
token: mw.user.tokens.get('editToken')
};
if (mw.config.get("wgUserGroups").join(' ').indexOf('bot') == -1)
delete config.bot;
$.ajax({
url: mw.util.wikiScript('api'),
data: config,
dataType: 'json',
type: 'POST',
success: function(d) {
if (!d.error) {
console.log('Category successfully added to '+pageToCat+'!');
}
else {
console.log('Failed to add category to '+pageToCat+': '+ d.error.code);
$('#text-error-output').append('Failed to add category to '+pageToCat+': '+ d.error.code +'<br/>');
}
},
error: function() {
console.log('Failed to add category to '+pageToCat+'!');
$('#text-error-output').append('Failed to add category to '+pageToCat+'!<br/>');
}
});
}
else {
console.log(pageToCat+ ' already has the category '+cat.substring(9)+' or an error was encountered. '+pageToCat+' has been skipped.');
$('#text-error-output').append(pageToCat+ ' already has the category '+cat.substring(9)+' or an error was encountered. '+pageToCat+' has been skipped.<br/>');
}
})
.fail(function() {
console.log('Category check failed for '+pageToCat+'! It has been skipped.');
$('#text-error-output').append('Category check failed for '+pageToCat+'! It has been skipped.<br/>');
});
}
if (actionVal == 2) {
//remove category
//get page contents
new mw.Api().get({
action: 'query',
prop: 'revisions',
rvprop: 'content',
titles: pageToCat
})
.done(function(d) {
if (!d.error) {
for (var i in d.query.pages) {
if (d.query.pages[i].revisions) {
var content = d.query.pages[i].revisions[0]["*"];
}
else {
$('#text-error-output').append('Page '+pageToCat+' does not exist!<br/>');
return;
}
}
//remove old category
var regex = new RegExp ("\\[\\[Category:"+cat+"\\]\\]","gi");
var sRegEx = "\\[\\[Category:"+cat+"\\|?.*?\\]\\]";
if ($('input[name=mass-categorization-removal]:checked').val() == 2){
regex = new RegExp (sRegEx,"gi");
}
if ($('input[name=mass-categorization-noinclude]').prop('checked')){
regex = new RegExp ("\\<noinclude\\>\\s*"+sRegEx+"\\s*\\<\/noinclude\\>","gi");
}
var changedContent = content.replace(regex,'');
cat = 'Category:'+ cat.charAt(0).toUpperCase() + cat.substring(1);
//don't submit if new and old contents are equal (no category found)
if (changedContent.valueOf() == content.valueOf()) {
$('#text-error-output').append('Category not found on '+pageToCat+'!<br/>');
return;
}
//submit new page
var config = {
format: 'json',
action: 'edit',
watchlist: 'nochange',
title: pageToCat,
summary: 'Removing category ['+'['+cat+'|'+cat.substring(9)+']] ',
nocreate: '',
text: changedContent,
bot: true,
token: mw.user.tokens.get('editToken')
};
if (mw.config.get("wgUserGroups").join(' ').indexOf('bot') == -1)
delete config.bot;
$.ajax({
url: mw.util.wikiScript('api'),
data: config,
dataType: 'json',
type: 'POST',
success: function(d) {
if (!d.error) {
console.log('Category successfully removed from '+pageToCat+'!');
}
else {
console.log('Failed to remove category from '+pageToCat+': '+ d.error.code);
$('#text-error-output').append('Failed to remove category from '+pageToCat+': '+ d.error.code +'<br/>');
}
},
error: function() {
console.log('Failed to remove category from '+pageToCat+'!');
$('#text-error-output').append('Failed to remove category from '+pageToCat+'!<br/>');
}
});
}
else {
console.log('Failed to get contents of page: '+ d.error.code);
$('#text-error-output').append('Failed to get contents of '+pageToCat+': '+ d.error.code +'<br/>');
}
})
.fail(function() {
console.log('Failed to get contents of '+pageToCat+'!');
$('#text-error-output').append('Failed to get contents of '+pageToCat+'!<br/>');
});
}
/* currently broken
if (actionVal == 3) {
//replace category
var newCat = prompt('Please enter the replacement category name (no category prefix):');
if (!newCat) {
alert('No name entered!');
document.getElementById('start-button').removeAttribute("disabled");
return;
}
//get page contents
new mw.Api().get({
action: 'query',
prop: 'revisions',
rvprop: 'content',
titles: pageToCat
})
.done(function(d) {
if (!d.error) {
for (var i in d.query.pages) {
if (d.query.pages[i].revisions) {
var content = d.query.pages[i].revisions[0]["*"];
}
else {
$('#text-error-output').append('Page '+pageToCat+' does not exist!<br/>');
return;
}
}
//replace old category
var regex = new RegExp ("\\[\\[Category:"+cat+"\\]\\]","gi");
if ($('input[name=mass-categorization-removal]:checked').val() == 2)
regex = new RegExp ("\\[\\[Category:"+cat+"\\|?.*?\\]\\]","gi");
newCat = 'Category:'+ newCat.charAt(0).toUpperCase() + newCat.substring(1);
var changedContent = content.replace(regex,'[['+newCat+']]');
cat = 'Category:'+ cat.charAt(0).toUpperCase() + cat.substring(1);
//don't submit if new and old contents are equal (no category found)
if (changedContent.valueOf() == content.valueOf()) {
$('#text-error-output').append('Category not found on '+pageToCat+'!<br/>');
return;
}
//submit new page
var config = {
format: 'json',
action: 'edit',
watchlist: 'nochange',
title: pageToCat,
summary: 'Replacing category ['+'['+cat+'|'+cat.substring(9)+']] with ['+'['+newCat+'|'+newCat.substring(9)+']]',
nocreate: '',
text: changedContent,
bot: true,
token: mw.user.tokens.get('editToken')
};
if (mw.config.get("wgUserGroups").indexOf('bot') == -1)
delete config.bot;
$.ajax({
url: mw.util.wikiScript('api'),
data: config,
dataType: 'json',
type: 'POST',
success: function(d) {
if (!d.error) {
console.log('Category successfully replaced on '+pageToCat+'!');
}
else {
console.log('Failed to remove category from '+pageToCat+': '+ d.error.code);
$('#text-error-output').append('Failed to replace category on '+pageToCat+': '+ d.error.code +'<br/>');
}
},
error: function() {
console.log('Failed to remove category from '+pageToCat+'!');
$('#text-error-output').append('Failed to replace category on '+pageToCat+'!<br/>');
}
});
}
else {
console.log('Failed to get contents of page: '+ d.error.code);
$('#text-error-output').append('Failed to get contents of '+pageToCat+': '+ d.error.code +'<br/>');
}
})
.fail(function() {
console.log('Failed to get contents of '+pageToCat+'!');
$('#text-error-output').append('Failed to get contents of '+pageToCat+'!<br/>');
});
}
*/
setTimeout(init,delay);
}
}) (this.jQuery, this.mediaWiki);