<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://fr.wikidebates.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wikivizor</id>
	<title>Wikidébats - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://fr.wikidebates.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wikivizor"/>
	<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/wiki/Sp%C3%A9cial:Contributions/Wikivizor"/>
	<updated>2026-04-09T07:38:49Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikivizor/Brouillon&amp;diff=84123</id>
		<title>Utilisateur:Wikivizor/Brouillon</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikivizor/Brouillon&amp;diff=84123"/>
		<updated>2022-06-14T21:46:23Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : Page blanchie&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikivisor&amp;diff=84122</id>
		<title>Utilisateur:Wikivisor</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikivisor&amp;diff=84122"/>
		<updated>2022-06-14T21:45:58Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : Page créée avec « {{Autoévaluation |importance=6 }} »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Autoévaluation&lt;br /&gt;
|importance=6&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikivizor/Brouillon&amp;diff=84121</id>
		<title>Utilisateur:Wikivizor/Brouillon</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikivizor/Brouillon&amp;diff=84121"/>
		<updated>2022-06-14T21:45:11Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#formlink: &lt;br /&gt;
| form = Autoévaluation&lt;br /&gt;
| link text = Très important&lt;br /&gt;
| link type = button&lt;br /&gt;
| target = User:Wikivisor&lt;br /&gt;
| query string = Autoévaluation[importance]=6&lt;br /&gt;
| summary = Évaluation de l&#039;importance de l&#039;argument {{#var: Type-argument}} {{#expr: {{{position|}}} + 1}} sur {{{nombre-{{#var: Type-argument}}|}}}&lt;br /&gt;
| returnto = {{FULLPAGENAME}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=Mod%C3%A8le:Test&amp;diff=83605</id>
		<title>Modèle:Test</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=Mod%C3%A8le:Test&amp;diff=83605"/>
		<updated>2022-06-04T15:33:29Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : Page créée avec « &amp;lt;div class=&amp;quot;argument-expandable&amp;quot;&amp;gt;   &amp;lt;div class=&amp;quot;argument-expandable-title&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&amp;#039;univers&amp;quot; data-template=&amp;quot;Test&amp;quot;&amp;gt;Dieu est la ca... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;argument-expandable&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;argument-expandable-title&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot; data-template=&amp;quot;Test&amp;quot;&amp;gt;Dieu est la cause première de l&#039;univers &amp;lt;span style=&amp;quot;margin-right: 0.55em; float: left&amp;quot;&amp;gt;[[Fichier:Argument-POUR.svg | 22px | link= | alt=Argument POUR]]&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83604</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83604"/>
		<updated>2022-06-04T15:24:55Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	argumentContentCall();&lt;br /&gt;
	argumentContentDrop();&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function argumentContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.argument-expandable-title:not(.expanded)&#039;, function(){&lt;br /&gt;
	$(this).addClass(&#039;expanded&#039;);&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.argument-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|nom=&#039; + argument + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.append(text);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function argumentContentDrop(){&lt;br /&gt;
    $(document).on(&#039;click&#039;, &#039;.argument-expandable-title.expanded&#039;, function(){&lt;br /&gt;
    	$(this).removeClass(&#039;expanded&#039;);&lt;br /&gt;
    	var wrapper = $(this).parent().find(&#039;.argument-content-wrapper&#039;);&lt;br /&gt;
		wrapper.empty();&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83603</id>
		<title>Utilisateur:Wikinuma/Brouillon</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83603"/>
		<updated>2022-06-04T15:22:36Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un ejemplo de los tooltips estándares que molestan la visualización del mapa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;moredebate-expandable&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-expandable-button&amp;quot; data-template=&amp;quot;Sous-argument POUR&amp;quot; data-variable=&amp;quot;nom&amp;quot; data-value=&amp;quot;Le revenu de base apporte de meilleures conditions de vie&amp;quot;&amp;gt;&lt;br /&gt;
Le débat continue...&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;moredebate-content-drop hide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El contenido final que quiero cargar:&lt;br /&gt;
{{Le débat continue&lt;br /&gt;
|page=Le revenu de base apporte de meilleures conditions de vie&lt;br /&gt;
|sous-arguments=Le revenu de base permet de lutter contre la pauvreté-¡-Une réduction de la pauvreté -;- Le revenu de base apporte plus de liberté-¡-Une plus grande liberté -;- Le revenu de base apporte plus de temps libre-¡-Plus de temps libre -;- Le revenu de base réduit la peur du chômage-¡-Une réduction de la peur du chômage -;- Le revenu de base ne stigmatise pas ses bénéficiaires-¡-Pas de stigmatisation -;- Un revenu de base améliore la santé-¡-Une meilleure santé&lt;br /&gt;
|nombre-sous-arguments=6&lt;br /&gt;
|objections=Le revenu de base ne peut tenir ses promesses que s&#039;il est d&#039;un montant suffisant-¡-Tout dépend du montant -;- Le revenu de base favorise la solitude, l&#039;ennui et la dépression-¡-Désocialisation, ennui et dépression -;- Le revenu de base harmonise par le bas le revenu des chômeurs et des retraités-¡-Une harmonisation par le bas pour les chômeurs et les retraités -;- L&#039;instauration d&#039;un revenu de base risque de dégrader les conditions de travail-¡-Une dégradation des conditions de travail&lt;br /&gt;
|nombre-objections=4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;argument-expandable&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;argument-expandable-title&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot; data-template=&amp;quot;Contenu d&#039;argument dynamique&amp;quot;&amp;gt;Dieu est la cause première de l&#039;univers &amp;lt;span style=&amp;quot;margin-right: 0.55em; float: left&amp;quot;&amp;gt;[[Fichier:Argument-POUR.svg | 22px | link= | alt=Argument POUR]]&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83602</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83602"/>
		<updated>2022-06-04T15:22:21Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	argumentContentCall();&lt;br /&gt;
	argumentContentDrop();&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function argumentContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.argument-expandable-title:not(.expanded)&#039;, function(){&lt;br /&gt;
	$(this).addClass(&#039;expanded&#039;);&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.argument-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|nom=&#039; + argument + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
//		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
		wrapper.append(text);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function argumentContentDrop(){&lt;br /&gt;
    $(document).on(&#039;click&#039;, &#039;.argument-expandable-title.expanded&#039;, function(){&lt;br /&gt;
    	$(this).removeClass(&#039;expanded&#039;);&lt;br /&gt;
    	var wrapper = $(this).parent().find(&#039;.argument-content-wrapper&#039;);&lt;br /&gt;
//        wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
		wrapper.empty();&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83601</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83601"/>
		<updated>2022-06-04T15:16:32Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	argumentContentCall();&lt;br /&gt;
	argumentContentDrop();&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function argumentContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.argument-expandable-title:not(.expanded)&#039;, function(){&lt;br /&gt;
	$(this).addClass(&#039;expanded&#039;);&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.argument-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|nom=&#039; + argument + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function argumentContentDrop(){&lt;br /&gt;
    $(document).on(&#039;click&#039;, &#039;.argument-expandable-title.expanded&#039;, function(){&lt;br /&gt;
    	$(this).removeClass(&#039;expanded&#039;);&lt;br /&gt;
    	var wrapper = $(this).parent().find(&#039;.argument-content-wrapper&#039;);&lt;br /&gt;
        wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83600</id>
		<title>Utilisateur:Wikinuma/Brouillon</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83600"/>
		<updated>2022-06-04T15:15:32Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un ejemplo de los tooltips estándares que molestan la visualización del mapa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;moredebate-expandable&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-expandable-button&amp;quot; data-template=&amp;quot;Sous-argument POUR&amp;quot; data-variable=&amp;quot;nom&amp;quot; data-value=&amp;quot;Le revenu de base apporte de meilleures conditions de vie&amp;quot;&amp;gt;&lt;br /&gt;
Le débat continue...&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;moredebate-content-drop hide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El contenido final que quiero cargar:&lt;br /&gt;
{{Le débat continue&lt;br /&gt;
|page=Le revenu de base apporte de meilleures conditions de vie&lt;br /&gt;
|sous-arguments=Le revenu de base permet de lutter contre la pauvreté-¡-Une réduction de la pauvreté -;- Le revenu de base apporte plus de liberté-¡-Une plus grande liberté -;- Le revenu de base apporte plus de temps libre-¡-Plus de temps libre -;- Le revenu de base réduit la peur du chômage-¡-Une réduction de la peur du chômage -;- Le revenu de base ne stigmatise pas ses bénéficiaires-¡-Pas de stigmatisation -;- Un revenu de base améliore la santé-¡-Une meilleure santé&lt;br /&gt;
|nombre-sous-arguments=6&lt;br /&gt;
|objections=Le revenu de base ne peut tenir ses promesses que s&#039;il est d&#039;un montant suffisant-¡-Tout dépend du montant -;- Le revenu de base favorise la solitude, l&#039;ennui et la dépression-¡-Désocialisation, ennui et dépression -;- Le revenu de base harmonise par le bas le revenu des chômeurs et des retraités-¡-Une harmonisation par le bas pour les chômeurs et les retraités -;- L&#039;instauration d&#039;un revenu de base risque de dégrader les conditions de travail-¡-Une dégradation des conditions de travail&lt;br /&gt;
|nombre-objections=4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;argument-expandable&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;argument-expandable-title&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot; data-template=&amp;quot;Contenu d&#039;argument dynamique&amp;quot;&amp;gt;Dieu est la cause première de l&#039;univers &amp;lt;span style=&amp;quot;margin-right: 0.25em; float: left&amp;quot;&amp;gt;[[Fichier:Argument-POUR.svg | 22px | link= | alt=Argument POUR]]&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=83599</id>
		<title>MediaWiki:Vector.css</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=83599"/>
		<updated>2022-06-04T15:14:59Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.argument-expandable-title {&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 1rem;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  line-height: 1.55rem;&lt;br /&gt;
}&lt;br /&gt;
.argument-expandable-title::before {&lt;br /&gt;
  background: url(&amp;quot;//farm.wikidebates.org/w/images/fr/0/03/MediaWiki_Vector_skin_right_arrow.svg&amp;quot;) no-repeat scroll left 7px transparent;&lt;br /&gt;
  background-size: 15px;&lt;br /&gt;
  content: &#039;&#039;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 20px;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  float: left;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.argument-expandable-title.expanded::before {&lt;br /&gt;
  background: url(&amp;quot;//farm.wikidebates.org/w/images/fr/f/f1/MediaWiki_Vector_skin_action_arrow.svg&amp;quot;) no-repeat scroll left 7px transparent;&lt;br /&gt;
}&lt;br /&gt;
.argument-expandable-title:hover, .argument-expandable-title.expanded {&lt;br /&gt;
  text-decoration: underline;  &lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83598</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83598"/>
		<updated>2022-06-04T15:06:05Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	argumentContentCall();&lt;br /&gt;
	argumentContentDrop();&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function argumentContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.argument-expandable-title:not(.expanded)&#039;, function(){&lt;br /&gt;
	$(this).addClass(&#039;expanded&#039;);&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.argument-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|nom=&#039; + argument + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;argument-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function argumentContentDrop(){&lt;br /&gt;
    $(document).on(&#039;click&#039;, &#039;.argument-expandable-title.expanded&#039;, function(){&lt;br /&gt;
    	$(this).removeClass(&#039;expanded&#039;);&lt;br /&gt;
    	var wrapper = $(this).parent().find(&#039;.argument-content-wrapper&#039;);&lt;br /&gt;
        wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;argument-content-drop hide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83597</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83597"/>
		<updated>2022-06-04T15:04:43Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	argumentContentCall();&lt;br /&gt;
	argumentContentDrop();&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function argumentContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.argument-expandable-title:not(.expanded)&#039;, function(){&lt;br /&gt;
	$(this).addClass(&#039;expanded&#039;);&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.argument-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|nom=&#039; + argument + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;argument-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function argumentContentDrop(){&lt;br /&gt;
    $(document).on(&#039;click&#039;, &#039;.argument-expandable-title.expanded&#039;, function(){&lt;br /&gt;
    	$(this).removeClass(&#039;expanded&#039;);&lt;br /&gt;
        $(this).parent().replaceWith(&#039;&amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;argument-content-drop hide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83596</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83596"/>
		<updated>2022-06-04T15:02:44Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	argumentContentCall();&lt;br /&gt;
	argumentContentDrop();&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function argumentContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.argument-expandable-title:not(.expanded)&#039;, function(){&lt;br /&gt;
	$(this).addClass(&#039;expanded&#039;);&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.argument-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|nom=&#039; + argument + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;argument-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function argumentContentDrop(){&lt;br /&gt;
    $(document).on(&#039;click&#039;, &#039;.argument-content-drop&#039;, function(){&lt;br /&gt;
        $(this).parent().replaceWith(&#039;&amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;argument-content-drop hide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=83595</id>
		<title>MediaWiki:Vector.css</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=83595"/>
		<updated>2022-06-04T15:00:32Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
.argument-expandable-title {&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 1rem;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  line-height: 1.55rem;&lt;br /&gt;
}&lt;br /&gt;
.argument-expandable-title::before {&lt;br /&gt;
  background: url(&amp;quot;//farm.wikidebates.org/w/images/fr/0/03/MediaWiki_Vector_skin_right_arrow.svg&amp;quot;) no-repeat scroll left 7px transparent;&lt;br /&gt;
  background-size: 15px;&lt;br /&gt;
  content: &#039;&#039;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 20px;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  float: left;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.argument-expandable-title.expanded::before {&lt;br /&gt;
  background: url(&amp;quot;//farm.wikidebates.org/w/images/fr/f/f1/MediaWiki_Vector_skin_action_arrow.svg&amp;quot;) no-repeat scroll left 7px transparent;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83594</id>
		<title>Utilisateur:Wikinuma/Brouillon</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83594"/>
		<updated>2022-06-04T13:31:01Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un ejemplo de los tooltips estándares que molestan la visualización del mapa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;moredebate-expandable&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-expandable-button&amp;quot; data-template=&amp;quot;Sous-argument POUR&amp;quot; data-variable=&amp;quot;nom&amp;quot; data-value=&amp;quot;Le revenu de base apporte de meilleures conditions de vie&amp;quot;&amp;gt;&lt;br /&gt;
Le débat continue...&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;moredebate-content-drop hide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El contenido final que quiero cargar:&lt;br /&gt;
{{Le débat continue&lt;br /&gt;
|page=Le revenu de base apporte de meilleures conditions de vie&lt;br /&gt;
|sous-arguments=Le revenu de base permet de lutter contre la pauvreté-¡-Une réduction de la pauvreté -;- Le revenu de base apporte plus de liberté-¡-Une plus grande liberté -;- Le revenu de base apporte plus de temps libre-¡-Plus de temps libre -;- Le revenu de base réduit la peur du chômage-¡-Une réduction de la peur du chômage -;- Le revenu de base ne stigmatise pas ses bénéficiaires-¡-Pas de stigmatisation -;- Un revenu de base améliore la santé-¡-Une meilleure santé&lt;br /&gt;
|nombre-sous-arguments=6&lt;br /&gt;
|objections=Le revenu de base ne peut tenir ses promesses que s&#039;il est d&#039;un montant suffisant-¡-Tout dépend du montant -;- Le revenu de base favorise la solitude, l&#039;ennui et la dépression-¡-Désocialisation, ennui et dépression -;- Le revenu de base harmonise par le bas le revenu des chômeurs et des retraités-¡-Une harmonisation par le bas pour les chômeurs et les retraités -;- L&#039;instauration d&#039;un revenu de base risque de dégrader les conditions de travail-¡-Une dégradation des conditions de travail&lt;br /&gt;
|nombre-objections=4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;argument-expandable&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;h3 argument-expandable-title&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot; data-template=&amp;quot;Contenu d&#039;argument dynamique&amp;quot;&amp;gt;Dieu est la cause première de l&#039;univers &amp;lt;span style=&amp;quot;margin-right: 0.25em; float: left&amp;quot;&amp;gt;[[Fichier:Argument-POUR.svg | 22px | link= | alt=Argument POUR]]&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;argument-content-drop hide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83593</id>
		<title>Utilisateur:Wikinuma/Brouillon</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83593"/>
		<updated>2022-06-04T13:29:56Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un ejemplo de los tooltips estándares que molestan la visualización del mapa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;moredebate-expandable&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-expandable-button&amp;quot; data-template=&amp;quot;Sous-argument POUR&amp;quot; data-variable=&amp;quot;nom&amp;quot; data-value=&amp;quot;Le revenu de base apporte de meilleures conditions de vie&amp;quot;&amp;gt;&lt;br /&gt;
Le débat continue...&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;moredebate-content-drop hide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El contenido final que quiero cargar:&lt;br /&gt;
{{Le débat continue&lt;br /&gt;
|page=Le revenu de base apporte de meilleures conditions de vie&lt;br /&gt;
|sous-arguments=Le revenu de base permet de lutter contre la pauvreté-¡-Une réduction de la pauvreté -;- Le revenu de base apporte plus de liberté-¡-Une plus grande liberté -;- Le revenu de base apporte plus de temps libre-¡-Plus de temps libre -;- Le revenu de base réduit la peur du chômage-¡-Une réduction de la peur du chômage -;- Le revenu de base ne stigmatise pas ses bénéficiaires-¡-Pas de stigmatisation -;- Un revenu de base améliore la santé-¡-Une meilleure santé&lt;br /&gt;
|nombre-sous-arguments=6&lt;br /&gt;
|objections=Le revenu de base ne peut tenir ses promesses que s&#039;il est d&#039;un montant suffisant-¡-Tout dépend du montant -;- Le revenu de base favorise la solitude, l&#039;ennui et la dépression-¡-Désocialisation, ennui et dépression -;- Le revenu de base harmonise par le bas le revenu des chômeurs et des retraités-¡-Une harmonisation par le bas pour les chômeurs et les retraités -;- L&#039;instauration d&#039;un revenu de base risque de dégrader les conditions de travail-¡-Une dégradation des conditions de travail&lt;br /&gt;
|nombre-objections=4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;argument-expandable&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;h3 argument-expandable-title&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot; data-template=&amp;quot;Contenu d&#039;argument dynamique&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;margin-right: 0.25em&amp;quot;&amp;gt;[[Fichier:Argument-POUR.svg | 22px | link= | alt=Argument POUR]]&amp;lt;/span&amp;gt;&lt;br /&gt;
Dieu est la cause première de l&#039;univers&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;argument-content-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;argument-content-drop hide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=83592</id>
		<title>MediaWiki:Vector.css</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=83592"/>
		<updated>2022-06-04T13:29:05Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
.argument-expandable-title:before {&lt;br /&gt;
  background: url(&amp;quot;//farm.wikidebates.org/w/images/fr/0/03/MediaWiki_Vector_skin_right_arrow.svg&amp;quot;) no-repeat scroll left 7px transparent;&lt;br /&gt;
  background-size: 15px;&lt;br /&gt;
  content: &#039;&#039;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 20px;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  float: left;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=83591</id>
		<title>MediaWiki:Vector.css</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=83591"/>
		<updated>2022-06-04T13:28:17Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.argument-expandable-title::before {&lt;br /&gt;
  background: url(&amp;quot;//farm.wikidebates.org/w/images/fr/0/03/MediaWiki_Vector_skin_right_arrow.svg&amp;quot;) no-repeat scroll left 7px transparent;&lt;br /&gt;
  background-size: 15px;&lt;br /&gt;
  content: &#039;&#039;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 20px;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  float: left;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadgets-definition&amp;diff=83590</id>
		<title>MediaWiki:Gadgets-definition</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadgets-definition&amp;diff=83590"/>
		<updated>2022-06-04T13:08:42Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Cette page sert à définir les gadgets utilisés dans [[Spécial:Gadgets]]&lt;br /&gt;
# Avant de la modifier, assurez-vous d&#039;avoir compris son fonctionnement décrit sur [[mw:Extension:Gadgets#Usage]]&lt;br /&gt;
# Ne changez pas le nom d&#039;un gadget existant (il serait alors désactivé pour tous)&lt;br /&gt;
# Si un gadget ne fonctionne pas, on peut le délister en remplaçant * par #&lt;br /&gt;
* Suppress-tooltip[ResourceLoader|type=general|default|hidden]|Suppress-tooltip.js&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadget-Bootstrapped.js&amp;diff=83589</id>
		<title>MediaWiki:Gadget-Bootstrapped.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadget-Bootstrapped.js&amp;diff=83589"/>
		<updated>2022-06-04T13:08:22Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * Getting Bootstrap and doing stuff&lt;br /&gt;
 * @example &amp;lt;&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
$(&#039;&amp;lt;link/&amp;gt;&#039;, {&lt;br /&gt;
   rel: &#039;stylesheet&#039;,&lt;br /&gt;
   href: &#039;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css&amp;quot; integrity=&amp;quot;sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3&#039;,&lt;br /&gt;
   crossorigin: &#039;anonymous&#039;&lt;br /&gt;
}).appendTo(&#039;head&#039;);&lt;br /&gt;
&lt;br /&gt;
$.when(&lt;br /&gt;
    mw.loader.getScript( &#039;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js&#039; )&lt;br /&gt;
)&lt;br /&gt;
.then(&lt;br /&gt;
    function(){&lt;br /&gt;
&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadget-Bootstrapped.js&amp;diff=83588</id>
		<title>MediaWiki:Gadget-Bootstrapped.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadget-Bootstrapped.js&amp;diff=83588"/>
		<updated>2022-06-04T12:45:42Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * Getting Bootstrap and doing stuff&lt;br /&gt;
 * @example &amp;lt;&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
$(&#039;&amp;lt;link/&amp;gt;&#039;, {&lt;br /&gt;
   rel: &#039;stylesheet&#039;,&lt;br /&gt;
   href: &#039;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css&amp;quot; integrity=&amp;quot;sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3&#039;,&lt;br /&gt;
   crossorigin: &#039;anonymous&#039;&lt;br /&gt;
}).appendTo(&#039;head&#039;);&lt;br /&gt;
&lt;br /&gt;
$.when(&lt;br /&gt;
    mw.loader.getScript( &#039;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js&#039; )&lt;br /&gt;
)&lt;br /&gt;
.then(&lt;br /&gt;
    function(){&lt;br /&gt;
		$(&#039;.collapse&#039;).collapse();&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadget-Bootstrapped&amp;diff=83587</id>
		<title>MediaWiki:Gadget-Bootstrapped</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadget-Bootstrapped&amp;diff=83587"/>
		<updated>2022-06-04T12:43:39Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : Page créée avec « Get Bootstrap and do things »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Get Bootstrap and do things&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikivizor/Brouillon&amp;diff=83586</id>
		<title>Utilisateur:Wikivizor/Brouillon</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikivizor/Brouillon&amp;diff=83586"/>
		<updated>2022-06-04T12:41:58Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div type=&amp;quot;button&amp;quot; class=&amp;quot;btn btn-info&amp;quot; data-toggle=&amp;quot;collapse&amp;quot; data-target=&amp;quot;#demo&amp;quot;&amp;gt;Simple collapsible&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;demo&amp;quot; class=&amp;quot;collapse&amp;quot;&amp;gt;&lt;br /&gt;
Lorem ipsum dolor sit amet, consectetur adipisicing elit,&lt;br /&gt;
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.&lt;br /&gt;
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris&lt;br /&gt;
nisi ut aliquip ex ea commodo consequat.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadgets-definition&amp;diff=83585</id>
		<title>MediaWiki:Gadgets-definition</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadgets-definition&amp;diff=83585"/>
		<updated>2022-06-04T12:38:26Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Cette page sert à définir les gadgets utilisés dans [[Spécial:Gadgets]]&lt;br /&gt;
# Avant de la modifier, assurez-vous d&#039;avoir compris son fonctionnement décrit sur [[mw:Extension:Gadgets#Usage]]&lt;br /&gt;
# Ne changez pas le nom d&#039;un gadget existant (il serait alors désactivé pour tous)&lt;br /&gt;
# Si un gadget ne fonctionne pas, on peut le délister en remplaçant * par #&lt;br /&gt;
* Suppress-tooltip[ResourceLoader|type=general|default|hidden]|Suppress-tooltip.js&lt;br /&gt;
* Bootstrapped[ResourceLoader|type=general|default|hidden]|Bootstrapped.js&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadget-Bootstrapped.js&amp;diff=83584</id>
		<title>MediaWiki:Gadget-Bootstrapped.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadget-Bootstrapped.js&amp;diff=83584"/>
		<updated>2022-06-04T12:37:21Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : Page créée avec « /**  * Getting Bootstrap and doing stuff  * @example &amp;lt;&amp;gt;  */   $(&amp;#039;&amp;lt;link/&amp;gt;&amp;#039;, {    rel: &amp;#039;stylesheet&amp;#039;,    type: &amp;#039;text/css&amp;#039;,    href: &amp;#039;https://cdn.jsdelivr.net/npm/bootstra... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * Getting Bootstrap and doing stuff&lt;br /&gt;
 * @example &amp;lt;&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
$(&#039;&amp;lt;link/&amp;gt;&#039;, {&lt;br /&gt;
   rel: &#039;stylesheet&#039;,&lt;br /&gt;
   type: &#039;text/css&#039;,&lt;br /&gt;
   href: &#039;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css&amp;quot; integrity=&amp;quot;sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3&#039;,&lt;br /&gt;
   crossorigin: &#039;anonymous&#039;&lt;br /&gt;
}).appendTo(&#039;head&#039;);&lt;br /&gt;
&lt;br /&gt;
$.when(&lt;br /&gt;
    mw.loader.getScript( &#039;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js&#039; )&lt;br /&gt;
)&lt;br /&gt;
.then(&lt;br /&gt;
    function(){&lt;br /&gt;
		$(&#039;.collapse&#039;).collapse();&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83531</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83531"/>
		<updated>2022-06-03T16:43:36Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
});&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83530</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83530"/>
		<updated>2022-06-03T16:42:17Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
});&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;NavFramex&amp;quot; style=&amp;quot;margin: 1em 0 1em 0; padding: 0.5em; width:99%; border-style:solid; border-width: 1px; border-radius:0.6em; border-color:#38baa8;&amp;quot;&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83529</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83529"/>
		<updated>2022-06-03T16:40:17Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
});&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;NavFramex&amp;quot; style=&amp;quot;margin: 1em 0 1em 0; padding: 0.5em; width:99%; border-style:solid; border-width: 1px; border-radius:0.6em; border-color:#38baa8;&amp;quot;&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83528</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83528"/>
		<updated>2022-06-03T16:37:28Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
});&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=83527</id>
		<title>MediaWiki:Vector.css</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=83527"/>
		<updated>2022-06-03T16:34:05Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : Page blanchie&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=83526</id>
		<title>MediaWiki:Vector.css</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=83526"/>
		<updated>2022-06-03T16:15:38Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.moredebate-content-wrapper.show .fr-collapsible-content { &lt;br /&gt;
	display: block !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83525</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83525"/>
		<updated>2022-06-03T16:14:04Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
	removeTooltips();&lt;br /&gt;
});&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83524</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83524"/>
		<updated>2022-06-03T16:11:41Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
	removeTooltips();&lt;br /&gt;
});&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	$(this).parent().find(&#039;.fr-collapsible-content&#039;).show();&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83523</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83523"/>
		<updated>2022-06-03T16:09:48Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
	removeTooltips();&lt;br /&gt;
});&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		text.find(&#039;.fr-collapsible-content&#039;).show();&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83522</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83522"/>
		<updated>2022-06-03T16:07:49Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
	removeTooltips();&lt;br /&gt;
});&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
		wrapper.find(&#039;.fr-collapsible-content&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83521</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83521"/>
		<updated>2022-06-03T16:07:14Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
	removeTooltips();&lt;br /&gt;
});&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
		wrapper.find($(&#039;.fr-collapsible-content&#039;)).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83520</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83520"/>
		<updated>2022-06-03T16:04:46Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
	removeTooltips();&lt;br /&gt;
});&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
		$(&#039;.fr-collapsible-content&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83519</id>
		<title>Utilisateur:Wikinuma/Brouillon</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83519"/>
		<updated>2022-06-03T16:02:45Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un ejemplo de los tooltips estándares que molestan la visualización del mapa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;moredebate-expandable&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-expandable-button&amp;quot; data-template=&amp;quot;Sous-argument POUR&amp;quot; data-variable=&amp;quot;nom&amp;quot; data-value=&amp;quot;Le revenu de base apporte de meilleures conditions de vie&amp;quot;&amp;gt;&lt;br /&gt;
Le débat continue...&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;moredebate-content-drop hide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El contenido final que quiero cargar:&lt;br /&gt;
{{Le débat continue&lt;br /&gt;
|page=Le revenu de base apporte de meilleures conditions de vie&lt;br /&gt;
|sous-arguments=Le revenu de base permet de lutter contre la pauvreté-¡-Une réduction de la pauvreté -;- Le revenu de base apporte plus de liberté-¡-Une plus grande liberté -;- Le revenu de base apporte plus de temps libre-¡-Plus de temps libre -;- Le revenu de base réduit la peur du chômage-¡-Une réduction de la peur du chômage -;- Le revenu de base ne stigmatise pas ses bénéficiaires-¡-Pas de stigmatisation -;- Un revenu de base améliore la santé-¡-Une meilleure santé&lt;br /&gt;
|nombre-sous-arguments=6&lt;br /&gt;
|objections=Le revenu de base ne peut tenir ses promesses que s&#039;il est d&#039;un montant suffisant-¡-Tout dépend du montant -;- Le revenu de base favorise la solitude, l&#039;ennui et la dépression-¡-Désocialisation, ennui et dépression -;- Le revenu de base harmonise par le bas le revenu des chômeurs et des retraités-¡-Une harmonisation par le bas pour les chômeurs et les retraités -;- L&#039;instauration d&#039;un revenu de base risque de dégrader les conditions de travail-¡-Une dégradation des conditions de travail&lt;br /&gt;
|nombre-objections=4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83516</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83516"/>
		<updated>2022-06-03T15:38:40Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
	removeTooltips();&lt;br /&gt;
});&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var template = $(this).data(&#039;template&#039;);&lt;br /&gt;
	var variable = $(this).data(&#039;variable&#039;);&lt;br /&gt;
	var page     = $(this).data(&#039;value&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{&#039; + template + &#039;|&#039; + variable + &#039;=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83509</id>
		<title>Utilisateur:Wikinuma/Brouillon</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83509"/>
		<updated>2022-06-03T15:35:53Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un ejemplo de los tooltips estándares que molestan la visualización del mapa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;moredebate-expandable&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-expandable-button&amp;quot; data-template=&amp;quot;Le débat continue&amp;quot; data-variable=&amp;quot;page&amp;quot; data-value=&amp;quot;Le revenu de base apporte de meilleures conditions de vie&amp;quot;&amp;gt;&lt;br /&gt;
Le débat continue...&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;moredebate-content-drop hide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El contenido final que quiero cargar:&lt;br /&gt;
{{Le débat continue&lt;br /&gt;
|page=Le revenu de base apporte de meilleures conditions de vie&lt;br /&gt;
|sous-arguments=Le revenu de base permet de lutter contre la pauvreté-¡-Une réduction de la pauvreté -;- Le revenu de base apporte plus de liberté-¡-Une plus grande liberté -;- Le revenu de base apporte plus de temps libre-¡-Plus de temps libre -;- Le revenu de base réduit la peur du chômage-¡-Une réduction de la peur du chômage -;- Le revenu de base ne stigmatise pas ses bénéficiaires-¡-Pas de stigmatisation -;- Un revenu de base améliore la santé-¡-Une meilleure santé&lt;br /&gt;
|nombre-sous-arguments=6&lt;br /&gt;
|objections=Le revenu de base ne peut tenir ses promesses que s&#039;il est d&#039;un montant suffisant-¡-Tout dépend du montant -;- Le revenu de base favorise la solitude, l&#039;ennui et la dépression-¡-Désocialisation, ennui et dépression -;- Le revenu de base harmonise par le bas le revenu des chômeurs et des retraités-¡-Une harmonisation par le bas pour les chômeurs et les retraités -;- L&#039;instauration d&#039;un revenu de base risque de dégrader les conditions de travail-¡-Une dégradation des conditions de travail&lt;br /&gt;
|nombre-objections=4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83506</id>
		<title>Utilisateur:Wikinuma/Brouillon</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83506"/>
		<updated>2022-06-03T15:27:20Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un ejemplo de los tooltips estándares que molestan la visualización del mapa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
La función que no funciona (el argumento no se abre):&lt;br /&gt;
&amp;lt;div class=&amp;quot;moredebate-expandable&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-expandable-button&amp;quot; data-page=&amp;quot;Le revenu de base apporte de meilleures conditions de vie&amp;quot;&amp;gt;&lt;br /&gt;
Le débat continue...&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;moredebate-content-drop hide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Sous-argument POUR&lt;br /&gt;
|nom=Le revenu de base apporte de meilleures conditions de vie&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
El contenido final que quiero cargar:&lt;br /&gt;
{{Le débat continue&lt;br /&gt;
|page=Le revenu de base apporte de meilleures conditions de vie&lt;br /&gt;
|sous-arguments=Le revenu de base permet de lutter contre la pauvreté-¡-Une réduction de la pauvreté -;- Le revenu de base apporte plus de liberté-¡-Une plus grande liberté -;- Le revenu de base apporte plus de temps libre-¡-Plus de temps libre -;- Le revenu de base réduit la peur du chômage-¡-Une réduction de la peur du chômage -;- Le revenu de base ne stigmatise pas ses bénéficiaires-¡-Pas de stigmatisation -;- Un revenu de base améliore la santé-¡-Une meilleure santé&lt;br /&gt;
|nombre-sous-arguments=6&lt;br /&gt;
|objections=Le revenu de base ne peut tenir ses promesses que s&#039;il est d&#039;un montant suffisant-¡-Tout dépend du montant -;- Le revenu de base favorise la solitude, l&#039;ennui et la dépression-¡-Désocialisation, ennui et dépression -;- Le revenu de base harmonise par le bas le revenu des chômeurs et des retraités-¡-Une harmonisation par le bas pour les chômeurs et les retraités -;- L&#039;instauration d&#039;un revenu de base risque de dégrader les conditions de travail-¡-Une dégradation des conditions de travail&lt;br /&gt;
|nombre-objections=4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83505</id>
		<title>Utilisateur:Wikinuma/Brouillon</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83505"/>
		<updated>2022-06-03T15:26:07Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un ejemplo de los tooltips estándares que molestan la visualización del mapa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
La función que no funciona (el argumento no se abre):&lt;br /&gt;
&amp;lt;div class=&amp;quot;moredebate-expandable&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-expandable-button&amp;quot; data-page=&amp;quot;Le revenu de base apporte de meilleures conditions de vie&amp;quot;&amp;gt;&lt;br /&gt;
Le débat continue...&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;moredebate-content-drop hide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El contenido final que quiero cargar:&lt;br /&gt;
{{Le débat continue&lt;br /&gt;
|page=Le revenu de base apporte de meilleures conditions de vie&lt;br /&gt;
|sous-arguments=Le revenu de base permet de lutter contre la pauvreté-¡-Une réduction de la pauvreté -;- Le revenu de base apporte plus de liberté-¡-Une plus grande liberté -;- Le revenu de base apporte plus de temps libre-¡-Plus de temps libre -;- Le revenu de base réduit la peur du chômage-¡-Une réduction de la peur du chômage -;- Le revenu de base ne stigmatise pas ses bénéficiaires-¡-Pas de stigmatisation -;- Un revenu de base améliore la santé-¡-Une meilleure santé&lt;br /&gt;
|nombre-sous-arguments=6&lt;br /&gt;
|objections=Le revenu de base ne peut tenir ses promesses que s&#039;il est d&#039;un montant suffisant-¡-Tout dépend du montant -;- Le revenu de base favorise la solitude, l&#039;ennui et la dépression-¡-Désocialisation, ennui et dépression -;- Le revenu de base harmonise par le bas le revenu des chômeurs et des retraités-¡-Une harmonisation par le bas pour les chômeurs et les retraités -;- L&#039;instauration d&#039;un revenu de base risque de dégrader les conditions de travail-¡-Une dégradation des conditions de travail&lt;br /&gt;
|nombre-objections=4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83504</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83504"/>
		<updated>2022-06-03T15:24:37Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
	removeTooltips();&lt;br /&gt;
});&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	var page = $(this).data(&#039;page&#039;);&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{Sous-argument POUR | nom=&#039; + page + &#039;}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83503</id>
		<title>Utilisateur:Wikinuma/Brouillon</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=Utilisateur:Wikinuma/Brouillon&amp;diff=83503"/>
		<updated>2022-06-03T15:23:07Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un ejemplo de los tooltips estándares que molestan la visualización del mapa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;div class=&amp;quot;map-expandable masquer-externe&amp;quot; data-argument=&amp;quot;Dieu est la cause première de l&#039;univers&amp;quot;&amp;gt;&amp;lt;div&amp;gt;[[Dieu est la cause première de l&#039;univers]]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
La función que no funciona (el argumento no se abre):&lt;br /&gt;
&amp;lt;div class=&amp;quot;moredebate-expandable&amp;quot; data-page=&amp;quot;Le revenu de base apporte de meilleures conditions de vie&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-expandable-button&amp;quot;&amp;gt;&lt;br /&gt;
Le débat continue...&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;moredebate-content-drop hide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El contenido final que quiero cargar:&lt;br /&gt;
{{Le débat continue&lt;br /&gt;
|page=Le revenu de base apporte de meilleures conditions de vie&lt;br /&gt;
|sous-arguments=Le revenu de base permet de lutter contre la pauvreté-¡-Une réduction de la pauvreté -;- Le revenu de base apporte plus de liberté-¡-Une plus grande liberté -;- Le revenu de base apporte plus de temps libre-¡-Plus de temps libre -;- Le revenu de base réduit la peur du chômage-¡-Une réduction de la peur du chômage -;- Le revenu de base ne stigmatise pas ses bénéficiaires-¡-Pas de stigmatisation -;- Un revenu de base améliore la santé-¡-Une meilleure santé&lt;br /&gt;
|nombre-sous-arguments=6&lt;br /&gt;
|objections=Le revenu de base ne peut tenir ses promesses que s&#039;il est d&#039;un montant suffisant-¡-Tout dépend du montant -;- Le revenu de base favorise la solitude, l&#039;ennui et la dépression-¡-Désocialisation, ennui et dépression -;- Le revenu de base harmonise par le bas le revenu des chômeurs et des retraités-¡-Une harmonisation par le bas pour les chômeurs et les retraités -;- L&#039;instauration d&#039;un revenu de base risque de dégrader les conditions de travail-¡-Une dégradation des conditions de travail&lt;br /&gt;
|nombre-objections=4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadget-Suppress-tooltip.js&amp;diff=83501</id>
		<title>MediaWiki:Gadget-Suppress-tooltip.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadget-Suppress-tooltip.js&amp;diff=83501"/>
		<updated>2022-06-03T15:09:41Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; /**&lt;br /&gt;
  * For suppressing tooltips on interactive elements created with an API call&lt;br /&gt;
  * @example &amp;lt;&amp;gt;&lt;br /&gt;
  */&lt;br /&gt;
 (function($,mw){&lt;br /&gt;
	removeTooltips();&lt;br /&gt;
 }(jQuery, mediaWiki));&lt;br /&gt;
 &lt;br /&gt;
 function removeTooltips(){&lt;br /&gt;
	$(document).on(&#039;mouseenter&#039;, &#039;.map-content-wrapper a&#039;, function(){&lt;br /&gt;
		$(this).removeAttr(&#039;title&#039;);	&lt;br /&gt;
	});&lt;br /&gt;
	$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable a&#039;, function(){&lt;br /&gt;
		$(this).removeAttr(&#039;title&#039;);	&lt;br /&gt;
	});&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadget-Suppress-tooltip.js&amp;diff=83500</id>
		<title>MediaWiki:Gadget-Suppress-tooltip.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Gadget-Suppress-tooltip.js&amp;diff=83500"/>
		<updated>2022-06-03T14:57:49Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; /**&lt;br /&gt;
  * For suppressing tooltips on interactive elements created with an API call&lt;br /&gt;
  * @example &amp;lt;&amp;gt;&lt;br /&gt;
  */&lt;br /&gt;
 (function($,mw){&lt;br /&gt;
	removeTooltips();&lt;br /&gt;
 }(jQuery, mediaWiki));&lt;br /&gt;
 &lt;br /&gt;
 function removeTooltips(){&lt;br /&gt;
	$(document).on(&#039;mouseenter&#039;, &#039;.map-content-wrapper a&#039;, function(){&lt;br /&gt;
		$(this).removeAttr(&#039;title&#039;);	&lt;br /&gt;
	});&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83499</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83499"/>
		<updated>2022-06-03T14:57:03Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
	removeTooltips();&lt;br /&gt;
});&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{Sous-argument POUR | nom=Le revenu de base apporte de meilleures conditions de vie}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83498</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83498"/>
		<updated>2022-06-03T14:56:03Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
	removeTooltips();&lt;br /&gt;
});&lt;br /&gt;
function removeTooltips(){&lt;br /&gt;
	$(document).on(&#039;mouseenter&#039;, &#039;.map-content-wrapper a&#039;, function(){&lt;br /&gt;
		$(this).removeAttr(&#039;title&#039;);	&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{Sous-argument POUR | nom=Le revenu de base apporte de meilleures conditions de vie}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
		removeTooltips();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83497</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83497"/>
		<updated>2022-06-03T14:54:10Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
});&lt;br /&gt;
function removeTooltips(){&lt;br /&gt;
	$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
		$(&#039;.map-expandable, .map-content-wrapper&#039;).find(&#039;a&#039;).each(function(){&lt;br /&gt;
			$(this).removeAttr(&#039;title&#039;);	&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{Sous-argument POUR | nom=Le revenu de base apporte de meilleures conditions de vie}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
		removeTooltips();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
	<entry>
		<id>https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83496</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://fr.wikidebates.org/w/index.php?title=MediaWiki:Common.js&amp;diff=83496"/>
		<updated>2022-06-03T14:51:12Z</updated>

		<summary type="html">&lt;p&gt;Wikivizor : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;Dynamic API call&amp;gt; */&lt;br /&gt;
$(function() {&lt;br /&gt;
	quotesContentCall();&lt;br /&gt;
	moredebateContentCall();&lt;br /&gt;
	mapContentHover();&lt;br /&gt;
	mapContentLeave();&lt;br /&gt;
});&lt;br /&gt;
function removeTooltips(){&lt;br /&gt;
	$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
		$(&#039;.map-expandable&#039;).find(&#039;a&#039;).each(function(){&lt;br /&gt;
			$(this).removeAttr(&#039;title&#039;);	&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
function quotesContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.quotes-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.quotes-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Citations restantes}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;quotes-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;quotes-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function moredebateContentCall(){&lt;br /&gt;
$(document).on(&#039;click&#039;, &#039;.moredebate-expandable-button&#039;, function(){&lt;br /&gt;
	$(this).hide();&lt;br /&gt;
	var wrapper = $(this).parent().find(&#039;.moredebate-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{Sous-argument POUR | nom=Le revenu de base apporte de meilleures conditions de vie}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;moredebate-content-wrapper&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;moredebate-content-drop show&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentHover(){&lt;br /&gt;
$(document).on(&#039;mouseenter&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	var argument = $(this).data(&#039;argument&#039;);&lt;br /&gt;
	var wrapper = $(this).find(&#039;.map-content-wrapper&#039;);&lt;br /&gt;
	var query = &#039;{{#show: &#039; + argument + &#039; | ?Carte des arguments}}&#039;;&lt;br /&gt;
	new mw.Api().post({&lt;br /&gt;
	    action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
		    contentmodel: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
		    text: query&lt;br /&gt;
	    }).done( function( data ) {&lt;br /&gt;
		var text = data.parse.text[&#039;*&#039;].replace(/&amp;lt;!--[\S\s]*?--&amp;gt;/gm, &#039;&#039; );&lt;br /&gt;
		wrapper.replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper show&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom: dotted 1px #DDD; font-size: 110%; font-weight: bold; margin-bottom: .5em;&amp;quot;&amp;gt;&#039; + argument + &#039;&amp;lt;/div&amp;gt;&#039; + text + &#039;&amp;lt;/div&amp;gt;&#039;).show();&lt;br /&gt;
		removeTooltips();&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
function mapContentLeave(){&lt;br /&gt;
$(document).on(&#039;mouseleave&#039;, &#039;.map-expandable&#039;, function(){&lt;br /&gt;
	$(this).find(&#039;.map-content-wrapper&#039;).replaceWith(&#039;&amp;lt;div class=&amp;quot;map-content-wrapper&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
/* &amp;lt;/Dynamic API call&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * fork de jQuery makeCollapsible &lt;br /&gt;
 * &lt;br /&gt;
 * script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible&lt;br /&gt;
 * auteur initial : Krinkle &amp;lt;krinklemail@gmail.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd&lt;br /&gt;
 *&lt;br /&gt;
 * Dual license:&lt;br /&gt;
 * @license CC-BY 3.0 &amp;lt;http://creativecommons.org/licenses/by/3.0&amp;gt;&lt;br /&gt;
 * @license GPL2 &amp;lt;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function newCollapsible( $content ) {&lt;br /&gt;
&lt;br /&gt;
	return $content.find(&#039;.fr-collapsible&#039;).each(function() {&lt;br /&gt;
		// Define reused variables and functions&lt;br /&gt;
		var	$that = $(this),&lt;br /&gt;
			that = this,&lt;br /&gt;
			collapsetext = $(this).attr( &#039;data-collapsetext&#039; ),&lt;br /&gt;
			expandtext = $(this).attr( &#039;data-expandtext&#039; ),&lt;br /&gt;
			toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {&lt;br /&gt;
				// Validate parameters&lt;br /&gt;
				if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( action != &#039;expand&#039; &amp;amp;&amp;amp; action != &#039;collapse&#039; ) {&lt;br /&gt;
					// action must be string with &#039;expand&#039; or &#039;collapse&#039;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if ( typeof $defaultToggle == &#039;undefined&#039; ) {&lt;br /&gt;
					$defaultToggle = null;&lt;br /&gt;
				}&lt;br /&gt;
				if ( $defaultToggle !== null &amp;amp;&amp;amp; !($defaultToggle instanceof $) ) {&lt;br /&gt;
					// is optional (may be undefined), but if defined it must be an instance of jQuery.&lt;br /&gt;
					// If it&#039;s not, abort right away.&lt;br /&gt;
					// After this $defaultToggle is either null or a valid jQuery instance.&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var $containers = null;&lt;br /&gt;
&lt;br /&gt;
				if ( action == &#039;collapse&#039; ) {&lt;br /&gt;
&lt;br /&gt;
					// Collapse the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
						// Hide all table rows of this table&lt;br /&gt;
						// Slide doens&#039;t work with tables, but fade does as of jQuery 1.1.3&lt;br /&gt;
						// http://stackoverflow.com/questions/467336#920480&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeOut();&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$containers.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$containers.stop( true, true ).fadeOut();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc. but not ul ol and tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							if ( instantHide ) {&lt;br /&gt;
								$collapsibleContent.hide();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsibleContent.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeOut();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideUp();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				} else {&lt;br /&gt;
&lt;br /&gt;
					// Expand the element&lt;br /&gt;
					if ( $collapsible.is( &#039;table&#039; ) &amp;amp;&amp;amp;  $collapsible.find(&#039;caption&#039;).length ) {&lt;br /&gt;
						$containers = $collapsible.find( &#039;&amp;gt;tbody&amp;gt;tr, &amp;gt;thead&amp;gt;tr&#039; );&lt;br /&gt;
						if ( $defaultToggle ) {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						} else {&lt;br /&gt;
							$containers.stop(true, true).fadeIn();&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
					} else if ( !$collapsible.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$collapsible.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ul ol and not tables without caption&lt;br /&gt;
						var $collapsibleContent = $collapsible.find( &#039;&amp;gt; .fr-collapsible-content&#039; );&lt;br /&gt;
&lt;br /&gt;
						// If a collapsible-content is defined, collapse it&lt;br /&gt;
						if ( $collapsibleContent.length ) {&lt;br /&gt;
							$collapsibleContent.slideDown();&lt;br /&gt;
&lt;br /&gt;
						// Otherwise assume this is a customcollapse with a remote toggle&lt;br /&gt;
						// .. and there is no collapsible-content because the entire element should be toggled&lt;br /&gt;
						} else {&lt;br /&gt;
							if ( $collapsible.is( &#039;tr&#039; ) || $collapsible.is( &#039;td&#039; ) || $collapsible.is( &#039;th&#039; ) ) {&lt;br /&gt;
								$collapsible.fadeIn();&lt;br /&gt;
							} else {&lt;br /&gt;
								$collapsible.slideDown();&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class and updates text label&lt;br /&gt;
			toggleLinkDefault = function( that, e ) {&lt;br /&gt;
				var	$that = $(that),&lt;br /&gt;
					$collapsible = $that.closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change link to &amp;quot;Show&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( expandtext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( expandtext );&lt;br /&gt;
					}&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change link to &amp;quot;Hide&amp;quot;&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					if ( $that.find( &#039;&amp;gt; a&#039; ).length ) {&lt;br /&gt;
						$that.find( &#039;&amp;gt; a&#039; ).text( collapsetext );&lt;br /&gt;
					} else {&lt;br /&gt;
						$that.text( collapsetext );&lt;br /&gt;
					}&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles collapsible and togglelink class&lt;br /&gt;
			toggleLinkPremade = function( $that, e ) {&lt;br /&gt;
				var	$collapsible = $that.eq(0).closest( &#039;.fr-collapsible.fr-made-collapsible&#039; ).toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				if ( $(e.target).is(&#039;a&#039;) ) {&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s expanded right now&lt;br /&gt;
				if ( !$that.hasClass( &#039;fr-collapsible-toggle-collapsed&#039; ) ) {&lt;br /&gt;
					// Change toggle to collapsed&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-expanded&#039; ).addClass( &#039;fr-collapsible-toggle-collapsed&#039; );&lt;br /&gt;
					// Collapse element&lt;br /&gt;
					toggleElement( $collapsible, &#039;collapse&#039;, $that );&lt;br /&gt;
&lt;br /&gt;
				// It&#039;s collapsed right now&lt;br /&gt;
				} else {&lt;br /&gt;
					// Change toggle to expanded&lt;br /&gt;
					$that.removeClass( &#039;fr-collapsible-toggle-collapsed&#039; ).addClass( &#039;fr-collapsible-toggle-expanded&#039; );&lt;br /&gt;
					// Expand element&lt;br /&gt;
					toggleElement( $collapsible, &#039;expand&#039;, $that );&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			},&lt;br /&gt;
			// Toggles customcollapsible&lt;br /&gt;
			toggleLinkCustom = function( $that, e, $collapsible ) {&lt;br /&gt;
				// For the initial state call of customtogglers there is no event passed&lt;br /&gt;
				if (e) {&lt;br /&gt;
					e.preventDefault();&lt;br /&gt;
				e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
				// Get current state and toggle to the opposite&lt;br /&gt;
				var action = $collapsible.hasClass( &#039;fr-collapsed&#039; ) ? &#039;expand&#039; : &#039;collapse&#039;;&lt;br /&gt;
				$collapsible.toggleClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleElement( $collapsible, action, $that );&lt;br /&gt;
&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
		// Use custom text or default ?&lt;br /&gt;
		if( !collapsetext ) {&lt;br /&gt;
			//collapsetext = mw.message( &#039;collapsible-collapse&#039; );&lt;br /&gt;
			collapsetext = &#039;masquer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !expandtext ) {&lt;br /&gt;
			//expandtext = mw.message( &#039;collapsible-expand&#039; );&lt;br /&gt;
			expandtext = &#039;afficher&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Create toggle link with a space around the brackets (&amp;amp;nbsp;[text]&amp;amp;nbsp;)&lt;br /&gt;
		var $toggleLink =&lt;br /&gt;
			$( &#039;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; )&lt;br /&gt;
				.text( collapsetext )&lt;br /&gt;
				.wrap( &#039;&amp;lt;span class=&amp;quot;fr-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; )&lt;br /&gt;
				.parent()&lt;br /&gt;
				.on( &#039;click.fr-collapse&#039;, function(e) {&lt;br /&gt;
					toggleLinkDefault( this, e );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
		// Return if it has been enabled already.&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-made-collapsible&#039; ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			$that.addClass( &#039;fr-made-collapsible&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check if this element has a custom position for the toggle link&lt;br /&gt;
		// (ie. outside the container or deeper inside the tree)&lt;br /&gt;
		// Then: Locate the custom toggle link(s) and bind them&lt;br /&gt;
		if ( ( $that.attr( &#039;id&#039; ) || &#039;&#039; ).indexOf( &#039;fr-customcollapsible-&#039; ) === 0 ) {&lt;br /&gt;
&lt;br /&gt;
			var thatId = $that.attr( &#039;id&#039; ),&lt;br /&gt;
				$customTogglers = $content.find( &#039;.&#039; + thatId.replace( &#039;fr-customcollapsible&#039;, &#039;fr-customtoggle&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			// Double check that there is actually a customtoggle link&lt;br /&gt;
			if ( $customTogglers.length ) {&lt;br /&gt;
				$customTogglers.on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
					toggleLinkCustom( $(this), e, $that );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Initial state&lt;br /&gt;
			if ( $that.hasClass( &#039;fr-collapsed&#039; ) ) {&lt;br /&gt;
				$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
				toggleLinkCustom( $customTogglers, null, $that );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		// If this is not a custom case, do the default:&lt;br /&gt;
		// Wrap the contents add the toggle link&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			// Elements are treated differently&lt;br /&gt;
			if ( $that.is( &#039;table&#039; )  &amp;amp;&amp;amp;  $that.find(&#039;caption&#039;).length ) { // only table with caption&lt;br /&gt;
				// The toggle-link will be in the caption&lt;br /&gt;
				var	$caption = $that.find( &#039;caption&#039; ),&lt;br /&gt;
					$toggle = $caption.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it to the caption&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$caption.eq(-1).prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			} else if ( !$that.is( &#039;ul&#039; ) &amp;amp;&amp;amp; !$that.is( &#039;ol&#039; )  &amp;amp;&amp;amp; !$that.is( &#039;table&#039; ) ) { // &amp;lt;div&amp;gt;, &amp;lt;p&amp;gt; etc.but not ol ul and not tables without caption&lt;br /&gt;
&lt;br /&gt;
				// The toggle-link will be the first child of the element&lt;br /&gt;
				var $toggle = $that.find( &#039;&amp;gt; .fr-collapsible-toggle&#039; );&lt;br /&gt;
&lt;br /&gt;
				// If a direct child .content-wrapper does not exists, create it&lt;br /&gt;
				if ( !$that.find( &#039;&amp;gt; .fr-collapsible-content&#039; ).length ) {&lt;br /&gt;
					$that.wrapInner( &#039;&amp;lt;div class=&amp;quot;fr-collapsible-content&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If theres no toggle link, add it&lt;br /&gt;
				if ( !$toggle.length ) {&lt;br /&gt;
					$that.prepend( $toggleLink );&lt;br /&gt;
				} else {&lt;br /&gt;
					$toggleLink = $toggle.off( &#039;click.fr-collapse&#039; ).on( &#039;click.fr-collapse&#039;, function( e ) {&lt;br /&gt;
						toggleLinkPremade( $toggle, e );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Initial state (only for those that are not custom)&lt;br /&gt;
		if ( $that.hasClass( &#039;fr-collapsed&#039; ) &amp;amp;&amp;amp; ( $that.attr( &#039;id&#039; ) || &#039;&#039;).indexOf( &#039;fr-customcollapsible-&#039; ) !== 0 ) {&lt;br /&gt;
			$that.removeClass( &#039;fr-collapsed&#039; );&lt;br /&gt;
			// The collapsible element could have multiple togglers&lt;br /&gt;
			// To toggle the initial state only click one of them (ie. the first one, eq(0) )&lt;br /&gt;
			// Else it would go like: hide,show,hide,show for each toggle link.&lt;br /&gt;
			toggleElement( $that, &#039;collapse&#039;, $toggleLink.eq(0), /* instantHide = */ true );&lt;br /&gt;
			$toggleLink.eq(0).click();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleKeyboard($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard&#039;).attr(&#039;tabindex&#039;,0).keypress(function(event){&lt;br /&gt;
		if ( event.which == 13 ) {&lt;br /&gt;
			$(this).click()&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function newCollapsibleGroup($content) {&lt;br /&gt;
	$content.find(&#039;.fr-collapsible-group&#039;).each(function(){&lt;br /&gt;
		var $that = $(this);&lt;br /&gt;
		var text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
		var $tooglelink = $(&#039;&amp;lt;a class=&amp;quot;fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Tout ouvrir&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
		$that.find(&#039;.fr-collapsible-group-toogle:first&#039;).append($tooglelink).click(function(event){&lt;br /&gt;
			if(text == &#039;Tout ouvrir&#039;) {&lt;br /&gt;
				text = &#039;Tout fermer&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-collapsed:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &#039;Tout ouvrir&#039;;&lt;br /&gt;
				$that.find(&#039;.fr-collapsible-toggle-expanded:not(&amp;quot;.fr-collapsible-group-toogle-all&amp;quot;)&#039;).click();&lt;br /&gt;
			}&lt;br /&gt;
			$tooglelink.text(text);&lt;br /&gt;
			return false;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( [&lt;br /&gt;
	newCollapsible,&lt;br /&gt;
	newCollapsibleKeyboard,&lt;br /&gt;
	newCollapsibleGroup&lt;br /&gt;
] );&lt;br /&gt;
&lt;br /&gt;
/*\&lt;br /&gt;
* * REFERENCE TOOLTIPS&lt;br /&gt;
\*/&lt;br /&gt;
// See [[mw:Reference Tooltips]]&lt;br /&gt;
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
// enwiki settings&lt;br /&gt;
var REF_LINK_SELECTOR = &#039;.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]&#039;,&lt;br /&gt;
	COMMENTED_TEXT_CLASS = &#039;rt-commentedText&#039;,&lt;br /&gt;
	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? &#039;.&#039; + COMMENTED_TEXT_CLASS + &#039;, &#039; : &#039;&#039;) +&lt;br /&gt;
		&#039;abbr[title]&#039;;&lt;br /&gt;
&lt;br /&gt;
mw.messages.set( {&lt;br /&gt;
	&#039;rt-settings&#039;: &#039;Reference Tooltips settings&#039;,&lt;br /&gt;
	&#039;rt-enable-footer&#039;: &#039;Enable Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-settings-title&#039;: &#039;Reference Tooltips&#039;,&lt;br /&gt;
	&#039;rt-save&#039;: &#039;Save&#039;,&lt;br /&gt;
	&#039;rt-cancel&#039;: &#039;Cancel&#039;,&lt;br /&gt;
	&#039;rt-enable&#039;: &#039;Enable&#039;,&lt;br /&gt;
	&#039;rt-disable&#039;: &#039;Disable&#039;,&lt;br /&gt;
	&#039;rt-activationMethod&#039;: &#039;Tooltip appears when&#039;,&lt;br /&gt;
	&#039;rt-hovering&#039;: &#039;hovering&#039;,&lt;br /&gt;
	&#039;rt-clicking&#039;: &#039;clicking&#039;,&lt;br /&gt;
	&#039;rt-delay&#039;: &#039;Delay before the tooltip appears (in milliseconds)&#039;,&lt;br /&gt;
	&#039;rt-tooltipsForComments&#039;: &#039;Show tooltips over &amp;lt;span title=&amp;quot;Tooltip example&amp;quot; class=&amp;quot;&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; ) + &#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;text with a dotted underline&amp;lt;/span&amp;gt; in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)&#039;,&lt;br /&gt;
	&#039;rt-disabledNote&#039;: &#039;You can re-enable Reference Tooltips using a link in the footer of the page.&#039;,&lt;br /&gt;
	&#039;rt-done&#039;: &#039;Done&#039;,&lt;br /&gt;
	&#039;rt-enabled&#039;: &#039;Reference Tooltips are enabled&#039;&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Global&amp;quot; variables&lt;br /&gt;
var SECONDS_IN_A_DAY = 60 * 60 * 24,&lt;br /&gt;
	CLASSES = {&lt;br /&gt;
		FADE_IN_DOWN: &#039;rt-fade-in-down&#039;,&lt;br /&gt;
		FADE_IN_UP: &#039;rt-fade-in-up&#039;,&lt;br /&gt;
		FADE_OUT_DOWN: &#039;rt-fade-out-down&#039;,&lt;br /&gt;
		FADE_OUT_UP: &#039;rt-fade-out-up&#039;&lt;br /&gt;
	},&lt;br /&gt;
	IS_TOUCHSCREEN = &#039;ontouchstart&#039; in document.documentElement,&lt;br /&gt;
	// Quite a rough check for mobile browsers, a mix of what is advised at&lt;br /&gt;
	// https://stackoverflow.com/a/24600597 (sends to&lt;br /&gt;
	// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)&lt;br /&gt;
	// and https://stackoverflow.com/a/14301832&lt;br /&gt;
	IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||&lt;br /&gt;
		typeof window.orientation !== &#039;undefined&#039;,&lt;br /&gt;
	CLIENT_NAME = $.client.profile().name,&lt;br /&gt;
	settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,&lt;br /&gt;
	windowManager,&lt;br /&gt;
	$body = $( document.body ),&lt;br /&gt;
	$window = $( window );&lt;br /&gt;
&lt;br /&gt;
function rt( $content ) {&lt;br /&gt;
	// Popups gadget&lt;br /&gt;
	if ( window.pg ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var teSelector,&lt;br /&gt;
		settingsDialogOpening = false;&lt;br /&gt;
&lt;br /&gt;
	function setSettingsCookie() {&lt;br /&gt;
		mw.cookie.set(&lt;br /&gt;
			&#039;RTsettings&#039;,&lt;br /&gt;
			Number( enabled ) + &#039;|&#039; + delay + &#039;|&#039; + Number( activatedByClick ) + &#039;|&#039; +&lt;br /&gt;
				Number( tooltipsForComments ),&lt;br /&gt;
			{ path: &#039;/&#039;, expires: 90 * SECONDS_IN_A_DAY, prefix: &#039;&#039; }&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function enableRt() {&lt;br /&gt;
		enabled = true;&lt;br /&gt;
		setSettingsCookie();&lt;br /&gt;
		$( &#039;.rt-enableItem&#039; ).remove();&lt;br /&gt;
		rt( $content );&lt;br /&gt;
		mw.notify( mw.msg( &#039;rt-enabled&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disableRt() {&lt;br /&gt;
		$content.find( teSelector ).removeClass( &#039;rt-commentedText&#039; ).off( &#039;.rt&#039; );&lt;br /&gt;
		$body.off( &#039;.rt&#039; );&lt;br /&gt;
		$window.off( &#039;.rt&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addEnableLink() {&lt;br /&gt;
		// #footer-places – Vector&lt;br /&gt;
		// #f-list – Timeless, Monobook, Modern&lt;br /&gt;
		// parent of #footer li – Cologne Blue&lt;br /&gt;
		var $footer = $( &#039;#footer-places, #f-list&#039; );&lt;br /&gt;
		if ( !$footer.length ) {&lt;br /&gt;
			$footer = $( &#039;#footer li&#039; ).parent();&lt;br /&gt;
		}&lt;br /&gt;
		$footer.append(&lt;br /&gt;
			$( &#039;&amp;lt;li&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-enableItem&#039; )&lt;br /&gt;
				.append(&lt;br /&gt;
					$( &#039;&amp;lt;a&amp;gt;&#039; )&lt;br /&gt;
						.text( mw.msg( &#039;rt-enable-footer&#039; ) )&lt;br /&gt;
						.attr( &#039;href&#039;, &#039;javascript:&#039; )&lt;br /&gt;
						.click( function ( e ) {&lt;br /&gt;
							e.preventDefault();&lt;br /&gt;
							enableRt();&lt;br /&gt;
						} )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function TooltippedElement( $element ) {&lt;br /&gt;
		var tooltip,&lt;br /&gt;
			events,&lt;br /&gt;
			te = this;&lt;br /&gt;
&lt;br /&gt;
		function onStartEvent( e ) {&lt;br /&gt;
			var showRefArgs;&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick &amp;amp;&amp;amp; te.type !== &#039;commentedText&#039; &amp;amp;&amp;amp; e.type !== &#039;contextmenu&#039; ) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				showRefArgs = [ $( this ) ];&lt;br /&gt;
				if ( te.type !== &#039;supRef&#039; ) {&lt;br /&gt;
					showRefArgs.push( e.pageX, e.pageY );&lt;br /&gt;
				}&lt;br /&gt;
				te.showRef.apply( te, showRefArgs );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onEndEvent() {&lt;br /&gt;
			if ( !te.noRef ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !$element ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// TooltippedElement.$element and TooltippedElement.$originalElement will be different when&lt;br /&gt;
		// the first is changed after its cloned version is hovered in a tooltip&lt;br /&gt;
		this.$element = $element;&lt;br /&gt;
		this.$originalElement = $element;&lt;br /&gt;
		if ( this.$element.is( REF_LINK_SELECTOR ) ) {&lt;br /&gt;
			if ( this.$element.prop( &#039;tagName&#039; ) === &#039;SUP&#039; ) {&lt;br /&gt;
				this.type = &#039;supRef&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				this.type = &#039;harvardRef&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			this.type = &#039;commentedText&#039;;&lt;br /&gt;
			this.comment = this.$element.attr( &#039;title&#039; );&lt;br /&gt;
			if ( !this.comment ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.addClass(&#039;rt-commentedText&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( activatedByClick ) {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;click.rt&#039;: onStartEvent&lt;br /&gt;
			};&lt;br /&gt;
			// Adds an ability to see tooltips for links&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				( this.$element.closest( &#039;a&#039; ).length ||&lt;br /&gt;
					this.$element.has( &#039;a&#039; ).length&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				events[ &#039;contextmenu.rt&#039; ] = onStartEvent;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			events = {&lt;br /&gt;
				&#039;mouseenter.rt&#039;: onStartEvent,&lt;br /&gt;
				&#039;mouseleave.rt&#039;: onEndEvent&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.$element.on( events );&lt;br /&gt;
&lt;br /&gt;
		this.hideRef = function ( immediately ) {&lt;br /&gt;
			clearTimeout( te.showTimer );&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, this.comment );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent ) {&lt;br /&gt;
				if ( activatedByClick || immediately ) {&lt;br /&gt;
					this.tooltip.hide();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.hideTimer = setTimeout( function () {&lt;br /&gt;
						te.tooltip.hide();&lt;br /&gt;
					}, 200 );&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) ) {&lt;br /&gt;
				this.$ref.removeClass( &#039;rt-target&#039; );&lt;br /&gt;
				if ( activatedByClick ) {&lt;br /&gt;
					$body.off( &#039;click.rt touchstart.rt&#039;, this.onBodyClick );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.showRef = function ( $element, ePageX, ePageY ) {&lt;br /&gt;
			// Popups gadget&lt;br /&gt;
			if ( window.pg ) {&lt;br /&gt;
				disableRt();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if ( this.tooltip &amp;amp;&amp;amp; !this.tooltip.$content.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var tooltipInitiallyPresent = this.tooltip &amp;amp;&amp;amp; this.tooltip.isPresent;&lt;br /&gt;
&lt;br /&gt;
			function reallyShow() {&lt;br /&gt;
				var viewportTop, refOffsetTop, teHref;&lt;br /&gt;
&lt;br /&gt;
				if ( !te.$ref &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					teHref = te.type === &#039;supRef&#039; ?&lt;br /&gt;
						te.$element.find( &#039;a&#039; ).attr( &#039;href&#039; ) :&lt;br /&gt;
						te.$element.attr( &#039;href&#039; ); // harvardRef&lt;br /&gt;
					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
						$( &#039;#&#039; + $.escapeSelector( teHref.slice( 1 ) ) );&lt;br /&gt;
					if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {&lt;br /&gt;
						te.noRef = true;&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !tooltipInitiallyPresent &amp;amp;&amp;amp; !te.comment ) {&lt;br /&gt;
					viewportTop = $window.scrollTop();&lt;br /&gt;
					refOffsetTop = te.$ref.offset().top;&lt;br /&gt;
					if ( !activatedByClick &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop &amp;lt; refOffsetTop &amp;amp;&amp;amp;&lt;br /&gt;
						viewportTop + $window.height() &amp;gt; refOffsetTop + te.$ref.height() &amp;amp;&amp;amp;&lt;br /&gt;
						// There can be gadgets/scripts that make references horizontally scrollable.&lt;br /&gt;
						$window.width() &amp;gt; te.$ref.offset().left + te.$ref.width()&lt;br /&gt;
					) {&lt;br /&gt;
						// Highlight the reference itself&lt;br /&gt;
						te.$ref.addClass( &#039;rt-target&#039; );&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if ( !te.tooltip ) {&lt;br /&gt;
					te.tooltip = new Tooltip( te );&lt;br /&gt;
					if ( !te.tooltip.$content.length ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If this tooltip is called from inside another tooltip. We can&#039;t define it&lt;br /&gt;
				// in the constructor since a ref can be cloned but have the same Tooltip object;&lt;br /&gt;
				// so, Tooltip.parent is a floating value.&lt;br /&gt;
				te.tooltip.parent = te.$element.closest( &#039;.rt-tooltip&#039; ).data( &#039;tooltip&#039; );&lt;br /&gt;
				if ( te.tooltip.parent &amp;amp;&amp;amp; te.tooltip.parent.disappearing ) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.show();&lt;br /&gt;
&lt;br /&gt;
				if ( tooltipInitiallyPresent ) {&lt;br /&gt;
					if ( te.tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );&lt;br /&gt;
					} else {&lt;br /&gt;
						te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );&lt;br /&gt;
					}&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				te.tooltip.calculatePosition( ePageX, ePageY );&lt;br /&gt;
&lt;br /&gt;
				$window.on( &#039;resize.rt&#039;, te.onWindowResize );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// We redefine this.$element here because e.target can be a reference link inside&lt;br /&gt;
			// a reference tooltip, not a link that was initially assigned to this.$element&lt;br /&gt;
			this.$element = $element;&lt;br /&gt;
&lt;br /&gt;
			if ( this.type === &#039;commentedText&#039; ) {&lt;br /&gt;
				this.$element.attr( &#039;title&#039;, &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick ) {&lt;br /&gt;
				if ( tooltipInitiallyPresent ||&lt;br /&gt;
					( this.$ref &amp;amp;&amp;amp; this.$ref.hasClass( &#039;rt-target&#039; ) )&lt;br /&gt;
				) {&lt;br /&gt;
					return;&lt;br /&gt;
				} else {&lt;br /&gt;
					setTimeout( function () {&lt;br /&gt;
						$body.on( &#039;click.rt touchstart.rt&#039;, te.onBodyClick );&lt;br /&gt;
					}, 0 );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( activatedByClick || tooltipInitiallyPresent ) {&lt;br /&gt;
				reallyShow();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.showTimer = setTimeout( reallyShow, delay );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onBodyClick = function ( e ) {&lt;br /&gt;
			if ( !te.tooltip &amp;amp;&amp;amp; !(te.$ref &amp;amp;&amp;amp; te.$ref.hasClass( &#039;rt-target&#039; )) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var $current = $( e.target );&lt;br /&gt;
&lt;br /&gt;
			function contextMatchesParameter( parameter ) {&lt;br /&gt;
				return this === parameter;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// The last condition is used to determine cases when a clicked tooltip is the current&lt;br /&gt;
			// element&#039;s tooltip or one of its descendants&lt;br /&gt;
			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
				( !$current.hasClass( &#039;rt-tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ) ||&lt;br /&gt;
					!$current.data( &#039;tooltip&#039; ).upToTopParent(&lt;br /&gt;
						contextMatchesParameter, [ te.tooltip ],&lt;br /&gt;
						true&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				$current = $current.parent();&lt;br /&gt;
			}&lt;br /&gt;
			if ( !$current.length ) {&lt;br /&gt;
				te.hideRef();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.onWindowResize = function () {&lt;br /&gt;
			te.tooltip.calculatePosition();&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function Tooltip( te ) {&lt;br /&gt;
		function openSettingsDialog() {&lt;br /&gt;
			var settingsDialog, settingsWindow;&lt;br /&gt;
&lt;br /&gt;
			if ( cursorWaitCss ) {&lt;br /&gt;
				cursorWaitCss.disabled = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function SettingsDialog() {&lt;br /&gt;
				SettingsDialog.parent.call( this );&lt;br /&gt;
			}&lt;br /&gt;
			OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.static.name = &#039;settingsDialog&#039;;&lt;br /&gt;
			SettingsDialog.static.title = mw.msg( &#039;rt-settings-title&#039; );&lt;br /&gt;
			SettingsDialog.static.actions = [&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					action: &#039;save&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-save&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;basic&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-cancel&#039; ),&lt;br /&gt;
					flags: &#039;safe&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					modes: &#039;disabled&#039;,&lt;br /&gt;
					action: &#039;deactivated&#039;,&lt;br /&gt;
					label: mw.msg( &#039;rt-done&#039; ),&lt;br /&gt;
					flags: [ &#039;primary&#039;, &#039;progressive&#039; ]&lt;br /&gt;
				}&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.initialize = function () {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				SettingsDialog.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
&lt;br /&gt;
				this.enableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-enable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-disable&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
					classes: [ &#039;rt-enableSelect&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
				this.enableSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.disableOption ) {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( true );&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.activationMethodSelect.setDisabled( false );&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
						dialog.tooltipsForCommentsCheckbox.setDisabled( false );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.hoverOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-hovering&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
					label: mw.msg( &#039;rt-clicking&#039; )&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
					items: [ this.hoverOption, this.clickOption ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodSelect.selectItem( activatedByClick ?&lt;br /&gt;
					this.clickOption :&lt;br /&gt;
					this.hoverOption&lt;br /&gt;
				);&lt;br /&gt;
				this.activationMethodSelect.on( &#039;choose&#039;, function ( item ) {&lt;br /&gt;
					if ( item === dialog.clickOption ) {&lt;br /&gt;
						dialog.delayInput.setDisabled( true );&lt;br /&gt;
					} else {&lt;br /&gt;
						dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {&lt;br /&gt;
					label: mw.msg( &#039;rt-activationMethod&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.delayInput = new OO.ui.NumberInputWidget( {&lt;br /&gt;
					input: { value: delay },&lt;br /&gt;
					step: 50,&lt;br /&gt;
					min: 0,&lt;br /&gt;
					max: 5000,&lt;br /&gt;
					disabled: activatedByClick,&lt;br /&gt;
					classes: [ &#039;rt-numberInput&#039; ]&lt;br /&gt;
				} );&lt;br /&gt;
				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
					label: mw.msg( &#039;rt-delay&#039; ),&lt;br /&gt;
					align: &#039;top&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {&lt;br /&gt;
					selected: tooltipsForComments&lt;br /&gt;
				} );&lt;br /&gt;
				this.tooltipsForCommentsField = new OO.ui.FieldLayout(&lt;br /&gt;
					this.tooltipsForCommentsCheckbox,&lt;br /&gt;
					{&lt;br /&gt;
						label: new OO.ui.HtmlSnippet( mw.msg( &#039;rt-tooltipsForComments&#039; ) ),&lt;br /&gt;
						align: &#039;inline&#039;,&lt;br /&gt;
						classes: [ &#039;rt-tooltipsForCommentsField&#039; ]&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
				new TooltippedElement(&lt;br /&gt;
					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
						&#039;.&#039; + ( COMMENTED_TEXT_CLASS || &#039;rt-commentedText&#039; )&lt;br /&gt;
					)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.fieldset = new OO.ui.FieldsetLayout();&lt;br /&gt;
				this.fieldset.addItems( [&lt;br /&gt;
					this.activationMethodField,&lt;br /&gt;
					this.delayField,&lt;br /&gt;
					this.tooltipsForCommentsField&lt;br /&gt;
				] );&lt;br /&gt;
&lt;br /&gt;
				this.panelSettings = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelSettings.$element.append(&lt;br /&gt;
					this.enableSelect.$element,&lt;br /&gt;
					$( &#039;&amp;lt;hr&amp;gt;&#039; ).addClass( &#039;rt-settingsFormSeparator&#039; ),&lt;br /&gt;
					this.fieldset.$element&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.panelDisabled = new OO.ui.PanelLayout( {&lt;br /&gt;
					padded: true,&lt;br /&gt;
					expanded: false&lt;br /&gt;
				} );&lt;br /&gt;
				this.panelDisabled.$element.append(&lt;br /&gt;
					$( &#039;&amp;lt;table&amp;gt;&#039; )&lt;br /&gt;
						.addClass( &#039;rt-disabledHelp&#039; )&lt;br /&gt;
						.append(&lt;br /&gt;
							$( &#039;&amp;lt;tr&amp;gt;&#039; ).append(&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; ).append(&lt;br /&gt;
									$( &#039;&amp;lt;img&amp;gt;&#039; ).attr( &#039;src&#039;, &#039;https://en.wikipedia.org/w/load.php?modules=ext.popups.images&amp;amp;image=footer&amp;amp;format=rasterized&amp;amp;lang=ru&amp;amp;skin=vector&amp;amp;version=0uotisb&#039; )&lt;br /&gt;
								),&lt;br /&gt;
								$( &#039;&amp;lt;td&amp;gt;&#039; )&lt;br /&gt;
									.addClass( &#039;rt-disabledNote&#039; )&lt;br /&gt;
									.text( mw.msg( &#039;rt-disabledNote&#039; ) )&lt;br /&gt;
							)&lt;br /&gt;
						)&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				this.stackLayout = new OO.ui.StackLayout( {&lt;br /&gt;
					items: [ this.panelSettings, this.panelDisabled ]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				this.$body.append( this.stackLayout.$element );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getSetupProcess = function ( data ) {&lt;br /&gt;
				return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )&lt;br /&gt;
					.next( function () {&lt;br /&gt;
						this.stackLayout.setItem( this.panelSettings );&lt;br /&gt;
						this.actions.setMode( &#039;basic&#039; );&lt;br /&gt;
					}, this );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
				var dialog = this;&lt;br /&gt;
&lt;br /&gt;
				if ( action === &#039;save&#039; ) {&lt;br /&gt;
					return new OO.ui.Process( function () {&lt;br /&gt;
						var newDelay = Number( dialog.delayInput.getValue() );&lt;br /&gt;
&lt;br /&gt;
						enabled = dialog.enableOption.isSelected();&lt;br /&gt;
						if ( newDelay &amp;gt;= 0 &amp;amp;&amp;amp; newDelay &amp;lt;= 5000 ) {&lt;br /&gt;
							delay = newDelay;&lt;br /&gt;
						}&lt;br /&gt;
						activatedByClick = dialog.clickOption.isSelected();&lt;br /&gt;
						tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();&lt;br /&gt;
&lt;br /&gt;
						setSettingsCookie();&lt;br /&gt;
&lt;br /&gt;
						if ( enabled ) {&lt;br /&gt;
							dialog.close();&lt;br /&gt;
							disableRt();&lt;br /&gt;
							rt( $content );&lt;br /&gt;
						} else {&lt;br /&gt;
							dialog.actions.setMode( &#039;disabled&#039; );&lt;br /&gt;
							dialog.stackLayout.setItem( dialog.panelDisabled );&lt;br /&gt;
							disableRt();&lt;br /&gt;
							addEnableLink();&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} else if ( action === &#039;deactivated&#039; ) {&lt;br /&gt;
					dialog.close();&lt;br /&gt;
				}&lt;br /&gt;
				return SettingsDialog.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SettingsDialog.prototype.getBodyHeight = function () {&lt;br /&gt;
				return this.stackLayout.getCurrentItem().$element.outerHeight( true );&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			tooltip.upToTopParent( function adjustRightAndHide() {&lt;br /&gt;
				if ( this.isPresent ) {&lt;br /&gt;
					if ( this.$element[ 0 ].style.right ) {&lt;br /&gt;
						this.$element.css(&lt;br /&gt;
							&#039;right&#039;,&lt;br /&gt;
							&#039;+=&#039; + ( window.innerWidth - $window.width() )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
					this.te.hideRef( true );&lt;br /&gt;
				}&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;
&lt;br /&gt;
			settingsDialog = new SettingsDialog();&lt;br /&gt;
			windowManager.addWindows( [ settingsDialog ] );&lt;br /&gt;
			settingsWindow = windowManager.openWindow( settingsDialog );&lt;br /&gt;
			settingsWindow.opened.then( function () {&lt;br /&gt;
				settingsDialogOpening = false;&lt;br /&gt;
			} );&lt;br /&gt;
			settingsWindow.closed.then( function () {&lt;br /&gt;
				windowManager.clearWindows();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
		// This variable can change: one tooltip can be called from a harvard-style reference link&lt;br /&gt;
		// that is put into different tooltips&lt;br /&gt;
		this.te = te;&lt;br /&gt;
&lt;br /&gt;
		switch ( this.te.type ) {&lt;br /&gt;
			case &#039;supRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.contents()&lt;br /&gt;
					.filter( function ( i ) {&lt;br /&gt;
						var $this = $( this );&lt;br /&gt;
						return this.nodeType === Node.TEXT_NODE ||&lt;br /&gt;
							!( $this.is( &#039;.mw-cite-backlink&#039; ) ||&lt;br /&gt;
								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
									// Template:Cnote, Template:Note&lt;br /&gt;
									( $this.is( &#039;b&#039; ) ||&lt;br /&gt;
										// Template:Note_label&lt;br /&gt;
										$this.is( &#039;a&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
										$this.attr( &#039;href&#039; ).indexOf( &#039;#ref&#039; ) === 0&lt;br /&gt;
									)&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
					} )&lt;br /&gt;
					.clone( true );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;harvardRef&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + this.te.$originalElement.closest( &#039;li&#039; ).attr( &#039;id&#039; );&lt;br /&gt;
				this.$content = this.te.$ref&lt;br /&gt;
					.clone( true )&lt;br /&gt;
					.removeAttr( &#039;id&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;commentedText&#039;:&lt;br /&gt;
				this.id = &#039;rt-&#039; + String( Math.random() ).slice( 2 );&lt;br /&gt;
				this.$content = $( document.createTextNode( this.te.comment ) );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !this.$content.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.insideWindow = Boolean( this.te.$element.closest( &#039;.oo-ui-window&#039; ).length );&lt;br /&gt;
&lt;br /&gt;
		this.$element = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltip&#039; )&lt;br /&gt;
			.attr( &#039;id&#039;, this.id )&lt;br /&gt;
			.attr( &#039;role&#039;, &#039;tooltip&#039; )&lt;br /&gt;
			.data( &#039;tooltip&#039;, this );&lt;br /&gt;
		if ( this.insideWindow ) {&lt;br /&gt;
			this.$element.addClass( &#039;rt-tooltip-insideWindow&#039; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We need the $content interlayer here in order for the settings icon to have correct&lt;br /&gt;
		// margins&lt;br /&gt;
		this.$content = this.$content&lt;br /&gt;
			.wrapAll( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.parent()&lt;br /&gt;
			.addClass( &#039;rt-tooltipContent&#039; )&lt;br /&gt;
			.addClass( &#039;mw-parser-output&#039; )&lt;br /&gt;
			.appendTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		if ( !activatedByClick ) {&lt;br /&gt;
			this.$element&lt;br /&gt;
				.mouseenter( function () {&lt;br /&gt;
					if ( !tooltip.disappearing ) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.show();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.mouseleave( function ( e ) {&lt;br /&gt;
					// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget&lt;br /&gt;
					// alone has pitfalls: when alt-tabbing, relatedTarget is empty too&lt;br /&gt;
					if ( CLIENT_NAME !== &#039;chrome&#039; ||&lt;br /&gt;
						( !e.originalEvent ||&lt;br /&gt;
							e.originalEvent.relatedTarget !== null ||&lt;br /&gt;
							!tooltip.clickedTime ||&lt;br /&gt;
							$.now() - tooltip.clickedTime &amp;gt; 50&lt;br /&gt;
						)&lt;br /&gt;
					) {&lt;br /&gt;
						tooltip.upToTopParent( function () {&lt;br /&gt;
							this.te.hideRef();&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					tooltip.clickedTime = $.now();&lt;br /&gt;
				} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !this.insideWindow ) {&lt;br /&gt;
			$( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
				.addClass( &#039;rt-settingsLink&#039; )&lt;br /&gt;
				.attr( &#039;title&#039;, mw.msg( &#039;rt-settings&#039; ) )&lt;br /&gt;
				.click( function () {&lt;br /&gt;
					if ( settingsDialogOpening ) {&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
					settingsDialogOpening = true;&lt;br /&gt;
&lt;br /&gt;
					if ( mw.loader.getState( &#039;oojs-ui&#039; ) !== &#039;ready&#039; ) {&lt;br /&gt;
						if ( cursorWaitCss ) {&lt;br /&gt;
							cursorWaitCss.disabled = false;&lt;br /&gt;
						} else {&lt;br /&gt;
							cursorWaitCss = mw.util.addCSS( &#039;body { cursor: wait; }&#039; );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					mw.loader.using( [ &#039;oojs&#039;, &#039;oojs-ui&#039; ], openSettingsDialog );&lt;br /&gt;
				} )&lt;br /&gt;
				.prependTo( this.$content );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Tooltip tail element is inside tooltip content element in order for the tooltip&lt;br /&gt;
		// not to disappear when the mouse is above the tail&lt;br /&gt;
		this.$tail = $( &#039;&amp;lt;div&amp;gt;&#039; )&lt;br /&gt;
			.addClass( &#039;rt-tooltipTail&#039; )&lt;br /&gt;
			.prependTo( this.$element );&lt;br /&gt;
&lt;br /&gt;
		this.disappearing = false;&lt;br /&gt;
&lt;br /&gt;
		this.show = function () {&lt;br /&gt;
			this.disappearing = false;&lt;br /&gt;
			clearTimeout( this.te.hideTimer );&lt;br /&gt;
			clearTimeout( this.te.removeTimer );&lt;br /&gt;
&lt;br /&gt;
			this.$element&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_DOWN )&lt;br /&gt;
				.removeClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
&lt;br /&gt;
			if ( !this.isPresent ) {&lt;br /&gt;
				$body.append( this.$element );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			this.isPresent = true;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.hide = function () {&lt;br /&gt;
			var tooltip = this;&lt;br /&gt;
&lt;br /&gt;
			tooltip.disappearing = true;&lt;br /&gt;
&lt;br /&gt;
			if ( tooltip.$element.hasClass( &#039;rt-tooltip-above&#039; ) ) {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_UP );&lt;br /&gt;
			} else {&lt;br /&gt;
				tooltip.$element&lt;br /&gt;
					.removeClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.addClass( CLASSES.FADE_OUT_DOWN );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			tooltip.te.removeTimer = setTimeout( function () {&lt;br /&gt;
				if ( tooltip.isPresent ) {&lt;br /&gt;
					tooltip.$element.detach();&lt;br /&gt;
					&lt;br /&gt;
					tooltip.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					if ( activatedByClick ) {&lt;br /&gt;
						$body.off( &#039;click.rt touchstart.rt&#039;, tooltip.te.onBodyClick );&lt;br /&gt;
					}&lt;br /&gt;
					$window.off( &#039;resize.rt&#039;, tooltip.te.onWindowResize );&lt;br /&gt;
&lt;br /&gt;
					tooltip.isPresent = false;&lt;br /&gt;
				}&lt;br /&gt;
			}, 200 );&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.calculatePosition = function ( ePageX, ePageY ) {&lt;br /&gt;
			var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,&lt;br /&gt;
				offsetYCorrection = 0;&lt;br /&gt;
&lt;br /&gt;
			this.$tail.css( &#039;left&#039;, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
			teElement = this.te.$element.get( 0 );&lt;br /&gt;
			if ( ePageX !== undefined ) {&lt;br /&gt;
				tooltipTailOffsetX = ePageX;&lt;br /&gt;
				teOffsets = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects() ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
				if ( teOffsets.length &amp;gt; 1 ) {&lt;br /&gt;
					for (var i = teOffsets.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
						if ( ePageY &amp;gt;= Math.round( $window.scrollTop() + teOffsets[i].top ) &amp;amp;&amp;amp;&lt;br /&gt;
							ePageY &amp;lt;= Math.round(&lt;br /&gt;
								$window.scrollTop() + teOffsets[i].top + teOffsets[i].height&lt;br /&gt;
							)&lt;br /&gt;
						) {&lt;br /&gt;
							teOffset = teOffsets[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !teOffset ) {&lt;br /&gt;
				teOffset = teElement.getClientRects &amp;amp;&amp;amp;&lt;br /&gt;
					teElement.getClientRects()[0] ||&lt;br /&gt;
					teElement.getBoundingClientRect();&lt;br /&gt;
			}&lt;br /&gt;
			teOffset = {&lt;br /&gt;
				top: $window.scrollTop() + teOffset.top,&lt;br /&gt;
				left: $window.scrollLeft() + teOffset.left,&lt;br /&gt;
				width: teOffset.width,&lt;br /&gt;
				height: teOffset.height&lt;br /&gt;
			};&lt;br /&gt;
			if ( !tooltipTailOffsetX ) {&lt;br /&gt;
				tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			if ( CLIENT_NAME === &#039;msie&#039; &amp;amp;&amp;amp; this.te.type === &#039;supRef&#039; ) {&lt;br /&gt;
				offsetYCorrection = -Number(&lt;br /&gt;
					this.te.$element.parent().css( &#039;font-size&#039; ).replace( &#039;px&#039;, &#039;&#039; )&lt;br /&gt;
				) / 2;&lt;br /&gt;
			}&lt;br /&gt;
			this.$element.css( {&lt;br /&gt;
				top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,&lt;br /&gt;
				left: tooltipTailOffsetX - 20,&lt;br /&gt;
				right: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Is it squished against the right side of the page?&lt;br /&gt;
			if ( this.$element.offset().left + this.$element.outerWidth() &amp;gt; $window.width() - 1 ) {&lt;br /&gt;
				this.$element.css( {&lt;br /&gt;
					left: &#039;&#039;,&lt;br /&gt;
					right: 0&lt;br /&gt;
				} );&lt;br /&gt;
				tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Is a part of it above the top of the screen?&lt;br /&gt;
			if ( teOffset.top &amp;lt; this.$element.outerHeight() + $window.scrollTop() + 6 ) {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_UP )&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top + teOffset.height + 9 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, ( tooltipTailLeft + 12 ) + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				this.$element&lt;br /&gt;
					.removeClass( &#039;rt-tooltip-below&#039; )&lt;br /&gt;
					.addClass( &#039;rt-tooltip-above&#039; )&lt;br /&gt;
					.addClass( CLASSES.FADE_IN_DOWN )&lt;br /&gt;
					// A fix for cases when a tooltip shown once is then wrongly positioned when it&lt;br /&gt;
					// is shown again after a window resize. We just repeat what is above.&lt;br /&gt;
					.css( {&lt;br /&gt;
						top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection&lt;br /&gt;
					} );&lt;br /&gt;
				if ( tooltipTailLeft ) {&lt;br /&gt;
					// 12 is the tail element width/height&lt;br /&gt;
					this.$tail.css( &#039;left&#039;, tooltipTailLeft + &#039;px&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Run some function for all the tooltips up to the top one in a tree. Its context will be&lt;br /&gt;
		// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array&lt;br /&gt;
		// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,&lt;br /&gt;
		// the execution stops when the function in question returns true for the first time,&lt;br /&gt;
		// and ToolTip.upToTopParent returns true as well.&lt;br /&gt;
		this.upToTopParent = function ( func, parameters, stopAtTrue ) {&lt;br /&gt;
			var returnValue,&lt;br /&gt;
				currentTooltip = this;&lt;br /&gt;
&lt;br /&gt;
			do {&lt;br /&gt;
				returnValue = func.apply( currentTooltip, parameters );&lt;br /&gt;
				if ( stopAtTrue &amp;amp;&amp;amp; returnValue ) {&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			} while ( currentTooltip = currentTooltip.parent );&lt;br /&gt;
&lt;br /&gt;
			if ( stopAtTrue ) {&lt;br /&gt;
				return returnValue;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( !enabled ) {&lt;br /&gt;
		addEnableLink();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	teSelector = REF_LINK_SELECTOR;&lt;br /&gt;
	if ( tooltipsForComments ) {&lt;br /&gt;
		teSelector += &#039;, &#039; + COMMENTED_TEXT_SELECTOR;&lt;br /&gt;
	}&lt;br /&gt;
	$content.find( teSelector ).each( function () {&lt;br /&gt;
		new TooltippedElement( $( this ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settingsString = mw.cookie.get( &#039;RTsettings&#039;, &#039;&#039; );&lt;br /&gt;
if ( settingsString ) {&lt;br /&gt;
	settings = settingsString.split( &#039;|&#039; );&lt;br /&gt;
	enabled = Boolean( Number( settings[ 0 ] ) );&lt;br /&gt;
	delay = Number( settings[ 1 ] );&lt;br /&gt;
	activatedByClick = Boolean( Number( settings[ 2 ] ) );&lt;br /&gt;
	// The forth value was added later, so we provide for a default value. See comments below&lt;br /&gt;
	// for why we use &amp;quot;IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE&amp;quot;.&lt;br /&gt;
	tooltipsForComments = settings[ 3 ] === undefined ?&lt;br /&gt;
		IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE :&lt;br /&gt;
		Boolean( Number( settings[ 3 ] ) );&lt;br /&gt;
} else {&lt;br /&gt;
	enabled = true;&lt;br /&gt;
	delay = 200;&lt;br /&gt;
	// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably&lt;br /&gt;
	// leave cases where a user interacting with the browser using touches doesn&#039;t know how to call&lt;br /&gt;
	// a tooltip in order to switch to activation by click. Some touch-supporting laptop users&lt;br /&gt;
	// interacting by touch (though probably not the most popular use case) would not be happy too.&lt;br /&gt;
	activatedByClick = IS_TOUCHSCREEN;&lt;br /&gt;
	// Arguably we shouldn&#039;t convert native tooltips into gadget tooltips for devices that have&lt;br /&gt;
	// mouse support, even if they have touchscreens (there are laptops with touchscreens).&lt;br /&gt;
	// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false&lt;br /&gt;
	// positives.&lt;br /&gt;
	tooltipsForComments = IS_TOUCHSCREEN &amp;amp;&amp;amp; IS_MOBILE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &#039;wikipage.content&#039; ).add( rt );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Wikivizor</name></author>
	</entry>
</feed>