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");
});
});
})();