User:Lopullinen/Permanentlink wikicode.js

From Meta, a Wikimedia project coordination wiki

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/* 
	The tool generates a permanent-link wikicode just below the page header;
	for providing a hyperlink that edit summary needed per [[d:Q10729797|Copying within Wikipedia]]:
		[[w:en:Dragon Quest XI]] (version [[w:en:Special:PermanentLink/938554397|938554397]])
	
	You can set a homewiki by adding the following codes in your JS page:
		window.permanentlinkDefaultLanguage = 'en';
		window.permanentlinkDefaultProject = 'Wikipedia';
		window.permanentlinkStyle = ' (ver. %s)' // %s is the placeholder for the permanentLink
	Then the prefix would be omitted:
		[[:Dragon Quest XI]] (ver. [[:Special:PermanentLink/938554397|938554397]])
*/

$(function () {
  let k = mw.config.get(["wgSiteName", "wgContentLanguage", "wgPageName", "wgRevisionId", "wgCurRevisionId", "wgServerName"]);
  let prefix, lang;
  let pagename = k.wgPageName.replace(/_/g, " ");
  let oldid = mw.util.getParamValue("oldid") || k.wgRevisionId || k.wgCurRevisionId;
  let server = k.wgServerName;

  let _lang = (server.split(".")[0] == "simple" && "simple") || k.wgContentLanguage;

  let _project = k.wgSiteName;
  switch (server) {
    case "test.wikimedia.org":
      _project = "testwiki";
      break;
    case "wikisource.org":
      _project = "oldwikisource";
      break;
  }

  let homewikiLanguage = window.permanentlinkDefaultLanguage || "";
  let homewikiProject = window.permanentlinkDefaultProject || "";
  let permanentStyle = window.permanentlinkStyle || " (version %s)";

  switch (_lang) {
    case homewikiLanguage:
      lang = "";
      break;

    default:
      lang = _lang;
  }

  lang = (lang && ":" + lang) || "";

  // [[w:Help:Interwiki linking#Project titles and shortcuts]].

  switch (_project) {
    case homewikiProject:
      prefix = lang;
      break;

    case "Wikipedia":
      prefix = "w" + lang;
      break;
    case "Wiktionary":
      prefix = "wikt" + lang;
      break;
    case "Wikinews":
      prefix = "n" + lang;
      break;
    case "Wikibooks":
      prefix = "b" + lang;
      break;
    case "Wikiquote":
      prefix = "q" + lang;
      break;
    case "Wikisource":
      prefix = "s" + lang;
      break;
    case "Wikiversity":
      prefix = "v" + lang;
      break;
    case "Wikivoyage":
      prefix = "voy" + lang;
      break;

    case "Wikispecies":
      prefix = "species";
      break;
    case "Wikidata":
      prefix = "d";
      break;
    case "Wikimedia Commons":
      prefix = "c";
      break;
    case "Meta":
      prefix = "m";
      break;
    case "MediaWiki":
      prefix = "mw";
      break;
    case "Wikimedia Incubator":
      prefix = "incubator";
      break;
    case "Strategic Planning":
      prefix = "strategy";
      break;

    default:
      prefix = _project;
  }

  $("#contentSub").before(
    '<div id="citationMarkup" style="font-size :84%; line-height: 1.2em; width: auto;">' + // [[wm:XTools#ArticleInfo gadget]]-like style.
      "[[" +
      prefix +
      ":" +
      pagename +
      "]]" +
      ((oldid > 0 && permanentStyle.replace("%s", "[[" + prefix + ":Special:PermanentLink/" + oldid + "|" + oldid + "]]")) || "") +
      "</div>"
  );
});