From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.

/**

 * 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/?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(

          $(

            '<span class="mw-editsection">' +

              count.toLocaleString() +

              " words</span>"

          )

        );

      });

  }



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

      countWords("h3");

    });

  });

})();