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)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* MediaWiki:Gadget-topLangLinks.js */
/* https://structorica.wiki/w/MediaWiki:Gadget-topLangLinks.js */
/* */
/* Based on: https://minecraft.wiki/w/MediaWiki:Gadget-topLangLinks.js */
mw.loader
  .using([
    // Removed 'mcw.messages' dependency as it's Minecraft Wiki specific
    // 'mediawiki.api',
    "mediawiki.language",
    "mediawiki.jqueryMsg",
    "oojs-ui-widgets",
    "oojs-ui.styles.icons-editing-advanced",
  ]) /*.then( function() {
	// Load the system messages needed for the UI using `mediawiki.api`.
	// This is expensive for the server since this gadget is run on every visit.
	// To save bandwidth, we're using `mcw.messages` to pre-load them instead.

	// Alternatively, the messages can be hardcoded here before loading.
	// Here's what that looks like for English:
	mw.messages.set('vector-language-button-label', '{{PLURAL:$1|$1 language|$1 languages}}');
	mw.messages.set('otherlanguages', 'In other languages');
	mw.messages.set('pipe-separator', ' | ');

	return new mw.Api().loadMessagesIfMissing( [
		'vector-language-button-label',
		'otherlanguages',
		'pipe-separator'
	], {
		requestid: 'gadget-topLangLinks',
		smaxage: 604800,
		maxage: 604800,
	} );
} )*/
  .then(function () {
    // Forked from Minecraft Wiki: hardcoded messages for Structorica Wiki

    // Uncomment below for English localization instead:

    mw.messages.set(
      "vector-language-button-label",
      "{{PLURAL:$1|$1 language|$1 languages}}"
    );
    mw.messages.set("otherlanguages", "In other languages");
    mw.messages.set("pipe-separator", " | ");

    // Russian localization for the language selector gadget
    /*
    mw.messages.set(
      "vector-language-button-label",
      "{{PLURAL:$1|$1 язык|$1 языка|$1 языков}}"
    );
    mw.messages.set("otherlanguages", "На других языках");
    mw.messages.set("pipe-separator", " | ");
    */

    var links = $("#p-lang .interlanguage-link a.interlanguage-link-target");
    if (!links.length) return;
    var config = mw.config.get([
      "wgUserId",
      "wgUserLanguage",
      "wgContentLanguage",
    ]);
    var languages = navigator.languages.slice();
    if (config.wgUserId && config.wgUserLanguage !== config.wgContentLanguage) {
      languages.unshift(config.wgUserLanguage);
    }
    var lang = languages
      .map(function (lang) {
        return lang.split("-")[0];
      })
      .find(function (lang) {
        if (lang === config.wgContentLanguage) {
          return true;
        }
        return links.is(function () {
          return this.lang === lang;
        });
      });
    var suggestWidget;
    var popupWidget = new OO.ui.PopupButtonWidget({
      framed: false,
      flags: ["progressive"],
      icon: "translation",
      indicator: "down",
      id: "p-lang-btn",
      title: mw.msg("otherlanguages"),
      label: mw.msg(
        "vector-language-button-label",
        mw.language.convertNumber(links.length)
      ),
      popup: {
        $content: $("<ul>")
          .css({
            "list-style": "none",
            margin: "0",
          })
          .append(
            links
              .map(function () {
                var buttonWidget = new OO.ui.ButtonWidget({
                  framed: false,
                  flags: ["progressive"],
                  title: this.title,
                  label: this.text,
                  href: this.href,
                  rel: "alternate",
                  classes: ["interlanguage-link", "interwiki-" + this.lang],
                });
                buttonWidget.$element
                  .find("a")
                  .addClass("interlanguage-link-target")
                  .attr("hreflang", this.hreflang)
                  .attr("lang", this.lang)
                  .css("width", "140px");
                if (lang === this.lang) {
                  suggestWidget = buttonWidget.$element
                    .clone()
                    .attr("id", "p-lang-suggest")
                    .css("margin-right", "0");
                  suggestWidget.find("a").css("width", "");
                  var pipe = $("<span>")
                    .text(mw.msg("pipe-separator"))
                    .css("user-select", "none");
                  suggestWidget = suggestWidget.add(pipe);
                }
                return $("<li>")
                  .css("margin", "0 0 0 6px")
                  .append(buttonWidget.$element);
              })
              .get()
          ),
        anchor: false,
        width: 140,
        id: "p-lang-btn-popup",
      },
    });
    $("<div>")
      .addClass("mw-indicator")
      .attr("id", "mw-indicator-lang")
      .append(suggestWidget, popupWidget.$element)
      .prependTo(".mw-indicators");
  });