Jump to navigation
Jump to search
m (subst'ing templates, formatting last run date) |
m (fix namespace names) |
||
(21 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
/***********************************************************************************/ | |||
/* Edit counter script */ | |||
/* author: User: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 */ | |||
/* license: CC-BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/) */ | |||
/***********************************************************************************/ | |||
// Only add edit count button on user pages | |||
if (mw.config.get('wgTitle') == mw.config.get('wgUserName') && mw.config.get('wgNamespaceNumber') == 2) { | |||
$(document).ready(function() { | |||
// Add a new link after "User contributions" in the toolbox | |||
if ($('#t-contributions').length==0) { | |||
alert('Expected element not found. Please see http://strategywiki.org/wiki/User_talk:Najzere to have your wiki added.'); | |||
return; | |||
}; | |||
var $editCountLink = $('<a>Edit counter</a>').attr( { id: 't-editcounter', href: '#', title: 'Run edit counter script' } ); | |||
$('#t-contributions').after($('<li></li>').html($editCountLink)); | |||
$('#t-editcounter').click( function() { | |||
// Change edit counter link to let the user know it's thinking | |||
$(this).html('Calculating...'); | |||
if ( | |||
// Set up variables | |||
if (mw.config.get('wgServer') == 'http://strategywiki.org') { | |||
var editSummary = 'Edited with [[User talk:Najzere/edit counter.js|edit counter.js]]'; | |||
var tableTop = '[[User talk:Najzere/edit counter.js|Edit count]]'; | |||
} else { | } else { | ||
var editSummary = 'Edited with [[strategywiki:User talk:Najzere/edit counter.js|edit counter.js]]'; | |||
var tableTop = '[[strategywiki:User talk:Najzere/edit counter.js|Edit count]]'; | |||
}; | }; | ||
if (typeof(editPage) == 'undefined') {editPage = 'Edit count'}; | |||
if (typeof(tableClass) == 'undefined') {tableClass = ''}; | |||
if (typeof(tableStyle) == 'undefined') {tableStyle = ''}; | |||
if (editPage == '') {editPage = 'Edit count'}; | |||
var skipcaptcha = false; | var skipcaptcha = false; | ||
var oldpage = false; | var oldpage = false; | ||
var edits; | var edits; | ||
var namespaces = | var nsnums = []; | ||
var movelog = | var nsnums2 = []; | ||
var protectlog = | var namespaces = []; | ||
var movelog = []; | |||
var protectlog = []; | |||
var next; | var next; | ||
var edittoken; | var edittoken; | ||
var | var succeeded = false; | ||
var brace = '{'; | |||
var table = '{| class="wikitable '+tableClass+'" style="'+tableStyle+'"\n!colspan="2"| '+tableTop+': '+brace+brace+'subst:formatnum:'; | |||
// Check if the user is autoconfirmed | |||
for (var right in wgUserGroups) | |||
if (wgUserGroups[right] == 'autoconfirmed') {skipcaptcha = true}; | |||
// Get full edit count, as tracked by MW, add it to table | |||
$.ajax({ | |||
url: '/w/api.php?action=query&meta=userinfo&uiprop=editcount&format=json', | |||
dataType: 'json', | |||
async: false, | |||
success: function(uiResponse) { | |||
table += uiResponse.query.userinfo.editcount+'}}'; | |||
} | |||
}); | }); | ||
// Initialize namespace, move log and patrol log arrays | |||
$.ajax({ | |||
url: '/w/api.php?action=query&meta=siteinfo&siprop=namespaces&format=json', | |||
dataType: 'json', | |||
namespaces[siResponse.query.namespaces[ns] | async: false, | ||
success: function(siResponse) { | |||
var i = 1; | |||
for (var ns in siResponse.query.namespaces) { | |||
if (siResponse.query.namespaces[ns].id > -1) { | |||
if (siResponse.query.namespaces[ns].id == 0) { | |||
namespaces[i] = 'Main'; | |||
} else { | |||
namespaces[i] = siResponse.query.namespaces[ns]["*"]; | |||
}; | |||
nsnums[siResponse.query.namespaces[ns].id] = i; | |||
nsnums2[i] = siResponse.query.namespaces[ns].id; | |||
movelog[i] = 0; | |||
protectlog[i] = 0; | |||
i++; | |||
}; | }; | ||
}; | }; | ||
} | } | ||
}); | }); | ||
// Fill move log array | |||
next = ''; | next = ''; | ||
while (next != 'stop') { | while (next != 'stop') { | ||
$.ajax({ | |||
url: '/w/api.php?action=query&list=logevents&letype=move&leuser='+mw.config.get('wgUserName')+'&lelimit=max&leprop=title&format=json'+next, | |||
dataType: 'json', | |||
async: false, | |||
success: function(moveResponse) { | |||
for (var event in moveResponse.query.logevents) { | |||
movelog[nsnums[moveResponse.query.logevents[event].ns]] += 1; | |||
}; | |||
if (moveResponse["query-continue"]) { | |||
next = '&lestart='+moveResponse["query-continue"].logevents.lestart; | |||
} else { | |||
next = 'stop'; | |||
}; | |||
} | } | ||
}); | }); | ||
} | }; | ||
// Fill protect log array | |||
next = ''; | next = ''; | ||
while (next != 'stop') { | while (next != 'stop') { | ||
$.ajax({ | |||
url: '/w/api.php?action=query&list=logevents&letype=protect&leuser='+mw.config.get('wgUserName')+'&lelimit=max&leprop=title&format=json'+next, | |||
dataType: 'json', | |||
async: false, | |||
success: function(protectResponse) { | |||
for (var event in protectResponse.query.logevents) { | |||
protectlog[nsnums[protectResponse.query.logevents[event].ns]] += 1; | |||
}; | |||
if (protectResponse["query-continue"]) { | |||
next = '&lestart='+protectResponse["query-continue"].logevents.lestart; | |||
} else { | |||
next = 'stop'; | |||
}; | |||
} | } | ||
}); | }); | ||
} | }; | ||
// Loop through namespaces counting edits and subtracting page moves and patrols | |||
for (var i = 0; i < namespaces.length; i++) { | for (var i = 0; i < namespaces.length; i++) { | ||
next = ''; | next = ''; | ||
edits = 0; | edits = 0; | ||
while (next != 'stop') { | while (next != 'stop') { | ||
$.ajax({ | |||
url: '/w/api.php?action=query&list=usercontribs&ucuser='+mw.config.get('wgUserName')+'&uclimit=max&ucdir=newer&format=json&ucnamespace='+nsnums2[i]+next, | |||
dataType: 'json', | |||
async: false, | |||
success: function(ucResponse) { | |||
edits += ucResponse.query.usercontribs.length; | |||
} | if (ucResponse["query-continue"]) { | ||
next = '&ucstart='+ucResponse["query-continue"].usercontribs.ucstart; | |||
} else { | |||
next = 'stop'; | |||
}; | |||
} | |||
}); | }); | ||
}; | }; | ||
edits = edits - movelog[i] - protectlog[i]; | edits = edits - movelog[i] - protectlog[i]; | ||
if (edits > 0) { | if (edits > 0) { | ||
table += '\n|-\n| '+namespaces[i]+' || | table += '\n|-\n| '+namespaces[i]+' || '+brace+brace+'subst:formatnum:'+edits+'}}'; | ||
}; | }; | ||
}; | }; | ||
table += '\n|-\n|colspan="2" align="center"| <small>Last run: '+brace+brace+'subst:#time:F j, Y}}</small>\n|}'; | |||
table += '\n|-\n|colspan="2" align="center"| <small>Last run: | |||
// Get edit token and check if we'll be creating a new page (in the case of non-autoconfirmed users) | |||
$.ajax({ | |||
url: '/w/api.php?action=query&prop=info|revisions&intoken=edit&format=json&titles=User:'+mw.config.get('wgUserName')+'/'+editPage, | |||
dataType: 'json', | |||
async: false, | |||
success: function(propResponse) { | |||
for (var page in propResponse.query.pages) { | |||
edittoken = propResponse.query.pages[page].edittoken.replace(/\+\\$/g,'%2B%5C'); | |||
if (propResponse.query.pages[page]["revisions"]) { | |||
oldpage = true; | |||
}; | |||
}; | }; | ||
} | } | ||
}); | }); | ||
// If the user is not autoconfirmed and we're creating a new page, kick out of the script | |||
if (!skipcaptcha && !oldpage) { | if (!skipcaptcha && !oldpage) { | ||
alert("Sorry, you're not autoconfirmed yet, so captcha is required to make new pages. Go create the page at: User:"+wgUserName+"/"+editPage+", then try again."); | alert("Sorry, you're not autoconfirmed yet, so captcha is required to make new pages. Go create the page at: User:"+mw.config.get('wgUserName')+"/"+editPage+", then try again."); | ||
return | $(this).html('Error!'); | ||
return; | |||
}; | }; | ||
// Edit the target page with the table | |||
$.ajax({ | |||
url: '/w/api.php?action=edit&title=User:'+mw.config.get('wgUserName')+'/'+editPage+'&summary='+editSummary+'&minor=1&recreate=1&bot=1&text='+escape(table)+'&token='+edittoken, | |||
type: 'POST', | |||
async: false, | |||
success: function() { succeeded = true; } | |||
}); | }); | ||
// change edit count link to reflect the status of the page save | |||
if (succeeded) { | |||
$(this).html('Done!'); | |||
} else { | } else { | ||
$(this).html('Error!'); | |||
}; | }; | ||
} | |||
}); | |||
}); | |||
}; |
Latest revision as of 15:09, 11 April 2013
/***********************************************************************************/
/* Edit counter script */
/* author: User: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 */
/* license: CC-BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/) */
/***********************************************************************************/
// Only add edit count button on user pages
if (mw.config.get('wgTitle') == mw.config.get('wgUserName') && mw.config.get('wgNamespaceNumber') == 2) {
$(document).ready(function() {
// Add a new link after "User contributions" in the toolbox
if ($('#t-contributions').length==0) {
alert('Expected element not found. Please see http://strategywiki.org/wiki/User_talk:Najzere to have your wiki added.');
return;
};
var $editCountLink = $('<a>Edit counter</a>').attr( { id: 't-editcounter', href: '#', title: 'Run edit counter script' } );
$('#t-contributions').after($('<li></li>').html($editCountLink));
$('#t-editcounter').click( function() {
// Change edit counter link to let the user know it's thinking
$(this).html('Calculating...');
// Set up variables
if (mw.config.get('wgServer') == 'http://strategywiki.org') {
var editSummary = 'Edited with [[User talk:Najzere/edit counter.js|edit counter.js]]';
var tableTop = '[[User talk:Najzere/edit counter.js|Edit count]]';
} else {
var editSummary = 'Edited with [[strategywiki:User talk:Najzere/edit counter.js|edit counter.js]]';
var tableTop = '[[strategywiki:User talk:Najzere/edit counter.js|Edit count]]';
};
if (typeof(editPage) == 'undefined') {editPage = 'Edit count'};
if (typeof(tableClass) == 'undefined') {tableClass = ''};
if (typeof(tableStyle) == 'undefined') {tableStyle = ''};
if (editPage == '') {editPage = 'Edit count'};
var skipcaptcha = false;
var oldpage = false;
var edits;
var nsnums = [];
var nsnums2 = [];
var namespaces = [];
var movelog = [];
var protectlog = [];
var next;
var edittoken;
var succeeded = false;
var brace = '{';
var table = '{| class="wikitable '+tableClass+'" style="'+tableStyle+'"\n!colspan="2"| '+tableTop+': '+brace+brace+'subst:formatnum:';
// Check if the user is autoconfirmed
for (var right in wgUserGroups)
if (wgUserGroups[right] == 'autoconfirmed') {skipcaptcha = true};
// Get full edit count, as tracked by MW, add it to table
$.ajax({
url: '/w/api.php?action=query&meta=userinfo&uiprop=editcount&format=json',
dataType: 'json',
async: false,
success: function(uiResponse) {
table += uiResponse.query.userinfo.editcount+'}}';
}
});
// Initialize namespace, move log and patrol log arrays
$.ajax({
url: '/w/api.php?action=query&meta=siteinfo&siprop=namespaces&format=json',
dataType: 'json',
async: false,
success: function(siResponse) {
var i = 1;
for (var ns in siResponse.query.namespaces) {
if (siResponse.query.namespaces[ns].id > -1) {
if (siResponse.query.namespaces[ns].id == 0) {
namespaces[i] = 'Main';
} else {
namespaces[i] = siResponse.query.namespaces[ns]["*"];
};
nsnums[siResponse.query.namespaces[ns].id] = i;
nsnums2[i] = siResponse.query.namespaces[ns].id;
movelog[i] = 0;
protectlog[i] = 0;
i++;
};
};
}
});
// Fill move log array
next = '';
while (next != 'stop') {
$.ajax({
url: '/w/api.php?action=query&list=logevents&letype=move&leuser='+mw.config.get('wgUserName')+'&lelimit=max&leprop=title&format=json'+next,
dataType: 'json',
async: false,
success: function(moveResponse) {
for (var event in moveResponse.query.logevents) {
movelog[nsnums[moveResponse.query.logevents[event].ns]] += 1;
};
if (moveResponse["query-continue"]) {
next = '&lestart='+moveResponse["query-continue"].logevents.lestart;
} else {
next = 'stop';
};
}
});
};
// Fill protect log array
next = '';
while (next != 'stop') {
$.ajax({
url: '/w/api.php?action=query&list=logevents&letype=protect&leuser='+mw.config.get('wgUserName')+'&lelimit=max&leprop=title&format=json'+next,
dataType: 'json',
async: false,
success: function(protectResponse) {
for (var event in protectResponse.query.logevents) {
protectlog[nsnums[protectResponse.query.logevents[event].ns]] += 1;
};
if (protectResponse["query-continue"]) {
next = '&lestart='+protectResponse["query-continue"].logevents.lestart;
} else {
next = 'stop';
};
}
});
};
// Loop through namespaces counting edits and subtracting page moves and patrols
for (var i = 0; i < namespaces.length; i++) {
next = '';
edits = 0;
while (next != 'stop') {
$.ajax({
url: '/w/api.php?action=query&list=usercontribs&ucuser='+mw.config.get('wgUserName')+'&uclimit=max&ucdir=newer&format=json&ucnamespace='+nsnums2[i]+next,
dataType: 'json',
async: false,
success: function(ucResponse) {
edits += ucResponse.query.usercontribs.length;
if (ucResponse["query-continue"]) {
next = '&ucstart='+ucResponse["query-continue"].usercontribs.ucstart;
} else {
next = 'stop';
};
}
});
};
edits = edits - movelog[i] - protectlog[i];
if (edits > 0) {
table += '\n|-\n| '+namespaces[i]+' || '+brace+brace+'subst:formatnum:'+edits+'}}';
};
};
table += '\n|-\n|colspan="2" align="center"| <small>Last run: '+brace+brace+'subst:#time:F j, Y}}</small>\n|}';
// Get edit token and check if we'll be creating a new page (in the case of non-autoconfirmed users)
$.ajax({
url: '/w/api.php?action=query&prop=info|revisions&intoken=edit&format=json&titles=User:'+mw.config.get('wgUserName')+'/'+editPage,
dataType: 'json',
async: false,
success: function(propResponse) {
for (var page in propResponse.query.pages) {
edittoken = propResponse.query.pages[page].edittoken.replace(/\+\\$/g,'%2B%5C');
if (propResponse.query.pages[page]["revisions"]) {
oldpage = true;
};
};
}
});
// If the user is not autoconfirmed and we're creating a new page, kick out of the script
if (!skipcaptcha && !oldpage) {
alert("Sorry, you're not autoconfirmed yet, so captcha is required to make new pages. Go create the page at: User:"+mw.config.get('wgUserName')+"/"+editPage+", then try again.");
$(this).html('Error!');
return;
};
// Edit the target page with the table
$.ajax({
url: '/w/api.php?action=edit&title=User:'+mw.config.get('wgUserName')+'/'+editPage+'&summary='+editSummary+'&minor=1&recreate=1&bot=1&text='+escape(table)+'&token='+edittoken,
type: 'POST',
async: false,
success: function() { succeeded = true; }
});
// change edit count link to reflect the status of the page save
if (succeeded) {
$(this).html('Done!');
} else {
$(this).html('Error!');
};
});
});
};