<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://help.opentreeid.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js</id>
	<title>MediaWiki:Common.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://help.opentreeid.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js"/>
	<link rel="alternate" type="text/html" href="https://help.opentreeid.org/index.php?title=MediaWiki:Common.js&amp;action=history"/>
	<updated>2026-10-16T13:01:54Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://help.opentreeid.org/index.php?title=MediaWiki:Common.js&amp;diff=3&amp;oldid=prev</id>
		<title>Admin: Imported from the SquidWeb wiki</title>
		<link rel="alternate" type="text/html" href="https://help.opentreeid.org/index.php?title=MediaWiki:Common.js&amp;diff=3&amp;oldid=prev"/>
		<updated>2026-10-16T07:36:43Z</updated>

		<summary type="html">&lt;p&gt;Imported from the SquidWeb wiki&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* Site-wide JS. */&lt;br /&gt;
&lt;br /&gt;
/* Move the article table of contents into the Timeless right-hand column,&lt;br /&gt;
 * so in-page navigation sits beside the text instead of inside it.&lt;br /&gt;
 * Only on wide screens: below that Timeless folds the right column into a&lt;br /&gt;
 * dropdown, where a table of contents is worse than the inline one.&lt;br /&gt;
 * ponytail: decided once on load, not on resize — a resize is rare and a&lt;br /&gt;
 * reload fixes it. */&lt;br /&gt;
$( function () {&lt;br /&gt;
	var $toc = $( &amp;#039;#toc&amp;#039; ),&lt;br /&gt;
		$rail = $( &amp;#039;#mw-related-navigation&amp;#039; ),&lt;br /&gt;
		$list = $toc.find( &amp;#039;&amp;gt; ul&amp;#039; ),&lt;br /&gt;
		title = $.trim( $toc.find( &amp;#039;#mw-toc-heading&amp;#039; ).text() ) || &amp;#039;Contents&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	if ( !$toc.length || !$rail.length || !$list.length ||&lt;br /&gt;
		!window.matchMedia( &amp;#039;(min-width: 1100px)&amp;#039; ).matches&lt;br /&gt;
	) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$( &amp;#039;&amp;lt;div&amp;gt;&amp;#039; )&lt;br /&gt;
		.attr( &amp;#039;id&amp;#039;, &amp;#039;p-toc&amp;#039; )&lt;br /&gt;
		.addClass( &amp;#039;sidebar-chunk&amp;#039; )&lt;br /&gt;
		.append( $( &amp;#039;&amp;lt;h3&amp;gt;&amp;#039; ).text( title ) )&lt;br /&gt;
		.append( $( &amp;#039;&amp;lt;div&amp;gt;&amp;#039; ).addClass( &amp;#039;sidebar-inner&amp;#039; ).append( $list ) )&lt;br /&gt;
		.prependTo( $rail );&lt;br /&gt;
&lt;br /&gt;
	$toc.remove();&lt;br /&gt;
} );&lt;br /&gt;
/* Tell the SquidWeb web-application which wiki page the help iframe is showing.&lt;br /&gt;
 *&lt;br /&gt;
 * The app embeds this wiki in an iframe at /help/:id?url=... (see&lt;br /&gt;
 * HelpContent.jsx). Its handleChangeUrl listener updates the tab&amp;#039;s URL and name&lt;br /&gt;
 * from these messages, so without this the help tab silently stops tracking&lt;br /&gt;
 * navigation as soon as a reader clicks a link inside the frame.&lt;br /&gt;
 *&lt;br /&gt;
 * Carried over verbatim in behaviour from the legacy wiki&amp;#039;s Common.js, which is&lt;br /&gt;
 * the only place it existed. No-op when not framed: window.parent === window.&lt;br /&gt;
 *&lt;br /&gt;
 * ponytail: targetOrigin stays &amp;#039;*&amp;#039; to match the old wiki. Only a URL is sent,&lt;br /&gt;
 * and the app filters by its own containerLink — tighten it to the artlogic&lt;br /&gt;
 * origins if this ever carries anything more sensitive.&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
	function postHref() {&lt;br /&gt;
		window.parent.postMessage( { url: location.href }, &amp;#039;*&amp;#039; );&lt;br /&gt;
	}&lt;br /&gt;
	window.addEventListener( &amp;#039;load&amp;#039;, postHref );&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* Wanda floating chat: add a top-left resize grip. Native CSS resize&lt;br /&gt;
   (MediaWiki:Common.css) only offers the bottom-right corner; the window is&lt;br /&gt;
   bottom/right-anchored, so this grip resizes toward that anchor. */&lt;br /&gt;
(function () {&lt;br /&gt;
	function attach(win) {&lt;br /&gt;
		if (win.querySelector(&amp;#039;.wanda-resize-tl&amp;#039;)) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		var grip = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
		grip.className = &amp;#039;wanda-resize-tl&amp;#039;;&lt;br /&gt;
		grip.setAttribute(&amp;#039;aria-hidden&amp;#039;, &amp;#039;true&amp;#039;);&lt;br /&gt;
		win.appendChild(grip);&lt;br /&gt;
		grip.addEventListener(&amp;#039;mousedown&amp;#039;, function (e) {&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
			e.stopPropagation();&lt;br /&gt;
			var startX = e.clientX;&lt;br /&gt;
			var startY = e.clientY;&lt;br /&gt;
			var rect = win.getBoundingClientRect();&lt;br /&gt;
			var startW = rect.width;&lt;br /&gt;
			var startH = rect.height;&lt;br /&gt;
			function move(ev) {&lt;br /&gt;
				win.style.width = Math.max(320, startW - (ev.clientX - startX)) + &amp;#039;px&amp;#039;;&lt;br /&gt;
				win.style.height = Math.max(280, startH - (ev.clientY - startY)) + &amp;#039;px&amp;#039;;&lt;br /&gt;
				win.style.maxHeight = &amp;#039;none&amp;#039;;&lt;br /&gt;
			}&lt;br /&gt;
			function up() {&lt;br /&gt;
				document.removeEventListener(&amp;#039;mousemove&amp;#039;, move);&lt;br /&gt;
				document.removeEventListener(&amp;#039;mouseup&amp;#039;, up);&lt;br /&gt;
			}&lt;br /&gt;
			document.addEventListener(&amp;#039;mousemove&amp;#039;, move);&lt;br /&gt;
			document.addEventListener(&amp;#039;mouseup&amp;#039;, up);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	var observer = new MutationObserver(function () {&lt;br /&gt;
		var win = document.querySelector(&amp;#039;.wanda-floating-window&amp;#039;);&lt;br /&gt;
		if (win) {&lt;br /&gt;
			attach(win);&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
	observer.observe(document.body, { childList: true, subtree: true });&lt;br /&gt;
	var win = document.querySelector(&amp;#039;.wanda-floating-window&amp;#039;);&lt;br /&gt;
	if (win) {&lt;br /&gt;
		attach(win);&lt;br /&gt;
	}&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* Language bar as a dropdown — Trello 4TyPgtP9 &amp;quot;Language should not be list&lt;br /&gt;
 * but select&amp;quot;. The Translate extension renders the available translations as&lt;br /&gt;
 * an inline link list (.mw-pt-languages-list); build a &amp;lt;select&amp;gt; from it that&lt;br /&gt;
 * navigates on change, and hide the list rather than removing it so anything&lt;br /&gt;
 * else that reads it keeps working.&lt;br /&gt;
 * ponytail: the browser&amp;#039;s own &amp;lt;select&amp;gt; UI, no ULS widget. Display names are&lt;br /&gt;
 * capitalised here because the CSS text-transform on the list does not reach&lt;br /&gt;
 * into option elements on every platform. */&lt;br /&gt;
$( function () {&lt;br /&gt;
	var $list = $( &amp;#039;.mw-pt-languages-list&amp;#039; );&lt;br /&gt;
	if ( !$list.length ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	var $select = $( &amp;#039;&amp;lt;select&amp;gt;&amp;#039; ).addClass( &amp;#039;mw-pt-languages-select&amp;#039; );&lt;br /&gt;
	$list.find( &amp;#039;li&amp;#039; ).each( function () {&lt;br /&gt;
		var $item = $( this ).children( &amp;#039;a, span&amp;#039; ).first();&lt;br /&gt;
		var name = $item.text();&lt;br /&gt;
		$( &amp;#039;&amp;lt;option&amp;gt;&amp;#039; )&lt;br /&gt;
			.text( name.charAt( 0 ).toUpperCase() + name.slice( 1 ) )&lt;br /&gt;
			.val( $item.attr( &amp;#039;href&amp;#039; ) || &amp;#039;&amp;#039; )&lt;br /&gt;
			.prop( &amp;#039;selected&amp;#039;, $item.is( &amp;#039;span&amp;#039; ) )&lt;br /&gt;
			.appendTo( $select );&lt;br /&gt;
	} );&lt;br /&gt;
	$select.on( &amp;#039;change&amp;#039;, function () {&lt;br /&gt;
		if ( this.value ) {&lt;br /&gt;
			location.href = this.value;&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
	$list.hide().after( $select );&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>