<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.endmyopia.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-Prosesize.js</id>
	<title>MediaWiki:Gadget-Prosesize.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.endmyopia.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-Prosesize.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-Prosesize.js&amp;action=history"/>
	<updated>2026-05-03T02:01:58Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-Prosesize.js&amp;diff=13683&amp;oldid=prev</id>
		<title>NottNott at 16:02, 20 June 2020</title>
		<link rel="alternate" type="text/html" href="https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-Prosesize.js&amp;diff=13683&amp;oldid=prev"/>
		<updated>2020-06-20T16:02:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:02, 20 June 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l116&quot;&gt;Line 116:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 116:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		var header = $( '&amp;lt;span&amp;gt;' )&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		var header = $( '&amp;lt;span&amp;gt;' )&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			.prop( 'id', 'document-size-header' )&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			.prop( 'id', 'document-size-header' )&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			.html( 'Document statistics &amp;lt;small&amp;gt;(&amp;lt;a href=&amp;quot;//en.wikipedia.org/wiki/Wikipedia:Prosesize&amp;quot;&amp;gt;more information&amp;lt;/a&amp;gt;)&amp;lt;/small&amp;gt;:' );&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			.html( 'Document statistics &amp;lt;small&amp;gt;(&amp;lt;a href=&amp;quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;https:&lt;/ins&gt;//en.wikipedia.org/wiki/Wikipedia:Prosesize&amp;quot;&amp;gt;more information&amp;lt;/a&amp;gt;)&amp;lt;/small&amp;gt;:' );&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		var output = $( '&amp;lt;ul&amp;gt;' )&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		var output = $( '&amp;lt;ul&amp;gt;' )&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			.prop( 'id', 'document-size-stats' );&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			.prop( 'id', 'document-size-stats' );&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key jakeendmy_mw1720-mwnr_:diff::1.12:old-13670:rev-13683 --&gt;
&lt;/table&gt;</summary>
		<author><name>NottNott</name></author>
	</entry>
	<entry>
		<id>https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-Prosesize.js&amp;diff=13670&amp;oldid=prev</id>
		<title>NottNott: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-Prosesize.js&amp;diff=13670&amp;oldid=prev"/>
		<updated>2020-06-20T15:58:40Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:58, 20 June 2020&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key jakeendmy_mw1720-mwnr_:diff::1.12:old-13669:rev-13670 --&gt;
&lt;/table&gt;</summary>
		<author><name>NottNott</name></author>
	</entry>
	<entry>
		<id>https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-Prosesize.js&amp;diff=13669&amp;oldid=prev</id>
		<title>en&gt;Galobtter: tweak comment</title>
		<link rel="alternate" type="text/html" href="https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-Prosesize.js&amp;diff=13669&amp;oldid=prev"/>
		<updated>2019-12-08T08:17:06Z</updated>

		<summary type="html">&lt;p&gt;tweak comment&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/*  _____________________________________________________________________________&lt;br /&gt;
 * |                                                                             |&lt;br /&gt;
 * |                    === WARNING: GLOBAL GADGET FILE ===                      |&lt;br /&gt;
 * |                  Changes to this page affect many users.                    |&lt;br /&gt;
 * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |&lt;br /&gt;
 * |_____________________________________________________________________________|&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
/**&lt;br /&gt;
 * Prosesize&lt;br /&gt;
 * Documentation at en.wikipedia.org/wiki/Wikipedia:Prosesize&lt;br /&gt;
 * Rewrite of [[User:Dr_pda/prosesize.js]].&lt;br /&gt;
*/&lt;br /&gt;
'use strict';&lt;br /&gt;
( function () {&lt;br /&gt;
	function sizeFormatter( size ) {&lt;br /&gt;
		if ( size &amp;gt; 10240 ) {&lt;br /&gt;
			return ( Math.round( size / 1024 ) + '&amp;amp;nbsp;kB' );&lt;br /&gt;
		} else {&lt;br /&gt;
			return ( size + '&amp;amp;nbsp;B' );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function sizeElement( id, text, size, extraText ) {&lt;br /&gt;
		return $( '&amp;lt;li&amp;gt;' )&lt;br /&gt;
			.prop( 'id', id )&lt;br /&gt;
			.append( $( '&amp;lt;b&amp;gt;' ).text( text ) )&lt;br /&gt;
			.append( ' ' + sizeFormatter( size ) + ( extraText || '' ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function getRevisionSize( proseValue ) {&lt;br /&gt;
		var Api = new mw.Api();&lt;br /&gt;
		function appendResult( size ) {&lt;br /&gt;
			var wikiValue = sizeElement( 'wiki-size', 'Wiki text:', size );&lt;br /&gt;
			proseValue.before( wikiValue );&lt;br /&gt;
		}&lt;br /&gt;
		if ( mw.config.get( 'wgAction' ) === 'submit' ) {&lt;br /&gt;
			// Get size of text in edit box&lt;br /&gt;
			// eslint-disable-next-line no-jquery/no-global-selector&lt;br /&gt;
			appendResult( $( '#wpTextbox1' ).textSelection( 'getContents' ).length );&lt;br /&gt;
		} else if ( mw.config.get( 'wgIsArticle' ) ) {&lt;br /&gt;
			// Get revision size from API&lt;br /&gt;
			Api.get( {&lt;br /&gt;
				action: 'query',&lt;br /&gt;
				prop: 'revisions',&lt;br /&gt;
				rvprop: 'size',&lt;br /&gt;
				revids: mw.config.get( 'wgRevisionId' ),&lt;br /&gt;
				formatversion: 2&lt;br /&gt;
			} ).then( function ( result ) {&lt;br /&gt;
				appendResult( result.query.pages[ 0 ].revisions[ 0 ].size );&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function getFileSize( proseHtmlValue ) {&lt;br /&gt;
		// HTML document size not well defined for preview mode or section edit&lt;br /&gt;
		if ( mw.config.get( 'wgAction' ) !== 'submit' ) {&lt;br /&gt;
			$.get( location ).then( function ( result ) {&lt;br /&gt;
				var fsize = sizeElement( 'total-size', 'HTML document size:', result.length );&lt;br /&gt;
				proseHtmlValue.before( fsize );&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function getLength( id ) {&lt;br /&gt;
		var i;&lt;br /&gt;
		var textLength = 0;&lt;br /&gt;
		for ( i = 0; i &amp;lt; id.childNodes.length; i++ ) {&lt;br /&gt;
			if ( id.childNodes[ i ].nodeType === Node.TEXT_NODE ) {&lt;br /&gt;
				textLength += id.childNodes[ i ].nodeValue.length;&lt;br /&gt;
			} else if (&lt;br /&gt;
				id.childNodes[ i ].nodeType === Node.ELEMENT_NODE &amp;amp;&amp;amp;&lt;br /&gt;
				( id.childNodes[ i ].id === 'coordinates' || id.childNodes[ i ].className.indexOf( 'emplate' ) !== -1 )&lt;br /&gt;
			) {&lt;br /&gt;
				// special case for {{coord}} and {{fact}}-like templates&lt;br /&gt;
				// Exclude from length, and don't set background yellow&lt;br /&gt;
				id.childNodes[ i ].className += ' prosesize-special-template';&lt;br /&gt;
			} else {&lt;br /&gt;
				textLength += getLength( id.childNodes[ i ] );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return textLength;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function getRefMarkLength( id, html ) {&lt;br /&gt;
		var i;&lt;br /&gt;
		var textLength = 0;&lt;br /&gt;
		for ( i = 0; i &amp;lt; id.childNodes.length; i++ ) {&lt;br /&gt;
			if (&lt;br /&gt;
				id.childNodes[ i ].nodeType === Node.ELEMENT_NODE &amp;amp;&amp;amp;&lt;br /&gt;
				id.childNodes[ i ].className === 'reference'&lt;br /&gt;
			) {&lt;br /&gt;
				textLength += ( html ) ?&lt;br /&gt;
					id.childNodes[ i ].innerHTML.length :&lt;br /&gt;
					getLength( id.childNodes[ i ] );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return textLength;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function main() {&lt;br /&gt;
		var proseValue, refValue, refHtmlValue, proseHtmlValue;&lt;br /&gt;
		// eslint-disable-next-line no-jquery/no-global-selector&lt;br /&gt;
		var parserOutput = $( '.mw-parser-output' );&lt;br /&gt;
		// eslint-disable-next-line no-jquery/no-global-selector&lt;br /&gt;
		var prevStats = $( '#document-size-stats' );&lt;br /&gt;
		// eslint-disable-next-line no-jquery/no-global-selector&lt;br /&gt;
		var prevHeader = $( '#document-size-header' );&lt;br /&gt;
		var proseSize = 0;&lt;br /&gt;
		var proseSizeHtml = 0;&lt;br /&gt;
		var refmarksize = 0;&lt;br /&gt;
		var refmarkSizeHtml = 0;&lt;br /&gt;
		var wordCount = 0;&lt;br /&gt;
		var refSize = 0;&lt;br /&gt;
		var refSizeHtml = 0;&lt;br /&gt;
		var header = $( '&amp;lt;span&amp;gt;' )&lt;br /&gt;
			.prop( 'id', 'document-size-header' )&lt;br /&gt;
			.html( 'Document statistics &amp;lt;small&amp;gt;(&amp;lt;a href=&amp;quot;//en.wikipedia.org/wiki/Wikipedia:Prosesize&amp;quot;&amp;gt;more information&amp;lt;/a&amp;gt;)&amp;lt;/small&amp;gt;:' );&lt;br /&gt;
		var output = $( '&amp;lt;ul&amp;gt;' )&lt;br /&gt;
			.prop( 'id', 'document-size-stats' );&lt;br /&gt;
		var combined = $( '&amp;lt;div&amp;gt;' )&lt;br /&gt;
			.prop( 'id', 'document-size' )&lt;br /&gt;
			.append( header, output );&lt;br /&gt;
		if ( parserOutput.length === 0 ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		if ( prevStats.length ) {&lt;br /&gt;
			// If statistics already exist, turn them off and remove highlighting&lt;br /&gt;
			prevStats.remove();&lt;br /&gt;
			prevHeader.remove();&lt;br /&gt;
			parserOutput.children( 'p' ).removeClass( 'prosesize-highlight' );&lt;br /&gt;
		} else {&lt;br /&gt;
			// Calculate prose size and size of reference markers ([1] etc)&lt;br /&gt;
			parserOutput.children( 'p' ).each( function () {&lt;br /&gt;
				$( this ).addClass( 'prosesize-highlight' );&lt;br /&gt;
				proseSize += getLength( this );&lt;br /&gt;
				proseSizeHtml += this.innerHTML.length;&lt;br /&gt;
				refmarksize += getRefMarkLength( this, false );&lt;br /&gt;
				refmarkSizeHtml += getRefMarkLength( this, true );&lt;br /&gt;
				wordCount += this.innerHTML.replace( /(&amp;lt;([^&amp;gt;]+)&amp;gt;)/ig, '' ).split( ' ' ).length;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Calculate size of references (i.e. output of &amp;lt;references/&amp;gt;)&lt;br /&gt;
			parserOutput.find( 'ol.references' ).each( function () {&lt;br /&gt;
				refSize = getLength( this );&lt;br /&gt;
				refSizeHtml = this.innerHTML.length;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			proseValue = sizeElement( 'prose-size', 'Prose size (text only):', proseSize - refmarksize, ' (' + wordCount + ' words) &amp;quot;readable prose size&amp;quot;' );&lt;br /&gt;
			refValue = sizeElement( 'ref-size', 'References (text only):', refSize + refmarksize );&lt;br /&gt;
			refHtmlValue = sizeElement( 'ref-size-html', 'References (including all HTML code):', refSizeHtml + refmarkSizeHtml );&lt;br /&gt;
			proseHtmlValue = sizeElement( 'prose-size-html', 'Prose size (including all HTML code):', proseSizeHtml - refmarkSizeHtml );&lt;br /&gt;
			output.append( proseHtmlValue, refHtmlValue, proseValue, refValue );&lt;br /&gt;
			parserOutput.prepend( combined );&lt;br /&gt;
			getFileSize( proseHtmlValue );&lt;br /&gt;
			getRevisionSize( proseValue );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (&lt;br /&gt;
		!mw.config.get( 'wgCanonicalSpecialPageName' )&lt;br /&gt;
	) {&lt;br /&gt;
		$.ready.then( function () {&lt;br /&gt;
			/**&lt;br /&gt;
			 * Depending on whether in edit mode or preview/view mode,&lt;br /&gt;
			 * show the approppiate response upon clicking the portlet link&lt;br /&gt;
			*/&lt;br /&gt;
			var func, $portlet, notEnabled = false;&lt;br /&gt;
			if (&lt;br /&gt;
				mw.config.get( 'wgAction' ) === 'edit' ||&lt;br /&gt;
				( mw.config.get( 'wgAction' ) === 'submit' &amp;amp;&amp;amp; document.getElementById( 'wikiDiff' ) )&lt;br /&gt;
			) {&lt;br /&gt;
				notEnabled = true;&lt;br /&gt;
				func = function () {&lt;br /&gt;
					mw.notify( 'You need to preview the text for the prose size script to work in edit mode.' );&lt;br /&gt;
				};&lt;br /&gt;
			} else if ( [ 'view', 'submit', 'historysubmit', 'purge' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 ) {&lt;br /&gt;
				func = main;&lt;br /&gt;
			}&lt;br /&gt;
			if ( func ) {&lt;br /&gt;
				$portlet = $( mw.util.addPortletLink( 'p-tb', '#', 'Page size', 't-page-size', 'Calculate page and prose size' ) );&lt;br /&gt;
				if ( notEnabled ) {&lt;br /&gt;
					$portlet.addClass( 'prosesize-portlet-link-edit-mode' );&lt;br /&gt;
				}&lt;br /&gt;
				$portlet.on( 'click', function ( e ) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
					if ( window.ve &amp;amp;&amp;amp; ve.init &amp;amp;&amp;amp; ve.init.target &amp;amp;&amp;amp; ve.init.target.active ) {&lt;br /&gt;
						mw.notify( 'Prosesize does not work with the Visual Editor.' );&lt;br /&gt;
					} else {&lt;br /&gt;
						func();&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>en&gt;Galobtter</name></author>
	</entry>
</feed>