<?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-PrintOptions.js</id>
	<title>MediaWiki:Gadget-PrintOptions.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-PrintOptions.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-PrintOptions.js&amp;action=history"/>
	<updated>2026-05-07T18:48:57Z</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-PrintOptions.js&amp;diff=4200&amp;oldid=prev</id>
		<title>NottNott: Created page with &quot;/**  * Print options is a Gadget writen by Derk-Jan Hartman / User:TheDJ  * For more information see User:TheDJ/Print_options  *   * Licensed MIT and/or CC-by-SA 4.0 Copyr...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-PrintOptions.js&amp;diff=4200&amp;oldid=prev"/>
		<updated>2020-05-28T19:29:31Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;/**  * Print options is a Gadget writen by Derk-Jan Hartman / User:TheDJ  * For more information see &lt;a href=&quot;/index.php?title=User:TheDJ/Print_options&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:TheDJ/Print options (page does not exist)&quot;&gt;User:TheDJ/Print_options&lt;/a&gt;  *   * Licensed MIT and/or CC-by-SA 4.0 Copyr...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * Print options is a Gadget writen by Derk-Jan Hartman / User:TheDJ&lt;br /&gt;
 * For more information see [[User:TheDJ/Print_options]]&lt;br /&gt;
 * &lt;br /&gt;
 * Licensed MIT and/or CC-by-SA 4.0&lt;br /&gt;
Copyright (c) 2010-2017 Derk-Jan Hartman / User:TheDJ&lt;br /&gt;
&lt;br /&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy&lt;br /&gt;
of this software and associated documentation files (the &amp;quot;Software&amp;quot;), to deal&lt;br /&gt;
in the Software without restriction, including without limitation the rights&lt;br /&gt;
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&lt;br /&gt;
copies of the Software, and to permit persons to whom the Software is&lt;br /&gt;
furnished to do so, subject to the following conditions:&lt;br /&gt;
&lt;br /&gt;
The above copyright notice and this permission notice shall be included in all&lt;br /&gt;
copies or substantial portions of the Software.&lt;br /&gt;
&lt;br /&gt;
THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&lt;br /&gt;
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&lt;br /&gt;
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&lt;br /&gt;
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&lt;br /&gt;
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&lt;br /&gt;
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE&lt;br /&gt;
SOFTWARE.&lt;br /&gt;
&lt;br /&gt;
 */&lt;br /&gt;
/*global jQuery, mediaWiki */&lt;br /&gt;
(function( $, mw ) {&lt;br /&gt;
	'use strict';&lt;br /&gt;
	var windowManager;&lt;br /&gt;
	var printDialog;&lt;br /&gt;
&lt;br /&gt;
	var printOptions = {&lt;br /&gt;
		install: function () {&lt;br /&gt;
			var $printLink = $( '#t-print a' );&lt;br /&gt;
			if ( $printLink.length === 0 ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			$printLink&lt;br /&gt;
				.text( 'Print page' )&lt;br /&gt;
				.off( 'click' )&lt;br /&gt;
				.get( 0 ).addEventListener( 'click', function ( e ) {&lt;br /&gt;
					mw.loader.using( ['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows'] ).done( printOptions.createWindow );&lt;br /&gt;
					e.stopPropagation();&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				}, true ); // Use capturing phase, to beat the other click handler&lt;br /&gt;
			&lt;br /&gt;
			// Late pre-loading&lt;br /&gt;
			mw.loader.load( ['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows'] );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		createWindow: function () {&lt;br /&gt;
			function PrintDialog ( config ) {&lt;br /&gt;
				PrintDialog.super.call( this, config );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( PrintDialog, OO.ui.ProcessDialog );&lt;br /&gt;
			&lt;br /&gt;
			PrintDialog.static.name = 'printdialog';&lt;br /&gt;
			PrintDialog.static.title = 'Print this page';&lt;br /&gt;
			PrintDialog.static.actions = [&lt;br /&gt;
				{action: 'print', label: 'Print', flags: 'primary'},&lt;br /&gt;
				{label: 'Cancel', flags: 'safe' }&lt;br /&gt;
			];&lt;br /&gt;
			&lt;br /&gt;
			PrintDialog.prototype.initialize = function () {&lt;br /&gt;
				var checkbox, fieldset = [];&lt;br /&gt;
				PrintDialog.super.prototype.initialize.apply( this, arguments );&lt;br /&gt;
				this.panel = new OO.ui.PanelLayout( { padded: true, expanded: false } );&lt;br /&gt;
				this.content = new OO.ui.FieldsetLayout();&lt;br /&gt;
				&lt;br /&gt;
				for( var i = 0; i &amp;lt; printOptions.questions.length; i++) {&lt;br /&gt;
					if( printOptions.questions[i].type === 'checkbox' )&lt;br /&gt;
					{&lt;br /&gt;
						checkbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
							selected: printOptions.questions[i].checked&lt;br /&gt;
						} );&lt;br /&gt;
						printOptions.questions[i].widget = checkbox;&lt;br /&gt;
						fieldset.push(new OO.ui.FieldLayout( checkbox, { label: printOptions.questions[i].label, align: 'inline' } ) );&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				this.content.addItems( fieldset );&lt;br /&gt;
&lt;br /&gt;
				this.panel.$element.append( this.content.$element );&lt;br /&gt;
				this.$body.append( this.panel.$element );   &lt;br /&gt;
			};&lt;br /&gt;
			&lt;br /&gt;
			PrintDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
				if ( action === 'print' ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						// Get values of checkboxes&lt;br /&gt;
						var question;&lt;br /&gt;
						for( var i = 0; i &amp;lt; printOptions.questions.length; i++) {&lt;br /&gt;
							question = printOptions.questions[i];&lt;br /&gt;
							if( question.type === 'checkbox' &amp;amp;&amp;amp; question.widget ) {&lt;br /&gt;
								printOptions[question.returnvalue] = question.widget.isSelected();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
						dialog.close( { action: action } ).done( function() {&lt;br /&gt;
							printOptions.changePrintCSS();&lt;br /&gt;
							printOptions.otherEnhancements();&lt;br /&gt;
							window.print();&lt;br /&gt;
							window.location = window.location;&lt;br /&gt;
						});&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
				return PrintDialog.super.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
				&lt;br /&gt;
			if ( !windowManager ) {&lt;br /&gt;
				windowManager = new OO.ui.WindowManager();&lt;br /&gt;
				$( 'body' ).append( windowManager.$element );&lt;br /&gt;
			}&lt;br /&gt;
			if ( !printDialog ) {&lt;br /&gt;
				printDialog = new PrintDialog({&lt;br /&gt;
					size: 'medium'&lt;br /&gt;
				});&lt;br /&gt;
				&lt;br /&gt;
				windowManager.addWindows( [printDialog] );&lt;br /&gt;
			}&lt;br /&gt;
			windowManager.openWindow( printDialog );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		changePrintCSS: function () {&lt;br /&gt;
			/* Here we:&lt;br /&gt;
				 - disable stylesheets that are print specific&lt;br /&gt;
				 - make screen specific stylesheets also enabled for print medium&lt;br /&gt;
				 - remove print specific stylerules&lt;br /&gt;
				 - make screen specific stylerules also enabled for print medium&lt;br /&gt;
			*/&lt;br /&gt;
			var printStyle = '';&lt;br /&gt;
			if( this.enhanced === false ) {&lt;br /&gt;
 				var i, j, k,&lt;br /&gt;
 					rule,&lt;br /&gt;
				 	hasPrint,&lt;br /&gt;
				 	hasScreen,&lt;br /&gt;
				 	rules,&lt;br /&gt;
					stylesheet,&lt;br /&gt;
					disabled,&lt;br /&gt;
				 	stylesheets = document.styleSheets;&lt;br /&gt;
&lt;br /&gt;
				for( i = 0; i &amp;lt; stylesheets.length; i++ ) {&lt;br /&gt;
					stylesheet = stylesheets[i];&lt;br /&gt;
					disabled = false;&lt;br /&gt;
					if( !stylesheet.media ) {&lt;br /&gt;
						continue;&lt;br /&gt;
					}&lt;br /&gt;
					if( stylesheet.media.mediaText &amp;amp;&amp;amp; stylesheet.media.mediaText.indexOf( 'print' ) !== -1 ) {&lt;br /&gt;
						if(stylesheet.media.mediaText.indexOf( 'screen' ) === -1 ) {&lt;br /&gt;
							stylesheet.disabled = true;&lt;br /&gt;
						}&lt;br /&gt;
					} else if( stylesheet.media.mediaText &amp;amp;&amp;amp; stylesheet.media.mediaText.indexOf( 'screen' ) !== -1) {&lt;br /&gt;
						if( stylesheet.media.mediaText.indexOf( 'print' ) === -1 ) {&lt;br /&gt;
							try {&lt;br /&gt;
								stylesheet.media.appendMedium( 'print' );&lt;br /&gt;
							} catch( e ) {&lt;br /&gt;
								stylesheet.media.mediaText += ',print';&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					/* now test individual stylesheet rules */&lt;br /&gt;
					try {&lt;br /&gt;
						rules = stylesheet.cssRules || stylesheet.rules;&lt;br /&gt;
					} catch( e ) {&lt;br /&gt;
						/* Cross domain issue. */&lt;br /&gt;
						mw.log.warn( 'Not possible to correct stylesheet due to cross origin restrictions.' );&lt;br /&gt;
						continue;&lt;br /&gt;
					}&lt;br /&gt;
					stylesheet.compatdelete = stylesheet.deleteRule || stylesheet.removeRule;&lt;br /&gt;
					for( j = 0; rules &amp;amp;&amp;amp; j &amp;lt; rules.length; j++ ) {&lt;br /&gt;
						rule = rules[j];&lt;br /&gt;
						hasPrint = false;&lt;br /&gt;
						hasScreen = false;&lt;br /&gt;
						if( rule.type === CSSRule.MEDIA_RULE &amp;amp;&amp;amp; rule.media ) {&lt;br /&gt;
							for( k = 0; k &amp;lt; rule.media.length; k++ ) {&lt;br /&gt;
								if( rule.media[k] === 'print' ) {&lt;br /&gt;
									hasPrint = true;&lt;br /&gt;
								} else if (rule.media[k] === 'screen' ) {&lt;br /&gt;
									hasScreen = true;&lt;br /&gt;
								}&lt;br /&gt;
							}&lt;br /&gt;
						} else {&lt;br /&gt;
							continue;&lt;br /&gt;
						}&lt;br /&gt;
						if( hasPrint &amp;amp;&amp;amp; !hasScreen ) {&lt;br /&gt;
							stylesheet.compatdelete(j);&lt;br /&gt;
							j--;&lt;br /&gt;
						} else if ( hasScreen &amp;amp;&amp;amp; !hasPrint ) {&lt;br /&gt;
							try {&lt;br /&gt;
								rule.media.appendMedium( 'print' );&lt;br /&gt;
							} catch (e) {&lt;br /&gt;
								rule.media.mediaText += ',print';&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			/* Add css to hide images */&lt;br /&gt;
			if( this.noimages ) {&lt;br /&gt;
				printStyle += 'img, .thumb {display:none;}\n';&lt;br /&gt;
			}&lt;br /&gt;
			/* Add css to hide references markers and the references lists */&lt;br /&gt;
			if( this.norefs ) {&lt;br /&gt;
				printStyle += '.mw-headline[id=&amp;quot;References&amp;quot;], ol.references, .reference {display:none;}\n';&lt;br /&gt;
			}&lt;br /&gt;
			if( this.notoc ) {&lt;br /&gt;
				printStyle += '#toc, .toc {display:none;}\n';&lt;br /&gt;
			}&lt;br /&gt;
			if( this.nobackground ) {&lt;br /&gt;
				printStyle += '* {background:none !important;}\n';&lt;br /&gt;
			}&lt;br /&gt;
			if( this.blacktext ) {&lt;br /&gt;
				printStyle += '* {color:black !important;}\n';&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( printStyle ) {&lt;br /&gt;
				$( 'head' ).append( '&amp;lt;style type=&amp;quot;text/css&amp;quot; media=&amp;quot;print&amp;quot;&amp;gt;' + printStyle + '&amp;lt;/style&amp;gt;' );&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		/* Rewrite the &amp;quot;retrieved from&amp;quot; url to be readable */&lt;br /&gt;
		otherEnhancements: function () {&lt;br /&gt;
			var link = $( 'div.printfooter a' );&lt;br /&gt;
			link.text( decodeURI( link.text() ) );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		questions: [&lt;br /&gt;
			{&lt;br /&gt;
				label: &amp;quot;Hide interface elements&amp;quot;,&lt;br /&gt;
				type: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
				checked: true,&lt;br /&gt;
				returnvalue: 'enhanced'&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: 'Hide images',&lt;br /&gt;
				type: 'checkbox',&lt;br /&gt;
				checked: false,&lt;br /&gt;
				returnvalue: 'noimages'&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: 'Hide references',&lt;br /&gt;
				type: 'checkbox',&lt;br /&gt;
				checked: false,&lt;br /&gt;
				returnvalue: 'norefs'&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: 'Hide Table of Contents',&lt;br /&gt;
				type: 'checkbox',&lt;br /&gt;
				checked: false,&lt;br /&gt;
				returnvalue: 'notoc'&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: 'Remove backgrounds (Your browser might or might not override this)',&lt;br /&gt;
				type: 'checkbox',&lt;br /&gt;
				checked: false,&lt;br /&gt;
				returnvalue: 'nobackground'&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: 'Force all text to black',&lt;br /&gt;
				type: 'checkbox',&lt;br /&gt;
				checked: true,&lt;br /&gt;
				returnvalue: 'blacktext'&lt;br /&gt;
			}&lt;br /&gt;
		]&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	if ( mw.config.get( 'wgNamespaceNumber' ) &amp;gt;= 0 ) {&lt;br /&gt;
		$( function() {&lt;br /&gt;
			// This can be before the click handler by MW is installed. Instead,&lt;br /&gt;
			// re-add ourselves to the back of the document.ready list&lt;br /&gt;
			// use async timeoute to do this&lt;br /&gt;
			setTimeout( function() {&lt;br /&gt;
				$( printOptions.install );&lt;br /&gt;
			}, 0);&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
} ) ( jQuery, mediaWiki );&lt;/div&gt;</summary>
		<author><name>NottNott</name></author>
	</entry>
</feed>