<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.endmyopia.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-find-archived-section.js</id>
	<title>MediaWiki:Gadget-find-archived-section.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.endmyopia.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-find-archived-section.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-find-archived-section.js&amp;action=history"/>
	<updated>2026-05-05T15:07:13Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-find-archived-section.js&amp;diff=13661&amp;oldid=prev</id>
		<title>NottNott: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-find-archived-section.js&amp;diff=13661&amp;oldid=prev"/>
		<updated>2020-06-20T15:55:32Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:55, 20 June 2020&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key jakeendmy_mw1720-mwnr_:diff::1.12:old-13660:rev-13661 --&gt;
&lt;/table&gt;</summary>
		<author><name>NottNott</name></author>
	</entry>
	<entry>
		<id>https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-find-archived-section.js&amp;diff=13660&amp;oldid=prev</id>
		<title>en&gt;Xaosflux: update Api-User-Agent to new location, requested on talk</title>
		<link rel="alternate" type="text/html" href="https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-find-archived-section.js&amp;diff=13660&amp;oldid=prev"/>
		<updated>2020-04-27T11:25:33Z</updated>

		<summary type="html">&lt;p&gt;update Api-User-Agent to new location, requested on talk&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**  _____________________________________________________________________________&lt;br /&gt;
 * |                                                                             |&lt;br /&gt;
 * |                    === WARNING: GLOBAL GADGET FILE ===                      |&lt;br /&gt;
 * |                  Changes to this page affect many users.                    |&lt;br /&gt;
 * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |&lt;br /&gt;
 * |_____________________________________________________________________________|&lt;br /&gt;
 * &lt;br /&gt;
 * Gadget to navigate to an archived section after following its broken link.&lt;br /&gt;
 * &lt;br /&gt;
 * Author: SD0001&lt;br /&gt;
 * Documentation: [[User:SD0001/find-archived-section]]&lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// START EDITING HERE FOR LOCALISATION&lt;br /&gt;
// Messages: translate these strings if porting to a non-English language wiki&lt;br /&gt;
var msg = {&lt;br /&gt;
	&amp;quot;starter-text&amp;quot;: &amp;quot;Looks like the discussion \&amp;quot;$1\&amp;quot; has been archived. &amp;quot;,&lt;br /&gt;
	&amp;quot;finding&amp;quot;: &amp;quot;Finding archived discussion...&amp;quot;,&lt;br /&gt;
	&amp;quot;click-link&amp;quot;: &amp;quot;Click to see archived discussion&amp;quot;,&lt;br /&gt;
	&amp;quot;no-search-results&amp;quot;: &amp;quot;No search results found for section \&amp;quot;$1\&amp;quot; in archives. It may have been removed or renamed, or you may have followed a malformed link.&amp;quot;,&lt;br /&gt;
	&amp;quot;search-link-found&amp;quot;: &amp;quot;(or search in archives)&amp;quot;, // link to search results when an exact match was obtained.&lt;br /&gt;
	&amp;quot;search-link-notfound&amp;quot;: &amp;quot;Click to search in archives&amp;quot; // link to search results when an exact match was NOT obtained.&lt;br /&gt;
};&lt;br /&gt;
var config = {&lt;br /&gt;
	// Function to introduce arbitrary changes to prefix.&lt;br /&gt;
	// Used here as archive page names used for admin noticeboards on enwiki are unusual&lt;br /&gt;
	prefixNormaliser: function(prefix) {&lt;br /&gt;
		switch (prefix) {&lt;br /&gt;
			case &amp;quot;Wikipedia:Administrators' noticeboard/Incidents&amp;quot;:&lt;br /&gt;
				return &amp;quot;Wikipedia:Administrators' noticeboard/IncidentArchive&amp;quot;;&lt;br /&gt;
			case &amp;quot;Wikipedia:Administrators' noticeboard/Edit warring&amp;quot;:&lt;br /&gt;
				return &amp;quot;Wikipedia:Administrators' noticeboard/3RRArchive&amp;quot;;&lt;br /&gt;
			case &amp;quot;Wikipedia:Administrators' noticeboard&amp;quot;:&lt;br /&gt;
				return &amp;quot;Wikipedia:Administrators' noticeboard/Archive&amp;quot;;&lt;br /&gt;
			default: &lt;br /&gt;
				return prefix;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
// STOP EDITING HERE FOR LOCALISATION&lt;br /&gt;
&lt;br /&gt;
$(function() {&lt;br /&gt;
&lt;br /&gt;
	var addsection = document.getElementById('ca-addsection');&lt;br /&gt;
	var correctNs = mw.config.get('wgNamespaceNumber') % 2 === 1 || mw.config.get('wgNamespaceNumber') === 4;&lt;br /&gt;
	var minerva = mw.config.get('skin') === 'minerva';&lt;br /&gt;
&lt;br /&gt;
	// Show only on discussion pages (pages with &amp;quot;add section&amp;quot; button)&lt;br /&gt;
	// On minerva skin (which doesn't use add section button) show on all talk &amp;amp; project space pages&lt;br /&gt;
	if (!addsection &amp;amp;&amp;amp; (!correctNs || !minerva)) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var sectionName = decodeURIComponent(&lt;br /&gt;
		window.location.hash.slice(1)  // to remove the leading #&lt;br /&gt;
		.replace(/_/g, ' ')&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
	// For anchor-encoded (UTF-8 percent encoding but with % replaced by a period (.) ), try to undo the encoding.&lt;br /&gt;
	// For some strange reason, MediaWiki doesn't encode . itself, because of this the encoding process isn't&lt;br /&gt;
	// exactly reversible. But this should work for the vast majority of cases.&lt;br /&gt;
	var sectionNameDotDecoded = decodeURIComponent(sectionName.replace(/\.([0-9A-F]{2})/g, '%$1'));&lt;br /&gt;
&lt;br /&gt;
	if (!sectionName || // no section name in URL&lt;br /&gt;
		sectionName.indexOf('/media/') === 0 || // URLs used by MediaViewer&lt;br /&gt;
		document.getElementById(sectionName.replace(/ /g, '_')) !== null) { // section exists on page&lt;br /&gt;
			return;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	var sanitiseString = function(str, escapeHtml) {&lt;br /&gt;
		// if str contains $ signs, we don't want String.prototype.replace to treat them with special meaning&lt;br /&gt;
		return (escapeHtml ? mw.html.escape(str) : str).replace(/\$/g, '$$$$');	&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	$('#mw-content-text').before(&lt;br /&gt;
		$('&amp;lt;div&amp;gt;')&lt;br /&gt;
			.text(msg['starter-text'].replace('$1', sanitiseString(sectionName, false)) + msg['finding'])&lt;br /&gt;
			.addClass('archived-section-prompt')&lt;br /&gt;
			.css({&lt;br /&gt;
				'font-size': '90%',&lt;br /&gt;
				'padding': '0 0 10px 20px'&lt;br /&gt;
			})&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
	var prefix = mw.config.get('wgPageName').replace(/_/g, ' ');&lt;br /&gt;
&lt;br /&gt;
	// Apply normalisation for for admin noticeboards&lt;br /&gt;
	if (typeof config.prefixNormaliser === 'function') {&lt;br /&gt;
		prefix = config.prefixNormaliser(prefix);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var searchQuery = sectionNameDotDecoded === sectionName ?&lt;br /&gt;
		'&amp;quot;' + sectionName + '&amp;quot; prefix:&amp;quot;' + prefix + '&amp;quot;' :&lt;br /&gt;
		'&amp;quot;' + sectionName + '&amp;quot; OR &amp;quot;' + sectionNameDotDecoded + '&amp;quot; prefix:&amp;quot;' + prefix + '&amp;quot;';&lt;br /&gt;
&lt;br /&gt;
	mw.loader.using(['mediawiki.util', 'mediawiki.api']).then(function() {&lt;br /&gt;
&lt;br /&gt;
		return new mw.Api({&lt;br /&gt;
			ajax: { headers: { 'Api-User-Agent': 'w:en:MediaWiki:Gadget-find-archived-section.js' } }&lt;br /&gt;
		}).get({&lt;br /&gt;
			action: 'query',&lt;br /&gt;
			list: 'search',&lt;br /&gt;
			srsearch: searchQuery,&lt;br /&gt;
			srprop: 'sectiontitle',&lt;br /&gt;
			srsort: 'create_timestamp_desc', // list more recent archives first&lt;br /&gt;
			srlimit: '20'&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
	}).then(function(json) {&lt;br /&gt;
		if (!json || !json.query || !json.query.search) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var divHtml;&lt;br /&gt;
		var results = json.query.search;&lt;br /&gt;
		if (results.length === 0) {&lt;br /&gt;
			divHtml = msg['no-search-results'].replace('$1', sanitiseString(sectionName, true));&lt;br /&gt;
&lt;br /&gt;
		} else {&lt;br /&gt;
			var pageTitle,&lt;br /&gt;
				sectionNameFound; // will either be sectionName or sectionNameDotDecoded&lt;br /&gt;
&lt;br /&gt;
			// obtain the the first exact section title match (which would be from the most recent archive)&lt;br /&gt;
			// this loop iterates over just one item in the vast majority of cases&lt;br /&gt;
			var sectionName_ = sectionName.replace(/ /g, '_');&lt;br /&gt;
			var sectionNameDotDecoded_ = sectionNameDotDecoded.replace(/ /g, '_');&lt;br /&gt;
			for (var i in results) {&lt;br /&gt;
				var result = results[i];&lt;br /&gt;
				// sectiontitle in API output has spaces encoded as underscores&lt;br /&gt;
				if (result.sectiontitle) {&lt;br /&gt;
					if (result.sectiontitle === sectionName_ ||&lt;br /&gt;
						result.sectiontitle === sectionNameDotDecoded_) {&lt;br /&gt;
&lt;br /&gt;
						pageTitle = result.title;&lt;br /&gt;
						sectionNameFound = result.sectiontitle.replace(/_/g, ' ');&lt;br /&gt;
						break;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var searchLink = mw.util.getUrl('Special:Search', {&lt;br /&gt;
				search: '~' + searchQuery, // ~ in the beginning forces a search even if a page of the same name exists, see [[H:FORCE]]&lt;br /&gt;
				prefix: prefix,&lt;br /&gt;
				sort: 'create_timestamp_desc'&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
			divHtml = msg['starter-text'].replace('$1', sanitiseString(sectionNameFound || sectionName, true));&lt;br /&gt;
&lt;br /&gt;
			if (pageTitle) { // if a section with the same name was found&lt;br /&gt;
				var discussionLink = mw.util.getUrl(pageTitle) + '#' + mw.util.wikiUrlencode(sectionNameFound);&lt;br /&gt;
				divHtml += '&amp;lt;b&amp;gt;&amp;lt;a href=&amp;quot;' + discussionLink + '&amp;quot;&amp;gt;' + msg['click-link'] + '&amp;lt;/a&amp;gt;&amp;lt;/b&amp;gt; ';&lt;br /&gt;
				divHtml += '&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;' + searchLink + '&amp;quot;&amp;gt;' + msg['search-link-found'] + '&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;. ';&lt;br /&gt;
&lt;br /&gt;
			} else {&lt;br /&gt;
				divHtml += '&amp;lt;a href=&amp;quot;' + searchLink + '&amp;quot;&amp;gt;' + msg['search-link-notfound'] + '&amp;lt;/a&amp;gt;. ';&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$('.archived-section-prompt').html(divHtml);&lt;br /&gt;
&lt;br /&gt;
	}).catch(function(err) {&lt;br /&gt;
		console.error('[find-archived-section]: ', JSON.stringify(err));&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>en&gt;Xaosflux</name></author>
	</entry>
</feed>