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.

//<pre>

//This function adds a link to the toolbox which, when clicked, displays the size of the page

//and the size of the prose. See the talk page for more details.

//

//To use this function add {{subst:js|User:Dr pda/prosesize.js}} to your monobook.js

//

function loadXMLDocPassingTemplate(url,handler, page)

{

   // branch for native XMLHttpRequest object

   if (window.XMLHttpRequest) {

       var req = new XMLHttpRequest();

   }

   // branch for IE/Windows ActiveX version

   else if (window.ActiveXObject) {

       var req = new ActiveXObject("Microsoft.XMLHTTP");

  }

  if (req) {

    req.onreadystatechange = function () {handler(req, page)};

    req.open("GET", url, true);

    req.send("");

  }

}

function getWikiText(req, page) {

   // only if req shows "loaded"

   if (req.readyState == 4) {

       // only if "OK"

       if (req.status == 200) {

           // ...processing statements go here...

 response = req.responseXML.documentElement;

        var rev = response.getElementsByTagName('rev');

 if(rev.length > 0){

   result = rev0].getAttribute('size');

          if(result > 10240){

            result = (result/1024).toFixed(0)+'&nbsp;kB';

          }

          else{

            result = result+'&nbsp;B';

          }

          wiki_value = document.createElement("li");

   wiki_value.id = "wiki-size";

   wiki_value.innerHTML = '<b>Wiki text: </b>'+result;

   var output = document.getElementById("document-size-stats");

   prose_value = document.getElementById("prose-size");

   output.insertBefore(wiki_value,prose_value);

 }

 else{

  //alert("There was a problem using the Wikipedia Search to find the wiki text size\nEither the search is not working or the correct article did not appear on the first page of results");

          wiki_value = document.createElement("li");

   wiki_value.id = "wiki-size";

   wiki_value.innerHTML = '<b>Wiki text: </b>Problem getting wiki text size';

   var output = document.getElementById("document-size-stats");

   prose_value = document.getElementById("prose-size");

   output.insertBefore(wiki_value,prose_value);

 }

       } else {

           alert("There was a problem retrieving the XML data:\n" +

               req.statusText);

       }

   }

}

function getFileSize(req, page) {

   // only if req shows "loaded"

   if (req.readyState == 4) {

       // only if "OK"

       if (req.status == 200) {

           // ...processing statements go here...

  var fsize = req.responseText.length;

  window.status = fsize;

  var total_value = document.createElement("li");

  total_value.id = "total-size";

  total_value.innerHTML='<b>File size: </b>'+(fsize/1024).toFixed(0)+'&nbsp;kB';

  var output = document.getElementById("document-size-stats");

  var prose_html_value = document.getElementById("prose-size-html");

  output.insertBefore(total_value,prose_html_value);

        } else {

           alert("There was a problem retrieving the XML data:\n" +

               req.statusText + "\n(" + url + ")");

       }

   }

}

function getLength(id){

var textLength = 0;

for(var i=0;i<id.childNodes.length; i++){

 if(id.childNodesi].nodeName == '#text'){

  textLength += id.childNodesi].nodeValue.length;

 }

 else if(id.childNodesi].id == 'coordinates' || id.childNodesi].className.indexOf('emplate') != -1){

   //special case for {{coord}} and {{fact}}-like templates

   //Exclude from length, and don't set background yellow

   id.childNodesi].style.cssText = 'background-color:white';

 }

 else{

   textLength += getLength(id.childNodesi]);

 }

}

return textLength;

}

function getRefMarkLength(id,html){

var textLength = 0;

for(var i=0;i<id.childNodes.length; i++){

 if(id.childNodesi].className == 'reference'){

  textLength += (html)? id.childNodesi].innerHTML.length : getLength(id.childNodesi]);

 }

}

return textLength;

}



function countSyllables(oneWord) {

  syllableCnt=0;

  oneWord = oneWord.toLowerCase();



// Specific common exceptions that don't follow the rule set below are handled individually

// Array of problem words (with word as key, syllable count as value)



  var problemWords = { "simile"    : 3,

                       "forever"   : 3,

                       "shoreline" : 2

                      };



  if( oneWord in problemWords ) {

    return problemWordsoneWord];

  }

  

  // These syllables would be counted as two but should be one

  var subSyllables = new Array(

                 'cial'

                ,'tia'

                ,'cius'

                ,'cious'

                ,'giu'

                ,'ion'

                ,'iou'

                ,'sia$'

                ,'[^aeiuoyt]{2,}ed$'

                ,'.ely$'

                ,'[cg]h?e[rsd]?$'

                ,'rved?$'

                ,'[aeiouy][dt]es?$'

                ,'[aeiouy][^aeiouydt]e[rsd]?$'

                ,'^[dr]e[aeiou][^aeiou]+$' // Sorts out deal, deign etc

                ,'[aeiouy]rse$' // Purse, hearse

            );



  // These syllables would be counted as one but should be two

  var addSyllables = new Array(

                 'ia'

                ,'riet'

                ,'dien'

                ,'iu'

                ,'io'

                ,'ii'

                ,'[aeiouym]bl$'

                ,'[aeiou]{3}'

                ,'^mc'

                ,'ism$'

                ,'([^aeiouy])\1l$'

                ,'[^l]lien'

                ,'^coa[dglx].'

                ,'[^gq]ua[^auieo]'

                ,'dnt$'

                ,'uity$'

                ,'ie(r|st)$'

            );



  // Single syllable prefixes and suffixes

  var prefixSuffix = new Array(

                 '/^un/'

                ,'/^fore/'

                ,'/ly$/'

                ,'/less$/'

                ,'/ful$/'

                ,'/ers?$/'

                ,'/ings?$/'

            );



  // Remove prefixes and suffixes and count how many were taken

  //php $strWord = preg_replace($arrPrefixSuffix, '', $strWord, -1, $intPrefixSuffixCount);

  var psCount=0;

  for (i=0; i<prefixSuffix.length; i++) {

      psCount += oneWord.match(prefixSuffixi+'gi').length;

      oneWord =  oneWord.replace(prefixSuffixi+'gi',"");

   }



// Removed non-word characters from word



  return syllableCnt;

}





function calcARI(sentence_count,word_count,letter_count) {

 return ( ( 4.71*(letter_count/word_count) ) + ( 0.5*(word_count/sentence_count) ) - 21.43 ).toFixed(2);

}



function getReadability() {

  readabilityString="";

  readabilityString +="<i>Automated Readability Index: </i>"+calcARI(sentence_count,word_count,letter_count);



  return readabilityString;

}

function getDocumentSize(){

contentDivName = '';

if(skin == 'vector' || skin == 'monobook' || skin == 'chick' || skin == 'myskin' || skin == 'simple'){

  contentDivName = 'bodyContent';

}

else if (skin == 'modern'){

  contentDivName = 'mw_contentholder';

}

else if (skin == 'standard' || skin == 'cologneblue' || skin == 'nostalgia'){

  contentDivName = 'article';

}

else{

  //fallback case; the above covers all currently existing skins

  contentDivName = 'bodyContent';

}

//Same for all skins if previewing page

if(wgAction == 'submit') contentDivName = 'wikiPreview';

var bodyContent = document.getElementById(contentDivName);

if(document.getElementById("document-size-stats")){

  //if statistics already exist, turn them off and remove highlighting

  var output = document.getElementById("document-size-stats");

  var oldStyle = output.className;

  var pList = bodyContent.getElementsByTagName("p");

  for(var i=0;i<pList.length; i++){

    if( (pListi].parentNode.parentNode.id == contentDivName && pListi].parentNode.className != 'previewnote')|| pListi].parentNode.parentNode.nodeName == "BLOCKQUOTE") pListi].style.cssText = oldStyle;

  }

  output.parentNode.removeChild(output);

  var header = document.getElementById("document-size-header");

  header.parentNode.removeChild(header);

}

else{

var output = document.createElement("ul");

output.id = "document-size-stats";

var prose_html_value = document.createElement("li");

prose_html_value.id = "prose-size-html";

output.appendChild(prose_html_value);

var ref_html_value = document.createElement("li");

ref_html_value.id = "ref-size-html";

output.appendChild(ref_html_value);

var prose_value = document.createElement("li");

prose_value.id = "prose-size";

output.appendChild(prose_value);

output.className = bodyContent.getElementsByTagName("p").item(0).style.cssText;

var ref_value = document.createElement("li");

ref_value.id = "ref-size";

output.appendChild(ref_value);

var readability_value = document.createElement("li");

readability_value.id = "readbility-scores";

output.appendChild(readability_value);

bodyContent.insertBefore(output, bodyContent.firstChild);

var header = document.createElement("span");

header.id = "document-size-header";

header.innerHTML = '<br/>Document statistics: <small><i>(See <a href="//en.wikipedia.org/wiki/User_talk:Dr_pda/prosesize.js">here</a> for details.)<i></small>';

bodyContent.insertBefore(header,output);

//File size not well defined for preview mode or section edit

if(wgAction != 'submit'){

 loadXMLDocPassingTemplate(location.pathname,getFileSize,'')

}



//Get size of images only if browser supports filesize property (IE)

var iList = bodyContent.getElementsByTagName("img");

if(iList.length >0 && iList0].fileSize){

//Get size of images included in document

  var image_size = 0;

  var first_magnify = true;

  for (var i=0;i<iList.length; i++){

   var im = iListi];

   if(im.getAttribute("src").indexOf("magnify-clip.png") != -1){

     if(first_magnify){

       image_size += im.fileSize*1;

       first_magnify = false;

     }

   }

   else{

     image_size += im.fileSize*1;

   }

  }

  var image_value = document.createElement("li");

  image_value.id = "image-size";

  image_value.innerHTML='<b>Images: </b>'+(image_size/1024).toFixed(0)+'&nbsp;kB';

  output.appendChild(image_value);

 }

//Calculate prose size and size of reference markers ([1] etc)

var pList = bodyContent.getElementsByTagName("p");

prose_size = 0;

prose_size_html = 0;

refmark_size = 0;

refmark_size_html = 0;

word_count = 0;

letter_count = 0;

sentence_count = 0;

for(var i=0;i<pList.length; i++){

  var para = pListi];

  if( (para.parentNode.parentNode.id == contentDivName && para.parentNode.className != 'previewnote' ) || para.parentNode.parentNode.nodeName == "BLOCKQUOTE"){

   prose_size += getLength(para);

   prose_size_html += para.innerHTML.length;

   refmark_size += getRefMarkLength(para,false);

   refmark_size_html += getRefMarkLength(para,true);

   clean_text = para.innerHTML.replace(/(<([^>]+)>)/ig,"");

   word_count += clean_text.split(' ').length;

   sentence_count += clean_text.split(/[\.!?]/).length;

   letter_count += clean_text.replace(/[^a-z]+/ig,"").length;

   para.style.cssText = "background-color:yellow";

  }

}

if((prose_size-refmark_size)>10240){

  prose_value.innerHTML='<b>Prose size (text only): </b>'+((prose_size-refmark_size)/1024).toFixed(0)+'&nbsp;kB ('+sentence_count+' sentences, '+word_count+' words, '+letter_count+' letters) "readable prose size"';

}

else{

  prose_value.innerHTML='<b>Prose size (text only): </b>'+(prose_size-refmark_size)+'&nbsp;B ('+word_count+' words) "readable prose size"';

}

if((prose_size_html-refmark_size_html)>10240){

  prose_html_value.innerHTML='<b>Prose size (including all HTML code): </b>'+((prose_size_html-refmark_size_html)/1024).toFixed(0)+'&nbsp;kB';

}

else{

  prose_html_value.innerHTML='<b>Prose size (including all HTML code): </b>'+(prose_size_html-refmark_size_html)+'&nbsp;B';

}

//Calculate size of references (i.e. output of <references/>)

var rList = bodyContent.getElementsByTagName("ol");

var ref_size = 0;

var ref_size_html = 0;

for (var i=0; i<rList.length; i++){

  if(rListi].parentNode.className == "references"){

    ref_size = getLength(rListi]);

    ref_size_html = rListi].innerHTML.length;

  }

}

if((ref_size+refmark_size)>10240){

  ref_value.innerHTML='<b>References (text only): </b>'+((ref_size+refmark_size)/1024).toFixed(0)+'&nbsp;kB';

}

else{

  ref_value.innerHTML='<b>References (text only): </b>'+(ref_size+refmark_size)+'&nbsp;B';

}

if((ref_size_html+refmark_size_html)>10240){

  ref_html_value.innerHTML='<b>References (including all HTML code): </b>'+((ref_size_html+refmark_size_html)/1024).toFixed(0)+'&nbsp;kB';

}

else{

  ref_html_value.innerHTML='<b>References (including all HTML code): </b>'+(ref_size_html+refmark_size_html)+'&nbsp;B';

}

readability_value.innerHTML='<b>Readbility: </b>'+getReadability();

//get correct name of article from wikipedia-defined global variables

var pageNameUnderscores = wgPageName;

var pageNameSpaces = pageNameUnderscores.replace(/_/g,' ')

//if page is a permalink, diff, etc don't try to search

if(!location.pathname.match('/')){ 

 //Get revision size from API

 var searchURL = wgScriptPath + '/api.php?action=query&prop=revisions&rvprop=size&format=xml&revids=' + wgCurRevisionId;

 loadXMLDocPassingTemplate(searchURL,getWikiText,pageNameSpaces);

}

else if(wgAction == 'submit'){

  //Get size of text in edit box

  result = document.getElementById('wpTextbox1').value.length;

  if(result > 10240){

    result = (result/1024).toFixed(0)+'&nbsp;kB';

  }

  else{

    result = result+'&nbsp;B';

  }

  wiki_value = document.createElement("li");

  wiki_value.id = "wiki-size";

  wiki_value.innerHTML = '<b>Wiki text: </b>'+result;

  var output = document.getElementById("document-size-stats");

  prose_value = document.getElementById("prose-size");

  output.insertBefore(wiki_value,prose_value);

}

}

}

$(function () {

 if(wgAction == 'edit' || (wgAction == 'submit' && document.getElementById('wikiDiff')) ){

   mw.util.addPortletLink('p-tb', 'javascript:alert("You need to preview the text for the prose size script to work in edit mode.")', 'Page size', 't-page-size', 'Calculate page and prose size', '', '');

   document.getElementById("t-page-size").firstChild.style.cssText = "color:black;"

 }

 else if(wgAction == 'view' || wgAction == 'submit' || wgAction == 'historysubmit' || wgAction == 'purge'){

   mw.util.addPortletLink('p-tb', 'javascript:getDocumentSize()', 'Page size', 't-page-size', 'Calculate page and prose size', '', '');

 }

});

//</pre>
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.

//<pre>

//This function adds a link to the toolbox which, when clicked, displays the size of the page

//and the size of the prose. See the talk page for more details.

//

//To use this function add {{subst:js|User:Dr pda/prosesize.js}} to your monobook.js

//

function loadXMLDocPassingTemplate(url,handler, page)

{

   // branch for native XMLHttpRequest object

   if (window.XMLHttpRequest) {

       var req = new XMLHttpRequest();

   }

   // branch for IE/Windows ActiveX version

   else if (window.ActiveXObject) {

       var req = new ActiveXObject("Microsoft.XMLHTTP");

  }

  if (req) {

    req.onreadystatechange = function () {handler(req, page)};

    req.open("GET", url, true);

    req.send("");

  }

}

function getWikiText(req, page) {

   // only if req shows "loaded"

   if (req.readyState == 4) {

       // only if "OK"

       if (req.status == 200) {

           // ...processing statements go here...

 response = req.responseXML.documentElement;

        var rev = response.getElementsByTagName('rev');

 if(rev.length > 0){

   result = rev0].getAttribute('size');

          if(result > 10240){

            result = (result/1024).toFixed(0)+'&nbsp;kB';

          }

          else{

            result = result+'&nbsp;B';

          }

          wiki_value = document.createElement("li");

   wiki_value.id = "wiki-size";

   wiki_value.innerHTML = '<b>Wiki text: </b>'+result;

   var output = document.getElementById("document-size-stats");

   prose_value = document.getElementById("prose-size");

   output.insertBefore(wiki_value,prose_value);

 }

 else{

  //alert("There was a problem using the Wikipedia Search to find the wiki text size\nEither the search is not working or the correct article did not appear on the first page of results");

          wiki_value = document.createElement("li");

   wiki_value.id = "wiki-size";

   wiki_value.innerHTML = '<b>Wiki text: </b>Problem getting wiki text size';

   var output = document.getElementById("document-size-stats");

   prose_value = document.getElementById("prose-size");

   output.insertBefore(wiki_value,prose_value);

 }

       } else {

           alert("There was a problem retrieving the XML data:\n" +

               req.statusText);

       }

   }

}

function getFileSize(req, page) {

   // only if req shows "loaded"

   if (req.readyState == 4) {

       // only if "OK"

       if (req.status == 200) {

           // ...processing statements go here...

  var fsize = req.responseText.length;

  window.status = fsize;

  var total_value = document.createElement("li");

  total_value.id = "total-size";

  total_value.innerHTML='<b>File size: </b>'+(fsize/1024).toFixed(0)+'&nbsp;kB';

  var output = document.getElementById("document-size-stats");

  var prose_html_value = document.getElementById("prose-size-html");

  output.insertBefore(total_value,prose_html_value);

        } else {

           alert("There was a problem retrieving the XML data:\n" +

               req.statusText + "\n(" + url + ")");

       }

   }

}

function getLength(id){

var textLength = 0;

for(var i=0;i<id.childNodes.length; i++){

 if(id.childNodesi].nodeName == '#text'){

  textLength += id.childNodesi].nodeValue.length;

 }

 else if(id.childNodesi].id == 'coordinates' || id.childNodesi].className.indexOf('emplate') != -1){

   //special case for {{coord}} and {{fact}}-like templates

   //Exclude from length, and don't set background yellow

   id.childNodesi].style.cssText = 'background-color:white';

 }

 else{

   textLength += getLength(id.childNodesi]);

 }

}

return textLength;

}

function getRefMarkLength(id,html){

var textLength = 0;

for(var i=0;i<id.childNodes.length; i++){

 if(id.childNodesi].className == 'reference'){

  textLength += (html)? id.childNodesi].innerHTML.length : getLength(id.childNodesi]);

 }

}

return textLength;

}



function countSyllables(oneWord) {

  syllableCnt=0;

  oneWord = oneWord.toLowerCase();



// Specific common exceptions that don't follow the rule set below are handled individually

// Array of problem words (with word as key, syllable count as value)



  var problemWords = { "simile"    : 3,

                       "forever"   : 3,

                       "shoreline" : 2

                      };



  if( oneWord in problemWords ) {

    return problemWordsoneWord];

  }

  

  // These syllables would be counted as two but should be one

  var subSyllables = new Array(

                 'cial'

                ,'tia'

                ,'cius'

                ,'cious'

                ,'giu'

                ,'ion'

                ,'iou'

                ,'sia$'

                ,'[^aeiuoyt]{2,}ed$'

                ,'.ely$'

                ,'[cg]h?e[rsd]?$'

                ,'rved?$'

                ,'[aeiouy][dt]es?$'

                ,'[aeiouy][^aeiouydt]e[rsd]?$'

                ,'^[dr]e[aeiou][^aeiou]+$' // Sorts out deal, deign etc

                ,'[aeiouy]rse$' // Purse, hearse

            );



  // These syllables would be counted as one but should be two

  var addSyllables = new Array(

                 'ia'

                ,'riet'

                ,'dien'

                ,'iu'

                ,'io'

                ,'ii'

                ,'[aeiouym]bl$'

                ,'[aeiou]{3}'

                ,'^mc'

                ,'ism$'

                ,'([^aeiouy])\1l$'

                ,'[^l]lien'

                ,'^coa[dglx].'

                ,'[^gq]ua[^auieo]'

                ,'dnt$'

                ,'uity$'

                ,'ie(r|st)$'

            );



  // Single syllable prefixes and suffixes

  var prefixSuffix = new Array(

                 '/^un/'

                ,'/^fore/'

                ,'/ly$/'

                ,'/less$/'

                ,'/ful$/'

                ,'/ers?$/'

                ,'/ings?$/'

            );



  // Remove prefixes and suffixes and count how many were taken

  //php $strWord = preg_replace($arrPrefixSuffix, '', $strWord, -1, $intPrefixSuffixCount);

  var psCount=0;

  for (i=0; i<prefixSuffix.length; i++) {

      psCount += oneWord.match(prefixSuffixi+'gi').length;

      oneWord =  oneWord.replace(prefixSuffixi+'gi',"");

   }



// Removed non-word characters from word



  return syllableCnt;

}





function calcARI(sentence_count,word_count,letter_count) {

 return ( ( 4.71*(letter_count/word_count) ) + ( 0.5*(word_count/sentence_count) ) - 21.43 ).toFixed(2);

}



function getReadability() {

  readabilityString="";

  readabilityString +="<i>Automated Readability Index: </i>"+calcARI(sentence_count,word_count,letter_count);



  return readabilityString;

}

function getDocumentSize(){

contentDivName = '';

if(skin == 'vector' || skin == 'monobook' || skin == 'chick' || skin == 'myskin' || skin == 'simple'){

  contentDivName = 'bodyContent';

}

else if (skin == 'modern'){

  contentDivName = 'mw_contentholder';

}

else if (skin == 'standard' || skin == 'cologneblue' || skin == 'nostalgia'){

  contentDivName = 'article';

}

else{

  //fallback case; the above covers all currently existing skins

  contentDivName = 'bodyContent';

}

//Same for all skins if previewing page

if(wgAction == 'submit') contentDivName = 'wikiPreview';

var bodyContent = document.getElementById(contentDivName);

if(document.getElementById("document-size-stats")){

  //if statistics already exist, turn them off and remove highlighting

  var output = document.getElementById("document-size-stats");

  var oldStyle = output.className;

  var pList = bodyContent.getElementsByTagName("p");

  for(var i=0;i<pList.length; i++){

    if( (pListi].parentNode.parentNode.id == contentDivName && pListi].parentNode.className != 'previewnote')|| pListi].parentNode.parentNode.nodeName == "BLOCKQUOTE") pListi].style.cssText = oldStyle;

  }

  output.parentNode.removeChild(output);

  var header = document.getElementById("document-size-header");

  header.parentNode.removeChild(header);

}

else{

var output = document.createElement("ul");

output.id = "document-size-stats";

var prose_html_value = document.createElement("li");

prose_html_value.id = "prose-size-html";

output.appendChild(prose_html_value);

var ref_html_value = document.createElement("li");

ref_html_value.id = "ref-size-html";

output.appendChild(ref_html_value);

var prose_value = document.createElement("li");

prose_value.id = "prose-size";

output.appendChild(prose_value);

output.className = bodyContent.getElementsByTagName("p").item(0).style.cssText;

var ref_value = document.createElement("li");

ref_value.id = "ref-size";

output.appendChild(ref_value);

var readability_value = document.createElement("li");

readability_value.id = "readbility-scores";

output.appendChild(readability_value);

bodyContent.insertBefore(output, bodyContent.firstChild);

var header = document.createElement("span");

header.id = "document-size-header";

header.innerHTML = '<br/>Document statistics: <small><i>(See <a href="//en.wikipedia.org/wiki/User_talk:Dr_pda/prosesize.js">here</a> for details.)<i></small>';

bodyContent.insertBefore(header,output);

//File size not well defined for preview mode or section edit

if(wgAction != 'submit'){

 loadXMLDocPassingTemplate(location.pathname,getFileSize,'')

}



//Get size of images only if browser supports filesize property (IE)

var iList = bodyContent.getElementsByTagName("img");

if(iList.length >0 && iList0].fileSize){

//Get size of images included in document

  var image_size = 0;

  var first_magnify = true;

  for (var i=0;i<iList.length; i++){

   var im = iListi];

   if(im.getAttribute("src").indexOf("magnify-clip.png") != -1){

     if(first_magnify){

       image_size += im.fileSize*1;

       first_magnify = false;

     }

   }

   else{

     image_size += im.fileSize*1;

   }

  }

  var image_value = document.createElement("li");

  image_value.id = "image-size";

  image_value.innerHTML='<b>Images: </b>'+(image_size/1024).toFixed(0)+'&nbsp;kB';

  output.appendChild(image_value);

 }

//Calculate prose size and size of reference markers ([1] etc)

var pList = bodyContent.getElementsByTagName("p");

prose_size = 0;

prose_size_html = 0;

refmark_size = 0;

refmark_size_html = 0;

word_count = 0;

letter_count = 0;

sentence_count = 0;

for(var i=0;i<pList.length; i++){

  var para = pListi];

  if( (para.parentNode.parentNode.id == contentDivName && para.parentNode.className != 'previewnote' ) || para.parentNode.parentNode.nodeName == "BLOCKQUOTE"){

   prose_size += getLength(para);

   prose_size_html += para.innerHTML.length;

   refmark_size += getRefMarkLength(para,false);

   refmark_size_html += getRefMarkLength(para,true);

   clean_text = para.innerHTML.replace(/(<([^>]+)>)/ig,"");

   word_count += clean_text.split(' ').length;

   sentence_count += clean_text.split(/[\.!?]/).length;

   letter_count += clean_text.replace(/[^a-z]+/ig,"").length;

   para.style.cssText = "background-color:yellow";

  }

}

if((prose_size-refmark_size)>10240){

  prose_value.innerHTML='<b>Prose size (text only): </b>'+((prose_size-refmark_size)/1024).toFixed(0)+'&nbsp;kB ('+sentence_count+' sentences, '+word_count+' words, '+letter_count+' letters) "readable prose size"';

}

else{

  prose_value.innerHTML='<b>Prose size (text only): </b>'+(prose_size-refmark_size)+'&nbsp;B ('+word_count+' words) "readable prose size"';

}

if((prose_size_html-refmark_size_html)>10240){

  prose_html_value.innerHTML='<b>Prose size (including all HTML code): </b>'+((prose_size_html-refmark_size_html)/1024).toFixed(0)+'&nbsp;kB';

}

else{

  prose_html_value.innerHTML='<b>Prose size (including all HTML code): </b>'+(prose_size_html-refmark_size_html)+'&nbsp;B';

}

//Calculate size of references (i.e. output of <references/>)

var rList = bodyContent.getElementsByTagName("ol");

var ref_size = 0;

var ref_size_html = 0;

for (var i=0; i<rList.length; i++){

  if(rListi].parentNode.className == "references"){

    ref_size = getLength(rListi]);

    ref_size_html = rListi].innerHTML.length;

  }

}

if((ref_size+refmark_size)>10240){

  ref_value.innerHTML='<b>References (text only): </b>'+((ref_size+refmark_size)/1024).toFixed(0)+'&nbsp;kB';

}

else{

  ref_value.innerHTML='<b>References (text only): </b>'+(ref_size+refmark_size)+'&nbsp;B';

}

if((ref_size_html+refmark_size_html)>10240){

  ref_html_value.innerHTML='<b>References (including all HTML code): </b>'+((ref_size_html+refmark_size_html)/1024).toFixed(0)+'&nbsp;kB';

}

else{

  ref_html_value.innerHTML='<b>References (including all HTML code): </b>'+(ref_size_html+refmark_size_html)+'&nbsp;B';

}

readability_value.innerHTML='<b>Readbility: </b>'+getReadability();

//get correct name of article from wikipedia-defined global variables

var pageNameUnderscores = wgPageName;

var pageNameSpaces = pageNameUnderscores.replace(/_/g,' ')

//if page is a permalink, diff, etc don't try to search

if(!location.pathname.match('/')){ 

 //Get revision size from API

 var searchURL = wgScriptPath + '/api.php?action=query&prop=revisions&rvprop=size&format=xml&revids=' + wgCurRevisionId;

 loadXMLDocPassingTemplate(searchURL,getWikiText,pageNameSpaces);

}

else if(wgAction == 'submit'){

  //Get size of text in edit box

  result = document.getElementById('wpTextbox1').value.length;

  if(result > 10240){

    result = (result/1024).toFixed(0)+'&nbsp;kB';

  }

  else{

    result = result+'&nbsp;B';

  }

  wiki_value = document.createElement("li");

  wiki_value.id = "wiki-size";

  wiki_value.innerHTML = '<b>Wiki text: </b>'+result;

  var output = document.getElementById("document-size-stats");

  prose_value = document.getElementById("prose-size");

  output.insertBefore(wiki_value,prose_value);

}

}

}

$(function () {

 if(wgAction == 'edit' || (wgAction == 'submit' && document.getElementById('wikiDiff')) ){

   mw.util.addPortletLink('p-tb', 'javascript:alert("You need to preview the text for the prose size script to work in edit mode.")', 'Page size', 't-page-size', 'Calculate page and prose size', '', '');

   document.getElementById("t-page-size").firstChild.style.cssText = "color:black;"

 }

 else if(wgAction == 'view' || wgAction == 'submit' || wgAction == 'historysubmit' || wgAction == 'purge'){

   mw.util.addPortletLink('p-tb', 'javascript:getDocumentSize()', 'Page size', 't-page-size', 'Calculate page and prose size', '', '');

 }

});

//</pre>

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook