User:L235/wordAndLinkCounter.js

/** * When executed, this script presents the number of words and links in each * section of the currently-open page. * Based on wordcount.js by GoldenRing: https://en.wikipedia.org/w/index.php?title=User:GoldenRing/wordcount.js&oldid=982615623 * @author User:L235 */ (function {  // This function shamelessly copied from https://stackoverflow.com/a/11348383/274460  $.fn.ignore = function (sel) {    return this.clone      .find(sel || ">*")      .remove      .end;  };

function countWordsAndLinks(h) { $("#mw-content-text") .find(h) .each(function (i, match) {       var elements = $(match).nextUntil(h);        elements.find(":hidden").addClass("wordcount-ignore");        elements          .find("*")          .filter(function  { return $(this) .css("text-decoration") .match(/line-through/); })         .addClass("wordcount-ignore");        elements.find("div#siteSub").addClass("wordcount-ignore");        elements.find("div#contentSub").addClass("wordcount-ignore");        elements.find("div#jump-to-nav").addClass("wordcount-ignore");        elements = elements.not(".wordcount-ignore");        elements = elements          .ignore("span.localcomments")          .ignore(".wordcount-ignore");        var linkcount = elements.find("a").length;        var text = elements.text;        var search = /(\d{1,2}):(\d{2}), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g;        text = text.replace(search, "");        text = text          .split(/\s/)          .filter(function (d) { return d.length > 0; })         .filter(function (d) { return d.match(/[a-zA-Z0-9]/); });       var count = text.length;        $(match).append( $(           ' ' +              count.toLocaleString +              " words, " + linkcount.toLocaleString + " links "          ) );     });  }

$(document).ready(function {    var link = mw.util.addPortletLink( "p-cactions", "#",     "Word counts", "ca-wordcounts", "Add word counts to each section" );   $(link).click(function  { countWordsAndLinks("h1"); countWordsAndLinks("h2"); countWordsAndLinks("h3"); }); }); });