User:L235/wordcount.js

/**

* When executed, this script presents the number of words 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 countWords(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");

var text = elements

.ignore("span.localcomments")

.ignore(".wordcount-ignore")

.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"

)

);

});

}

$(document).ready(function () {

var link = mw.util.addPortletLink(

"p-cactions",

"#",

"Word counts",

"ca-wordcounts",

"Add word counts to each section"

);

$(link).click(function () {

countWords("h1");

countWords(".mw-heading2");

countWords(".mw-heading3");

});

});

})();