User:Kanegasi/editcounter.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
This user script seems to have a documentation page at User:Kanegasi/editcounter. |
/***********************************************************************************/
/* */
/* MEDIAWIKI EDITCOUNTER v111 */
/* */
/* license: CC-BY-SA 3.0 http://creativecommons.org/licenses/by-sa/3.0/ */
/* */
/* Original credit: */
/* author: Najzere @ strategywiki.org */
/* source: http://strategywiki.org/wiki/User:Najzere/edit_counter.js */
/* documentation: http://strategywiki.org/wiki/User_talk:Najzere/edit_counter.js */
/* contact: http://strategywiki.org/wiki/User_talk:Najzere */
/* Minecraft Wiki credit: */
/* author: Matt (Majr) @ minecraft.gamepedia.com */
/* source: http://minecraft.gamepedia.com/User:Majr/editcounter.js */
/* Current version credit: */
/* author: Kanegasi @ minecraft.gamepedia.com/en.wikipedia.org */
/* source: http://en.wikipedia.org/wiki/User:Kanegasi/editcounter.js */
/* documentation: http://en.wikipedia.org/wiki/User:Kanegasi/editcounter */
/* contacts: http://minecraft.gamepedia.com/User_talk:Kanegasi -OR- */
/* http://en.wikipedia.org/wiki/User_talk:Kanegasi */
/***********************************************************************************/
$(document).ready(function () {
// Add new link labeled "Edit counter v111" after "User contributions" in side menu
if (!$('#t-contributions').length) {
alert('Missing "User contributions" link in the side menu');
return;
}
var $editCountLink = $('<a>Edit counter v111</a>').attr({
id: 't-editcounter', href: '#', title: 'Run edit counter script'
});
$('#t-contributions').after($('<li></li>').html($editCountLink));
$('#t-editcounter').click(function () {
$('#t-editcounter').text('Processing…');
setTimeout(function () {
// Set up variables
if (/wikipedia.org/.test(mw.config.get('wgServer'))) {
interwikiLink = 'en';
} else {
interwikiLink = 'wikipedia';
}
if (typeof (pageName) == 'undefined') { pageName = 'edit count'; }
if (typeof (subPages) == 'undefined') { subPages = false; }
if (typeof (datePageName) == 'undefined') { datePageName = 'date'; }
if (typeof (totalPageName) == 'undefined') { totalPageName = 'total'; }
if (typeof (summaryLink) == 'undefined') {
summaryLink = interwikiLink + ':User:Kanegasi/editcounter';
}
if (typeof (tableCaption) == 'undefined') { tableCaption = ''; }
if (typeof (tableHeaders) == 'undefined' || tableHeaders === true) {
headerPipe = '! ';
} else {
headerPipe = '| ';
}
if (typeof (nameSpaces) == 'undefined') { nameSpaces = []; }
if (typeof (mainTableAttrib) == 'undefined') {
mainTableAttrib = 'class="wikitable" style="margin: ' +
'0 auto 1em; text-align: center"';
}
if (typeof (topRowAttrib) == 'undefined') { topRowAttrib = ''; }
if (typeof (bottomRowAttrib) == 'undefined') { bottomRowAttrib = ''; }
if (typeof (dateFormat) == 'undefined') { dateFormat = 'F j, Y'; }
if (typeof (noInclude1) == 'undefined') { noInclude1 = ''; } else {
noInclude1 = '<noinclude>' + noInclude1 + '</noinclude>';
}
if (typeof (noInclude2) == 'undefined') { noInclude2 = ''; } else {
noInclude2 = '<noinclude>' + noInclude2 + '</noinclude>';
}
if (typeof (noInclude3) == 'undefined') { noInclude3 = ''; } else {
noInclude3 = '<noinclude>' + noInclude3 + '</noinclude>';
}
if (typeof (noInclude) == 'undefined') { noInclude = ''; } else {
noInclude1 = '<noinclude>' + noInclude + '</noinclude>';
noInclude2 = '<noinclude>' + noInclude + '</noinclude>';
noInclude3 = '<noinclude>' + noInclude + '</noinclude>';
}
if (!(/\|/.test(summaryLink))) { summaryLink += '|updated'; }
if (/wikipedia:User:Kanegasi\/editcounter/i.test(summaryLink) &&
interwikiLink == 'en') {
summaryLink = summaryLink.replace(/wikipedia/i,'en');
}
var userName = mw.config.get('wgUserName'),
contribLink = '[' + mw.config.get('wgServer') + mw.config.get('wgScriptPath') +
'/index.php?title=Special%3AContributions&target=' +
encodeURIComponent(userName) + '&namespace=',
bracesLeft = '{{',
bracesRight = '}}',
deletedEdits = 0,
edits = [],
editToken,
fullPageName = 'User:' + userName + '/' + pageName,
fullDatePageName = fullPageName + '/' + datePageName,
fullTotalPageName = fullPageName + '/' + totalPageName,
commonPage = 'User:' + userName + '/' + 'common.js',
vectorPage = 'User:' + userName + '/' + 'vector.js',
scriptPages = commonPage + '|' + vectorPage,
next,
noCaptcha = false,
oldPage = false,
oldPage1 = true,
oldPage2 = true,
oldPage3 = true,
tableAll,
timeStamp = bracesLeft + 'subst:#time:' + dateFormat + bracesRight,
tablePart1 = '{| ' + mainTableAttrib + '\n',
tablePart2 = '|+ style="caption-side: bottom; ' +
'font-size: x-small; font-weight: normal" | ',
tablePart3 = '[[' + interwikiLink + ':User:Kanegasi/editcounter|' +
'Last update: ' + timeStamp + ']]\n',
tablePart5 = '|- ' + topRowAttrib + '\n',
tablePart6 = '',
tablePart7 = '|- class="plainlinks" ' + bottomRowAttrib + '\n',
tablePart8 = '',
totalCount,
totalEdits = bracesLeft + 'subst:formatnum:',
touchedDate,
currentDate,
coolDown,
touchedDate2,
currentDate2,
coolDown2,
ajaxvars;
if (tableCaption !== '') {
tablePart4 = '|-\n! colspan=99 style="align: center; ' +
'border-left: hidden; border-right: hidden; ' +
'border-top: hidden" | ' + tableCaption + '\n';
} else {
tablePart4 = '';
}
// Retrieve edit token and check for existing page(s)
$.ajax({
type: "GET",
url: mw.util.wikiScript('api'),
data: {
format: 'json',
action: 'query',
prop: 'info',
intoken: 'edit',
titles: fullPageName + '|' + fullDatePageName +
'|' + fullTotalPageName + '|' + scriptPages
},
dataType: 'json',
async: false,
success: function (propResponse) {
for (var page in propResponse.query.pages) {
editToken = propResponse.query.pages[page].edittoken;
if (propResponse.query.pages[page].title == fullPageName) {
if (propResponse.query.pages[page].missing) {
oldPage1 = false;
} else {
oldPage = true;
}
if (propResponse.query.pages[page].touched) {
touchedDate = propResponse.query.pages[page].touched;
currentDate = propResponse.query.pages[page].starttimestamp;
coolDown = new Date(currentDate.substr(0,10).replace(/-/ig,',')) -
new Date(touchedDate.substr(0,10).replace(/-/ig,','));
}
}
if (propResponse.query.pages[page].title == vectorPage) {
if (!propResponse.query.pages[page].missing) {
if (propResponse.query.pages[page].touched) {
touchedDate2 = propResponse.query.pages[page].touched;
currentDate2 = propResponse.query.pages[page].starttimestamp;
coolDown2 = new Date(currentDate2.substr(0,10).replace(/-/ig,',')) -
new Date(touchedDate2.substr(0,10).replace(/-/ig,','));
}
}
}
if (propResponse.query.pages[page].title == commonPage) {
if (!propResponse.query.pages[page].missing && !coolDown2) {
if (propResponse.query.pages[page].touched) {
touchedDate2 = propResponse.query.pages[page].touched;
currentDate2 = propResponse.query.pages[page].starttimestamp;
coolDown2 = new Date(currentDate2.substr(0,10).replace(/-/ig,',')) -
new Date(touchedDate2.substr(0,10).replace(/-/ig,','));
}
}
}
if (propResponse.query.pages[page].title == fullDatePageName) {
if (propResponse.query.pages[page].missing && subPages) {
oldPage2 = false;
} else {
oldPage = true;
}
}
if (propResponse.query.pages[page].title == fullTotalPageName) {
if (propResponse.query.pages[page].missing && subPages) {
oldPage3 = false;
} else {
oldPage = true;
}
}
}
},
error: function (xhr, textStatus, error){
$('#t-editcounter').text('Error!');
alert(xhr.statusText);
alert(textStatus);
alert(error);
return;
}
});
// Check if user autoconfirmed and stop script if false and no page exists.
// Also check for last count and stop if same day.
if (/confirmed/i.test(mw.config.get('wgUserGroups'))) {
noCaptcha = true;
}
if (!oldPage && !noCaptcha) {
$('#t-editcounter').text('Error!');
if (!oldPage1) {
oldPage1 = '\n\t' + fullPageName;
} else {
oldPage1 = '';
}
if (!oldPage2 && subPages) {
oldPage2 = '\n\t' + fullDatePageName;
} else {
oldPage2 = '';
}
if (!oldPage3 && subPages) {
oldPage3 = '\n\t' + fullTotalPageName;
} else {
oldPage3 = '';
}
alert('Your account requires a captcha to make new pages.\n' +
'Make sure the following page(s) exist:\n' +
oldPage1 + oldPage2 + oldPage3);
return;
}
if (coolDown === 0 && coolDown2 !== 0) {
$('#t-editcounter').text('Error!');
alert('You have already counted your edits today.');
return;
}
// Initialize namespace and edit arrays
$.ajax({
type: "GET",
url: mw.util.wikiScript('api'),
data: {
format: 'json',
action: 'query',
meta: 'siteinfo',
siprop: 'namespaces'
},
dataType: 'json',
async: false,
success: function (siResponse) {
for (var ns in siResponse.query.namespaces) {
if (siResponse.query.namespaces[ns].id > -1) {
if (siResponse.query.namespaces[ns].id === 0 &&
typeof (nameSpaces[0]) == 'undefined') {
nameSpaces[siResponse.query.namespaces[ns].id] = 'Main';
} else if (siResponse.query.namespaces[ns].id == 4 &&
typeof (nameSpaces[4]) == 'undefined') {
nameSpaces[siResponse.query.namespaces[ns].id] = mw.config.get('wgSiteName');
} else if (siResponse.query.namespaces[ns].id == 5 &&
typeof (nameSpaces[5]) == 'undefined') {
nameSpaces[siResponse.query.namespaces[ns].id] = mw.config.get('wgSiteName') +
' talk';
} else {
if (typeof (nameSpaces[siResponse.query.namespaces[ns].id]) == 'undefined') {
nameSpaces[siResponse.query.namespaces[ns].id] =
siResponse.query.namespaces[ns].canonical;
}
}
edits[siResponse.query.namespaces[ns].id] = 0;
}
}
},
error: function (xhr, textStatus, error) {
$('#t-editcounter').text('Error!');
alert(xhr.statusText);
alert(textStatus);
alert(error);
return;
}
});
// Fill edit array with moves (negative numbers)
next = '1';
while (next != 'stop') {
ajaxvars = {
type: "GET",
url: mw.util.wikiScript('api'),
data: {
format: 'json',
action: 'query',
rawcontinue: '',
list: 'logevents',
leuser: userName,
letype: 'move',
leprop: 'title',
lelimit: 'max',
ledir: 'newer'
},
dataType: 'json',
async: false,
success: function (logResponse) {
for (var event in logResponse.query.logevents) {
edits[logResponse.query.logevents[event].ns] -= 1;
deletedEdits -= 1;
}
if (logResponse['query-continue']) {
next = logResponse['query-continue'].logevents.lecontinue;
} else {
next = 'stop';
}
},
error: function (xhr, textStatus, error) {
$('#t-editcounter').text('Error!');
alert(xhr.statusText);
alert(textStatus);
alert(error);
return;
}
};
if (next != '1') {
ajaxvars.data = {
format: 'json',
action: 'query',
rawcontinue: '',
list: 'logevents',
leuser: userName,
letype: 'move',
leprop: 'title',
lelimit: 'max',
ledir: 'newer',
lecontinue: next
};
}
$.ajax(ajaxvars);
}
// Fill edit array with protects (negative numbers)
next = '1';
while (next != 'stop') {
ajaxvars = {
type: "GET",
url: mw.util.wikiScript('api'),
data: {
format: 'json',
action: 'query',
rawcontinue: '',
list: 'logevents',
leuser: userName,
letype: 'protect',
leprop: 'title',
lelimit: 'max',
ledir: 'newer'
},
dataType: 'json',
async: false,
success: function (logResponse) {
for (var event in logResponse.query.logevents) {
edits[logResponse.query.logevents[event].ns] -= 1;
deletedEdits -= 1;
}
if (logResponse['query-continue']) {
next = logResponse['query-continue'].logevents.lecontinue;
} else {
next = 'stop';
}
},
error: function (xhr, textStatus, error) {
$('#t-editcounter').text('Error!');
alert(xhr.statusText);
alert(textStatus);
alert(error);
return;
}
};
if (next != '1') {
ajaxvars.data = {
format: 'json',
action: 'query',
rawcontinue: '',
list: 'logevents',
leuser: userName,
letype: 'protect',
leprop: 'title',
lelimit: 'max',
ledir: 'newer',
lecontinue: next
};
}
$.ajax(ajaxvars);
}
// Fill edit array with file overwrites (negative numbers)
next = '1';
while (next != 'stop') {
ajaxvars = {
type: "GET",
url: mw.util.wikiScript('api'),
data: {
format: 'json',
action: 'query',
rawcontinue: '',
list: 'logevents',
leuser: userName,
leaction: 'upload/overwrite',
leprop: 'title',
lelimit: 'max',
ledir: 'newer'
},
dataType: 'json',
async: false,
success: function (logResponse) {
for (var event in logResponse.query.logevents) {
edits[logResponse.query.logevents[event].ns] -= 1;
deletedEdits -= 1;
}
if (logResponse['query-continue']) {
next = logResponse['query-continue'].logevents.lecontinue;
} else {
next = 'stop';
}
},
error: function (xhr, textStatus, error) {
$('#t-editcounter').text('Error!');
alert(xhr.statusText);
alert(textStatus);
alert(error);
return;
}
};
if (next != '1') {
ajaxvars.data = {
format: 'json',
action: 'query',
list: 'logevents',
rawcontinue: '',
leuser: userName,
leaction: 'upload/overwrite',
leprop: 'title',
lelimit: 'max',
ledir: 'newer',
lecontinue: next
};
}
$.ajax(ajaxvars);
}
// Fill edit array with normal edits (positive numbers)
next = '1';
while (next != 'stop') {
ajaxvars = {
type: "GET",
url: mw.util.wikiScript('api'),
data: {
format: 'json',
action: 'query',
rawcontinue: '',
list: 'usercontribs',
ucuser: userName,
ucprop: 'title',
uclimit: 'max',
ucdir: 'newer'
},
dataType: 'json',
async: false,
success: function (ucResponse) {
for (var event in ucResponse.query.usercontribs) {
edits[ucResponse.query.usercontribs[event].ns] += 1;
deletedEdits += 1;
}
if (ucResponse['query-continue']) {
next = ucResponse['query-continue'].usercontribs.uccontinue;
} else {
next = 'stop';
}
},
error: function (xhr, textStatus, error) {
$('#t-editcounter').text('Error!');
alert(xhr.statusText);
alert(textStatus);
alert(error);
return;
}
};
if (next != '1') {
ajaxvars.data = {
format: 'json',
action: 'query',
rawcontinue: '',
list: 'usercontribs',
ucuser: userName,
ucprop: 'title',
uclimit: 'max',
ucdir: 'newer',
uccontinue: next
};
}
$.ajax(ajaxvars);
}
for (var i = 0; i < nameSpaces.length; i++) {
if (edits[i] > 0) {
if (i == 2) {
if (subPages) {
edits[i] += 3;
} else {
edits[i] += 1;
}
}
tablePart6 += headerPipe + nameSpaces[i] + '\n';
tablePart8 += '| ' + contribLink + i + ' ' + bracesLeft +
'subst:formatnum:' + edits[i] + bracesRight + ']' + '\n';
}
}
tablePart6 += headerPipe + 'Total\n';
tablePart8 += '| [[Special:Contributions/' +
userName + '|<span title="Deleted edits: ';
// Retrieve total edit count and calculate estimated deleted edits
$.ajax({
type: "GET",
url: mw.util.wikiScript('api'),
data: {
format: 'json',
action: 'query',
meta: 'userinfo',
uiprop: 'editcount'
},
dataType: 'json',
async: false,
success: function (totalResponse) {
deletedEdits -= totalResponse.query.userinfo.editcount;
if (subPages) {
totalCount = totalResponse.query.userinfo.editcount + 3;
} else {
totalCount = totalResponse.query.userinfo.editcount + 1;
}
tablePart8 += Math.abs(deletedEdits) + '">' + totalEdits +
totalCount + bracesRight + '</span>]]\n|}';
},
error: function (xhr, textStatus, error) {
$('#t-editcounter').text('Error!');
alert(xhr.statusText);
alert(textStatus);
alert(error);
return;
}
});
tableAll = tablePart1 + tablePart2 + tablePart3 + tablePart4 +
tablePart5 + tablePart6 + tablePart7 + tablePart8;
// Submit post request to main page
$.ajax({
type: 'POST',
url: mw.util.wikiScript('api'),
data: {
format: 'json',
action: 'edit',
title: fullPageName,
text: tableAll + noInclude1,
summary: '[[' + summaryLink + ']]',
bot: '1',
minor: '1',
recreate: '1',
token: editToken
},
dataType: 'json',
async: false,
success: function () {
$('#t-editcounter').text('Success!');
},
error: function (xhr, textStatus, error) {
$('#t-editcounter').text('Error!');
alert(xhr.statusText);
alert(textStatus);
alert(error);
return;
}
});
// Submit post request to date page
if (subPages) {
$.ajax({
type: 'POST',
url: mw.util.wikiScript('api'),
data: {
format: 'json',
action: 'edit',
title: fullDatePageName,
text: timeStamp + noInclude2,
summary: '[[' + summaryLink + ']]',
bot: '1',
minor: '1',
recreate: '1',
token: editToken
},
dataType: 'json',
async: false,
success: function () {
$('#t-editcounter').text('Success!');
},
error: function (xhr, textStatus, error) {
$('#t-editcounter').text('Error!');
alert(xhr.statusText);
alert(textStatus);
alert(error);
return;
}
});
}
// Submit post request to total page
if (subPages) {
$.ajax({
type: 'POST',
url: mw.util.wikiScript('api'),
data: {
format: 'json',
action: 'edit',
title: fullTotalPageName,
text: totalCount + noInclude3,
summary: '[[' + summaryLink + ']]',
bot: '1',
minor: '1',
recreate: '1',
token: editToken
},
dataType: 'json',
async: false,
success: function () {
$('#t-editcounter').text('Success!');
},
error: function (xhr, textStatus, error) {
$('#t-editcounter').text('Error!');
alert(xhr.statusText);
alert(textStatus);
alert(error);
return;
}
});
}
},1000);
});
});