From StrategyWiki, the video game walkthrough and strategy guide wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/***********************************************************************************/
/* 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!');
  };

  });
});
};