User:Majr/editcounter.js

/***********************************************************************************/ /* 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 = $('Edit counter').attr( { id: 't-editcounter', href: '#', title: 'Run edit counter script' } ); $('#t-contributions').after($('').html($editCountLink));

$('#t-editcounter').click( function {

// Change edit counter link to let the user know it's thinking $(this).html('Calculating...');

// Set up variables var editSummary = 'Edited with http://strategywiki.org/wiki/User_talk:Najzere/edit_counter.js'; var tableTop = 'edit counter.js'; 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 namespaces = []; var movelog = []; var protectlog = []; var next; var edittoken; var succeeded = false; var brace = '{'; var table = ' Edit count \n{| class="wikitable '+tableClass+'" style="'+tableStyle+'"\n|-\n! ';

// Check if the user is autoconfirmed for (var right in wgUserGroups) if (wgUserGroups[right] == 'autoconfirmed') {skipcaptcha = true};

// 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) {      for (var ns in siResponse.query.namespaces) {        if (siResponse.query.namespaces[ns].id > -1) {          if(siResponse.query.namespaces[ns].id != namespaces.length)            break;          if (siResponse.query.namespaces[ns].id == 0) {            namespaces[siResponse.query.namespaces[ns].id] = 'Main';          } else if (siResponse.query.namespaces[ns].id == 4) {            namespaces[siResponse.query.namespaces[ns].id] = 'Minecraft Wiki';          } else if (siResponse.query.namespaces[ns].id == 5) {            namespaces[siResponse.query.namespaces[ns].id] = 'Minecraft Wiki talk';          } else {            namespaces[siResponse.query.namespaces[ns].id] = siResponse.query.namespaces[ns].canonical;          };          movelog[siResponse.query.namespaces[ns].id] = 0; protectlog[siResponse.query.namespaces[ns].id] = 0; };     };    }  });

// 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[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[protectResponse.query.logevents[event].ns] += 1;        };        if (protectResponse["query-continue"]) {          next = '&lestart='+protectResponse["query-continue"].logevents.lestart;        } else {          next = 'stop';        };      }    }); }; table += 'Total\n|-\n| '; // 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='+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 += brace+brace+'subst:formatnum:'+edits+'}} || '; }; };

// 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 += brace+brace+'subst:formatnum:'+uiResponse.query.userinfo.editcount+'}}\n|}';    }  });

table += ' Last updated: '+brace+brace+'subst:#time:F j, Y}}. Generated with '+tableTop+' \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!'); };

}); }); };