Jump to content

User:Ahecht/sandbox/Scripts/Source links.js

From Wikipedia, the free encyclopedia
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.
/* This script adds "Source links" below "What links here" in the sidebar.
   "What links here" will include pages using a template with the link.
   "Source links" tries to search for pages where the link is in the source.
   To use the script, add the following line to Special:MyPage/common.js:
 
importScript('User:PrimeHunter/Source links.js'); // Linkback: [[User:PrimeHunter/Source links.js]]

*/

mw.loader.using(['mediawiki.util'], function () {
  var name = mw.config.get( 'wgRelevantPageName' ).replace(/_/g, " ");
  var url;
  var titleRE = (title) => ' *[' + title[0] + title.charAt(0).toLowerCase() + ']' +
    title.substring(1).replace(/[-[\]{}()*+!<=:?.\/\\^$|#\s,]/g, '\\$&').replace(/[ _]/g, '[ _]') + ' *';
  try {
      var mwTitle=new mw.Title(name);
      var title = mwTitle.title.replace(/_/g, " ");
      if (mwTitle.namespace == 10) { //template
        url = 'hastemplate:"' + name + '" ' + 'insource:"' + title + '" ' +
        'insource:/[^\\{]\\{\\{' + titleRE(title) +'[\\}\\|]/';
      } else if (mwTitle.namespace == 828) { //module
        url = 'hastemplate:"' + name + '" ' + 'insource:"' + title + '" ' +
        'insource:/[^\\{]\\{\\{ *\\#invoke *:' + titleRE(title) + '\\|/';
      } else if(mwTitle.namespace > 0) { //any other non-mainspace
        url = 'linksto:"' + name + '" ' + 'insource:"' + name + '" ' +
        'insource:/\\[\\[ *:?' + titleRE(mwTitle.getNamespacePrefix().slice(0,-1)) + 
        ':' + titleRE(title) + '[\\]\\|\\#]/';
      } else {
        url = 'linksto:"' + name + '" ' + 'insource:"' + name + '" ' +
        'insource:/\\[\\[ *:?' + titleRE(name) + '[\\]\\|\\#]/';
      }
      url = mw.util.getUrl( 'Special:Search' )  + '?trimsearch=1&profile=all&search=' +
        encodeURIComponent(url);
  } catch(e) {
      url = '#error'; // EXAMPLE URL: https://wiki.riteme.site/w/index.php?title=%F0%9F%91%A9%F0%9F%8F%BF&action=history
  }
  mw.util.addPortletLink(
    'p-tb',
    url,
    'Source links',
    'pt-sourcelinks',
    'What links here in the source',
    null,
    '#t-recentchangeslinked'
  );
});

/* The url generated above adds the parameter trimsearch=1 when "Source links" is clicked.
   If it's present then trim search results by hiding two classes for images and data. */
const queryString = window.location.search;
console.log(queryString);
const urlParams = new URLSearchParams(queryString);
const trimsearch = urlParams.get('trimsearch');
if (trimsearch === '1') {
  var searchimages = document.getElementsByClassName('searchResultImage-thumbnail');
  for (var i = 0; i < searchimages.length; i ++) {
    searchimages[i].style.display = 'none';
  }
  var searchdata = document.getElementsByClassName('mw-search-result-data');
  for (var i = 0; i < searchdata.length; i ++) {
    searchdata[i].style.display = 'none';
  }
}