<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://dungeoncrusher.ru/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-referenceTooltips.js</id>
	<title>MediaWiki:Gadget-referenceTooltips.js - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://dungeoncrusher.ru/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-referenceTooltips.js"/>
	<link rel="alternate" type="text/html" href="https://dungeoncrusher.ru/w/index.php?title=MediaWiki:Gadget-referenceTooltips.js&amp;action=history"/>
	<updated>2026-06-13T21:36:27Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://dungeoncrusher.ru/w/index.php?title=MediaWiki:Gadget-referenceTooltips.js&amp;diff=6604&amp;oldid=prev</id>
		<title>MrGorun в 20:00, 10 октября 2020</title>
		<link rel="alternate" type="text/html" href="https://dungeoncrusher.ru/w/index.php?title=MediaWiki:Gadget-referenceTooltips.js&amp;diff=6604&amp;oldid=prev"/>
		<updated>2020-10-10T20:00:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
// ( function () {&lt;br /&gt;
&lt;br /&gt;
// // ruwiki settings&lt;br /&gt;
// var REF_LINK_SELECTOR = '.reference, a[href^=&amp;quot;#CITEREF&amp;quot;]',&lt;br /&gt;
// 	COMMENTED_TEXT_CLASS = 'ts-comment-commentedText',&lt;br /&gt;
// 	COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? '.' + COMMENTED_TEXT_CLASS + ', ' : '') +&lt;br /&gt;
// 		'abbr[title]';&lt;br /&gt;
&lt;br /&gt;
// mw.messages.set( {&lt;br /&gt;
// 	'rt-settings': 'Настройки всплывающих примечаний',&lt;br /&gt;
// 	'rt-enable-footer': 'Включить всплывающие примечания',&lt;br /&gt;
// 	'rt-settings-title': 'Всплывающие примечания',&lt;br /&gt;
// 	'rt-save': 'Сохранить',&lt;br /&gt;
// 	'rt-cancel': 'Отмена',&lt;br /&gt;
// 	'rt-enable': 'Включить',&lt;br /&gt;
// 	'rt-disable': 'Отключить',&lt;br /&gt;
// 	'rt-activationMethod': 'Подсказка появляется при',&lt;br /&gt;
// 	'rt-hovering': 'наведении',&lt;br /&gt;
// 	'rt-clicking': 'клике',&lt;br /&gt;
// 	'rt-delay': 'Задержка перед появлением подсказки (в миллисекундах)',&lt;br /&gt;
// 	'rt-tooltipsForComments': 'Показывать всплывающие подсказки над &amp;lt;span title=&amp;quot;Пример всплывающей подсказки&amp;quot; class=&amp;quot;' + ( COMMENTED_TEXT_CLASS || 'rt-commentedText' ) + '&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;подчёркнутым точками текстом&amp;lt;/span&amp;gt; в стиле всплывающих примечаний (позволяет видеть такие подсказки на устройствах, где не поддерживается мышь)',&lt;br /&gt;
// 	'rt-disabledNote': 'Вы можете включить всплывающие примечания обратно, используя ссылку внизу страницы.',&lt;br /&gt;
// 	'rt-done': 'Готово',&lt;br /&gt;
// 	'rt-enabled': 'Всплывающие подсказки с примечаниями включены'&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: 'rt-fade-in-down',&lt;br /&gt;
// 		FADE_IN_UP: 'rt-fade-in-up',&lt;br /&gt;
// 		FADE_OUT_DOWN: 'rt-fade-out-down',&lt;br /&gt;
// 		FADE_OUT_UP: 'rt-fade-out-up'&lt;br /&gt;
// 	},&lt;br /&gt;
// 	IS_TOUCHSCREEN = 'ontouchstart' 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 !== 'undefined',&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;
// 			'RTsettings',&lt;br /&gt;
// 			Number( enabled ) + '|' + delay + '|' + Number( activatedByClick ) + '|' +&lt;br /&gt;
// 				Number( tooltipsForComments ),&lt;br /&gt;
// 			{ path: '/', expires: 90 * SECONDS_IN_A_DAY }&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;
// 		$( '.rt-enableItem' ).remove();&lt;br /&gt;
// 		rt( $content );&lt;br /&gt;
// 		mw.notify( mw.msg( 'rt-enabled' ) );&lt;br /&gt;
// 	}&lt;br /&gt;
&lt;br /&gt;
// 	function disableRt() {&lt;br /&gt;
// 		$content.find( teSelector ).removeClass( 'rt-commentedText' ).off( '.rt' );&lt;br /&gt;
// 		$body.off( '.rt' );&lt;br /&gt;
// 		$window.off( '.rt' );&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 = $( '#footer-places, #f-list' );&lt;br /&gt;
// 		if ( !$footer.length ) {&lt;br /&gt;
// 			$footer = $( '#footer li' ).parent();&lt;br /&gt;
// 		}&lt;br /&gt;
// 		$footer.append(&lt;br /&gt;
// 			$( '&amp;lt;li&amp;gt;' )&lt;br /&gt;
// 				.addClass( 'rt-enableItem' )&lt;br /&gt;
// 				.append(&lt;br /&gt;
// 					$( '&amp;lt;a&amp;gt;' )&lt;br /&gt;
// 						.text( mw.msg( 'rt-enable-footer' ) )&lt;br /&gt;
// 						.attr( 'href', 'javascript:' )&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 !== 'commentedText' &amp;amp;&amp;amp; e.type !== 'contextmenu' ) {&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 !== 'supRef' ) {&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( 'tagName' ) === 'SUP' ) {&lt;br /&gt;
// 				this.type = 'supRef';&lt;br /&gt;
// 			} else {&lt;br /&gt;
// 				this.type = 'harvardRef';&lt;br /&gt;
// 			}&lt;br /&gt;
// 		} else {&lt;br /&gt;
// 			this.type = 'commentedText';&lt;br /&gt;
// 			this.comment = this.$element.attr( 'title' );&lt;br /&gt;
// 			if ( !this.comment ) {&lt;br /&gt;
// 				return;&lt;br /&gt;
// 			}&lt;br /&gt;
// 			this.$element.addClass('rt-commentedText');&lt;br /&gt;
// 		}&lt;br /&gt;
		&lt;br /&gt;
// 		if ( activatedByClick ) {&lt;br /&gt;
// 			events = {&lt;br /&gt;
// 				'click.rt': onStartEvent&lt;br /&gt;
// 			};&lt;br /&gt;
// 			// Adds an ability to see tooltips for links&lt;br /&gt;
// 			if ( this.type === 'commentedText' &amp;amp;&amp;amp;&lt;br /&gt;
// 				( this.$element.closest( 'a' ).length ||&lt;br /&gt;
// 					this.$element.has( 'a' ).length&lt;br /&gt;
// 				)&lt;br /&gt;
// 			) {&lt;br /&gt;
// 				events[ 'contextmenu.rt' ] = onStartEvent;&lt;br /&gt;
// 			}&lt;br /&gt;
// 		} else {&lt;br /&gt;
// 			events = {&lt;br /&gt;
// 				'mouseenter.rt': onStartEvent,&lt;br /&gt;
// 				'mouseleave.rt': 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 === 'commentedText' ) {&lt;br /&gt;
// 				this.$element.attr( 'title', 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( 'rt-target' ) ) {&lt;br /&gt;
// 				this.$ref.removeClass( 'rt-target' );&lt;br /&gt;
// 				if ( activatedByClick ) {&lt;br /&gt;
// 					$body.off( 'click.rt touchstart.rt', 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 === 'supRef' ?&lt;br /&gt;
// 						te.$element.find( 'a' ).attr( 'href' ) :&lt;br /&gt;
// 						te.$element.attr( 'href' ); // harvardRef&lt;br /&gt;
// 					te.$ref = teHref &amp;amp;&amp;amp;&lt;br /&gt;
// 						$( '#' + $.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( 'rt-target' );&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'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( '.rt-tooltip' ).data( 'tooltip' );&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( 'rt-tooltip-above' ) ) {&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( 'resize.rt', 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 === 'commentedText' ) {&lt;br /&gt;
// 				this.$element.attr( 'title', '' );&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( 'rt-target' ) )&lt;br /&gt;
// 				) {&lt;br /&gt;
// 					return;&lt;br /&gt;
// 				} else {&lt;br /&gt;
// 					setTimeout( function () {&lt;br /&gt;
// 						$body.on( 'click.rt touchstart.rt', 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.hasClass( 'rt-target' ) ) {&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's tooltip or one of its descendants&lt;br /&gt;
// 			while ( $current.length &amp;amp;&amp;amp;&lt;br /&gt;
// 				( !$current.hasClass( 'rt-tooltip' ) ||&lt;br /&gt;
// 					!$current.data( 'tooltip' ) ||&lt;br /&gt;
// 					!$current.data( 'tooltip' ).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 = 'settingsDialog';&lt;br /&gt;
// 			SettingsDialog.static.title = mw.msg( 'rt-settings-title' );&lt;br /&gt;
// 			SettingsDialog.static.actions = [&lt;br /&gt;
// 				{&lt;br /&gt;
// 					modes: 'basic',&lt;br /&gt;
// 					action: 'save',&lt;br /&gt;
// 					label: mw.msg( 'rt-save' ),&lt;br /&gt;
// 					flags: [ 'primary', 'progressive' ]&lt;br /&gt;
// 				},&lt;br /&gt;
// 				{&lt;br /&gt;
// 					modes: 'basic',&lt;br /&gt;
// 					label: mw.msg( 'rt-cancel' ),&lt;br /&gt;
// 					flags: 'safe'&lt;br /&gt;
// 				},&lt;br /&gt;
// 				{&lt;br /&gt;
// 					modes: 'disabled',&lt;br /&gt;
// 					action: 'deactivated',&lt;br /&gt;
// 					label: mw.msg( 'rt-done' ),&lt;br /&gt;
// 					flags: [ 'primary', 'progressive' ]&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( 'rt-enable' )&lt;br /&gt;
// 				} );&lt;br /&gt;
// 				this.disableOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
// 					label: mw.msg( 'rt-disable' )&lt;br /&gt;
// 				} );&lt;br /&gt;
// 				this.enableSelect = new OO.ui.RadioSelectWidget( {&lt;br /&gt;
// 					items: [ this.enableOption, this.disableOption ],&lt;br /&gt;
// 					classes: [ 'rt-enableSelect' ]&lt;br /&gt;
// 				} );&lt;br /&gt;
// 				this.enableSelect.selectItem( this.enableOption );&lt;br /&gt;
// 				this.enableSelect.on( 'choose', 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( 'rt-hovering' )&lt;br /&gt;
// 				} );&lt;br /&gt;
// 				this.clickOption = new OO.ui.RadioOptionWidget( {&lt;br /&gt;
// 					label: mw.msg( 'rt-clicking' )&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( 'choose', 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( 'rt-activationMethod' ),&lt;br /&gt;
// 					align: 'top'&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: [ 'rt-numberInput' ]&lt;br /&gt;
// 				} );&lt;br /&gt;
// 				this.delayField = new OO.ui.FieldLayout( this.delayInput, {&lt;br /&gt;
// 					label: mw.msg( 'rt-delay' ),&lt;br /&gt;
// 					align: 'top'&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( 'rt-tooltipsForComments' ) ),&lt;br /&gt;
// 						align: 'inline',&lt;br /&gt;
// 						classes: [ 'rt-tooltipsForCommentsField' ]&lt;br /&gt;
// 					}&lt;br /&gt;
// 				);&lt;br /&gt;
// 				new TooltippedElement(&lt;br /&gt;
// 					this.tooltipsForCommentsField.$element.find(&lt;br /&gt;
// 						'.' + ( COMMENTED_TEXT_CLASS || 'rt-commentedText' )&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;
// 					$( '&amp;lt;hr&amp;gt;' ).addClass( 'rt-settingsFormSeparator' ),&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;
// 					$( '&amp;lt;table&amp;gt;' )&lt;br /&gt;
// 						.addClass( 'rt-disabledHelp' )&lt;br /&gt;
// 						.append(&lt;br /&gt;
// 							$( '&amp;lt;tr&amp;gt;' ).append(&lt;br /&gt;
// 								$( '&amp;lt;td&amp;gt;' ).append(&lt;br /&gt;
// 									$( '&amp;lt;img&amp;gt;' ).attr( 'src', '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' )&lt;br /&gt;
// 								),&lt;br /&gt;
// 								$( '&amp;lt;td&amp;gt;' )&lt;br /&gt;
// 									.addClass( 'rt-disabledNote' )&lt;br /&gt;
// 									.text( mw.msg( 'rt-disabledNote' ) )&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( 'basic' );&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 === 'save' ) {&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( 'disabled' );&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 === 'deactivated' ) {&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;
// 							'right',&lt;br /&gt;
// 							'+=' + ( 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 'supRef':&lt;br /&gt;
// 				this.id = 'rt-' + this.te.$originalElement.attr( 'id' );&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( '.mw-cite-backlink' ) ||&lt;br /&gt;
// 								( i === 0 &amp;amp;&amp;amp;&lt;br /&gt;
// 									// Template:Cnote, Template:Note&lt;br /&gt;
// 									( $this.is( 'b' ) ||&lt;br /&gt;
// 										// Template:Note_label&lt;br /&gt;
// 										$this.is( 'a' ) &amp;amp;&amp;amp;&lt;br /&gt;
// 										$this.attr( 'href' ).indexOf( '#ref' ) === 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 'harvardRef':&lt;br /&gt;
// 				this.id = 'rt-' + this.te.$originalElement.closest( 'li' ).attr( 'id' );&lt;br /&gt;
// 				this.$content = this.te.$ref&lt;br /&gt;
// 					.clone( true )&lt;br /&gt;
// 					.removeAttr( 'id' );&lt;br /&gt;
// 				break;&lt;br /&gt;
// 			case 'commentedText':&lt;br /&gt;
// 				this.id = 'rt-' + 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( '.oo-ui-window' ).length );&lt;br /&gt;
&lt;br /&gt;
// 		this.$element = $( '&amp;lt;div&amp;gt;' )&lt;br /&gt;
// 			.addClass( 'rt-tooltip' )&lt;br /&gt;
// 			.attr( 'id', this.id )&lt;br /&gt;
// 			.attr( 'role', 'tooltip' )&lt;br /&gt;
// 			.data( 'tooltip', this );&lt;br /&gt;
// 		if ( this.insideWindow ) {&lt;br /&gt;
// 			this.$element.addClass( 'rt-tooltip-insideWindow' );&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( '&amp;lt;div&amp;gt;' )&lt;br /&gt;
// 			.parent()&lt;br /&gt;
// 			.addClass( 'rt-tooltipContent' )&lt;br /&gt;
// 			.addClass( 'mw-parser-output' )&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 !== 'chrome' ||&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;
// 			$( '&amp;lt;div&amp;gt;' )&lt;br /&gt;
// 				.addClass( 'rt-settingsLink' )&lt;br /&gt;
// 				.attr( 'title', mw.msg( 'rt-settings' ) )&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( 'oojs-ui' ) !== 'ready' ) {&lt;br /&gt;
// 						if ( cursorWaitCss ) {&lt;br /&gt;
// 							cursorWaitCss.disabled = false;&lt;br /&gt;
// 						} else {&lt;br /&gt;
// 							cursorWaitCss = mw.util.addCSS( 'body { cursor: wait; }' );&lt;br /&gt;
// 						}&lt;br /&gt;
// 					}&lt;br /&gt;
// 					mw.loader.using( [ 'oojs', 'oojs-ui' ], 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 = $( '&amp;lt;div&amp;gt;' )&lt;br /&gt;
// 			.addClass( 'rt-tooltipTail' )&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( 'rt-tooltip-above' ) ) {&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( 'left', '' );&lt;br /&gt;
&lt;br /&gt;
// 					if ( activatedByClick ) {&lt;br /&gt;
// 						$body.off( 'click.rt touchstart.rt', tooltip.te.onBodyClick );&lt;br /&gt;
// 					}&lt;br /&gt;
// 					$window.off( 'resize.rt', 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( 'left', '' );&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 === 'msie' &amp;amp;&amp;amp; this.te.type === 'supRef' ) {&lt;br /&gt;
// 				offsetYCorrection = -Number(&lt;br /&gt;
// 					this.te.$element.parent().css( 'font-size' ).replace( 'px', '' )&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: ''&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: '',&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( 'rt-tooltip-above' )&lt;br /&gt;
// 					.addClass( 'rt-tooltip-below' )&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( 'left', ( tooltipTailLeft + 12 ) + 'px' );&lt;br /&gt;
// 				}&lt;br /&gt;
// 			} else {&lt;br /&gt;
// 				this.$element&lt;br /&gt;
// 					.removeClass( 'rt-tooltip-below' )&lt;br /&gt;
// 					.addClass( 'rt-tooltip-above' )&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( 'left', tooltipTailLeft + 'px' );&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 += ', ' + 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( 'RTsettings' );&lt;br /&gt;
// if ( settingsString ) {&lt;br /&gt;
// 	settings = settingsString.split( '|' );&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'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'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( 'wikipage.content' ).add( rt );&lt;br /&gt;
&lt;br /&gt;
// // Caused by [[phab:T238991]]. The bug stayed for almost a month and affected many users which would&lt;br /&gt;
// // have two tooltips appear simultaneously if we remove the fix, so we better keep it indefinitely.&lt;br /&gt;
// mw.config.set( 'wgPopupsReferencePreviews', false );&lt;br /&gt;
&lt;br /&gt;
// }() );&lt;/div&gt;</summary>
		<author><name>MrGorun</name></author>
	</entry>
</feed>