User:Taw/monobook.js

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
// Copy&paste from de
// ============================================================
// BEGIN Enable multiple onload functions

// setup onload functions this way:
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!

if (!window.aOnloadFunctions) {
  var aOnloadFunctions = new Array();
}

window.onload = function() {
  if (window.aOnloadFunctions) {
    for (var _i=0; _i<aOnloadFunctions.length; _i++) {
      aOnloadFunctions[_i]();
    }
  }
}

// Multilingual messages support

function setLang()
{
  // Set your linguistic preferences here
  var pref = ["pl", "en"];
  /***********************************************/
  // The code follows
  // index_all_lang_toggle doesn't have to be a global variable,
  // we only add new toggles inside this function
  var index_all_lang_toggle = 0;
  var divs = document.getElementsByTagName("div");
  for(var i=0; i<divs.length; i++)
  {
    var d = divs[i];
    if (d.className == "multi_lang") {
        var cn = d.childNodes;
        var available = new Array();
        for(var j=0; j<cn.length; j++)
        {
            var child = cn.item(j);
            /* In HTML it's "DIV", in XHTML it's "div".
             * For forward compatibility, both cases must be supported.
             */
            if(child.tagName == "DIV" || child.tagName == "div") {
                var clang = child.getAttribute("lang");
                if(clang)
                    available[clang] = true;
            }
        }
        /* We know what's available and we know user preferences,
         * Decide what to keep.
         *
         * If we hid anything, display a switch to show/hide other languages
         */
        var hid_something = false;
        var preferred_language;
        for(var j=0; j<pref.length; j++)
        {
            var p = pref[j];
            // A match, finally
            if(available[p])
            {
                hid_something = hide_extra_lang_divs(cn, p);
                preferred_language = p;
                break;
            }
        }
        if(hid_something)
        {
            var all_lang_toggle = document.createElement("a");
            all_lang_toggle.className = 'all_lang_toggle';
            all_lang_toggle.setAttribute('href', 'javascript:show_all_lang('+index_all_lang_toggle+',\''+preferred_language+'\')');
            all_lang_toggle.setAttribute('id', 'all_lang_toggle_' + index_all_lang_toggle);

            var all_lang_toggle_text = document.createTextNode("(show other languages)");
            all_lang_toggle.appendChild(all_lang_toggle_text);

            d.insertBefore(all_lang_toggle, d.firstChild);
            index_all_lang_toggle ++;
        }
    }
  }
}

function hide_extra_lang_divs(div_list, preferred_language)
{
    var hid_something = false;
    for(var k=0; k<div_list.length; k++)
    {
        var child = div_list.item(k);
        if(child.tagName == "DIV" || child.tagName == "div") {
            var clang = child.getAttribute("lang");
            if (clang && clang != preferred_language) {
                child.style.display = 'none';
                hid_something = true;
            }
        }
    }
    return hid_something;
}

function show_all_lang(i, preferred_language)
{
    var all_lang_toggle = document.getElementById('all_lang_toggle_' + i);
    var cn = all_lang_toggle.parentNode.childNodes;
    for(var k=0; k<cn.length; k++)
    {
        var child = cn.item(k);
        if(child.tagName == "DIV" || child.tagName == "div") {
            child.style.display = 'block';
        }
    }
    all_lang_toggle.firstChild.data = "(hide other languages)";
    all_lang_toggle.setAttribute('href', 'javascript:hide_other_lang('+i+',\''+preferred_language+'\')');
}

function hide_other_lang(i, preferred_language)
{
    var all_lang_toggle = document.getElementById('all_lang_toggle_' + i);
    hide_extra_lang_divs(all_lang_toggle.parentNode.childNodes, preferred_language);

    all_lang_toggle.firstChild.data = "(show other languages)";
    all_lang_toggle.setAttribute('href', 'javascript:show_all_lang('+i+',\''+preferred_language+'\')');
}

aOnloadFunctions[aOnloadFunctions.length] = setLang;