This is an old revision of this page, as edited by SD0001(talk | contribs) at 02:05, 9 December 2019(escape $ in the section names, that would break JS replace(), tweak comments a bit). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.Revision as of 02:05, 9 December 2019 by SD0001(talk | contribs)(escape $ in the section names, that would break JS replace(), tweak comments a bit)
This page is loaded as a part of the find-archived-section gadget, used by 5,637 users.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
(function(){varaddsection=document.getElementById('ca-addsection');varcorrectNs=mw.config.get('wgNamespaceNumber')%2===1||mw.config.get('wgNamespaceNumber')===4;varminerva=mw.config.get('skin')==='minerva';// Show only on discussion pages (pages with "add section" button)// On minerva skin (which doesn't use add section button) show on all talk & project space pagesif(!addsection&&(!correctNs||!minerva)){return;}varsectionName=decodeURIComponent(window.___location.hash.slice(1)// to remove the leading #.replace(/_/g,' '));// For anchor-encoded (UTF-8 percent encoding but with % replaced by a period (.) ), try to undo the encoding.// For some strange reason, MediaWiki doesn't encode . itself, because of this the encoding process isn't// exactly reversible. But this should work for the vast majority of cases.varsectionNameDotDecoded=decodeURIComponent(sectionName.replace(/\.([0-9A-F]{2})/g,'%$1'));if(!sectionName||// no section name in URLsectionName.indexOf('/media/')===0||// URLs used by MediaViewerdocument.getElementById(sectionName.replace(/ /g,'_'))!==null){// section exists on pagereturn;}// START EDITING HERE FOR LOCALISATION// Messages: translate these strings if porting to a non-English language wikivarmsg={"starter-text":"Looks like the discussion \"$1\" has been archived. ","finding":"Finding archived discussion...","click-link":"Click to see archived discussion","no-search-results":"No search results found for section \"$1\" in archives. It may have been removed or renamed, or you may have followed a malformed link.","search-link-found":"(or search in archives)",// link to search results when an exact match was obtained."search-link-notfound":"Click to search in archives"// link to search results when an exact match was NOT obtained.};varconfig={// Function to introduce arbitrary changes to prefix.// Used here as archive page names used for admin noticeboards on enwiki are unusualprefixNormaliser:function(prefix){switch(prefix){case"Wikipedia:Administrators' noticeboard/Incidents":return"Wikipedia:Administrators' noticeboard/IncidentArchive";case"Wikipedia:Administrators' noticeboard/Edit warring":return"Wikipedia:Administrators' noticeboard/3RRArchive";case"Wikipedia:Administrators' noticeboard":return"Wikipedia:Administrators' noticeboard/Archive";default:returnprefix;}}};// STOP EDITING HERE FOR LOCALISATION$('#mw-content-text').before($('<div>').text(msg['starter-text'].replace('$1',sectionName.replace(/\$/g,'$$$$'))+msg['finding']).addClass('archived-section-prompt').css({'font-size':'90%','padding':'0 0 10px 20px'}));varprefix=mw.config.get('wgPageName').replace(/_/g,' ');// Apply normalisation for for admin noticeboardsif(typeofconfig.prefixNormaliser==='function'){prefix=config.prefixNormaliser(prefix);}varsearchQuery=sectionNameDotDecoded===sectionName?'"'+sectionName+'" prefix:"'+prefix+'"':'"'+sectionName+'" OR "'+sectionNameDotDecoded+'" prefix:"'+prefix+'"';mw.loader.using(['mediawiki.util','mediawiki.api']).then(function(){returnnewmw.Api({ajax:{headers:{'Api-User-Agent':'w:en:User:SD0001/find-archived-section.js'}}}).get({action:'query',list:'search',srsearch:searchQuery,srprop:'sectiontitle',srsort:'create_timestamp_desc',// list more recent archives firstsrlimit:'20'});}).then(function(json){if(!json||!json.query||!json.query.search){return;}vardivHtml;varresults=json.query.search;if(results.length===0){divHtml=msg['no-search-results'].replace('$1',mw.html.escape(sectionName).replace(/\$/g,'$$$$'));}else{varpageTitle,sectionNameFound;// will either be sectionName or sectionNameDotDecoded// obtain the the first exact section title match (which would be from the most recent archive)// this loop iterates over just one item in the vast majority of casesvarsectionName_=sectionName.replace(/ /g,'_');varsectionNameDotDecoded_=sectionNameDotDecoded.replace(/ /g,'_');for(variinresults){varresult=results[i];// sectiontitle in API output has spaces encoded as underscoresif(result.sectiontitle){if(result.sectiontitle===sectionName_||result.sectiontitle===sectionNameDotDecoded_){pageTitle=result.title;sectionNameFound=result.sectiontitle.replace(/_/g,' ');break;}}}varsearchLink=mw.util.getUrl('Special:Search',{search:'~'+searchQuery,// ~ in the beginning forces a search even if a page of the same name exists, see [[H:FORCE]]prefix:prefix,sort:'create_timestamp_desc'});divHtml=msg['starter-text'].replace('$1',mw.html.escape(sectionNameFound||sectionName).replace(/\$/g,'$$$$'));if(pageTitle){// if a section with the same name was foundvardiscussionLink=mw.util.getUrl(pageTitle)+'#'+mw.util.wikiUrlencode(sectionNameFound);divHtml+='<b><a href="'+discussionLink+'">'+msg['click-link']+'</a></b> ';divHtml+='<small><a href="'+searchLink+'">'+msg['search-link-found']+'</a></small>. ';}else{divHtml+='<a href="'+searchLink+'">'+msg['search-link-notfound']+'</a>. ';}}$('.archived-section-prompt').html(divHtml);}).catch(function(err){console.error('[find-archived-section]: ',JSON.stringify(err));});})();