User:GoldenRing/wordcount.js

// 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) {

$(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() {

$('#p-cactions').children('ul.menu').append($('

  • Word Count
  • '));

    $('#ca-wordcount').click(function() {

    countWords('h1');

    countWords('h2');

    countWords('h3');

    });

    });