User:Krinkle/commonswiki p/MediaWiki:Common.js

From translatewiki.net
Jump to: navigation, search
//<source lang="javascript">

/* Map jQuery over to $
 * Will be done by ResourceLoader later on
 * No script here is/should use prototype etc.
 */
if( typeof $ == 'undefined' ) {
 $ = jQuery;
}

// AddPortletLink for all scripts until resource loader is deployed
// Additional code by Lupo
function addPortletLink(portlet, href, text, id, tooltip, accesskey, nextnode)
{
 var target = null;
 switch (skin)
 {
 case 'standard':
 case 'cologneblue':
  $target = $('#quickbar');
  break;
 case 'nostalgia':
  $target = $('#footer');
  break;
 default:
  var root = document.getElementById(portlet);
  if(!root){ return null; }
  var node = root.getElementsByTagName('ul')[0];
  if(!node){ return null; }

  // unhide portlet if it was hidden before
  root.className = root.className.replace(/(^| )emptyPortlet( |$)/, '$2');

  var span = document.createElement('span');
  span.appendChild(document.createTextNode(text));
  var link = document.createElement('a');
  link.appendChild(span);
  link.href = href;
  var item = document.createElement('li');
  item.appendChild(link);
  if( id ){
   item.id = id;
  }
  if( accesskey ) {
   link.setAttribute('accesskey', accesskey);
   tooltip += ' [' + accesskey + ']';
  }
  if( tooltip ){
   link.setAttribute('title', tooltip);
  }

  if( accesskey && tooltip ){
   updateTooltipAccessKeys( [link] );
  }

  if (nextnode && nextnode.parentNode == node){
   node.insertBefore(item, nextnode);
  } else {
   node.appendChild(item); // IE compatibility (?)
  }
  return item;
 }
 if( !$target.length ){ return; }

 $container = $('<span/>');
 if( id ){ $container.attr('id', id); }

 $container.append('<a href="'+ href + '" title="' + tooltip + '">' + text + '</a>');

 if (skin == 'nostalgia'){
  $container.append('&#124;');
 } else {
  $target.append('<br>');
 }
 $target.append($container);
 return $container;
}


/** onload handler
 * Simple fix such that crashes in one handler don't prevent later handlers from running.
 *
 * Maintainer: [[User:Lupo]]
 */
if (typeof onloadFuncts != 'undefined'){
 // Enhanced version of jsMsg from wikibits.js. jsMsg can display only one message, subsequent
 // calls overwrite any previous message. This version appends new messages after already
 // existing ones.
 function jsMsgAppend(msg, className){
  var msg_div = document.getElementById('mw-js-message');
  var msg_log = document.getElementById('mw-js-exception-log');
  if(!msg_log) {
   msg_log = document.createElement('ul');
   msg_log.id = 'mw-js-exception-log';
   if (msg_div && msg_div.firstChild) {
    // Copy contents of msg_div into first li of msg_log
    var wrapper = msg_div.cloneNode(true);
    wrapper.id = '';
    wrapper.className = '';
    var old_stuff = document.createElement('li');
    old_stuff.appendChild(wrapper);
    msg_log.appendChild(old_stuff);
   }
  }
  var new_item = document.createElement('li');
  new_item.appendChild(msg);
  msg_log.appendChild(new_item);
  jsMsg(msg_log, className);
 }

 var Logger = {

  // Log an exception. If present, try to use a JS console (e.g., Firebug's). If no console is
  // present, or the user is a sysop, also put the error message onto the page itself.
  logException : function (ex) {
   try {
    var name = ex.name || '';
    var msg  = ex.message || '';
    var file = ex.fileName || ex.sourceURL || null; // Gecko, Webkit, others
    var line = ex.lineNumber || ex.line || null;  // Gecko, Webkit, others
    var logged = false;
    if (typeof console != 'undefined' && typeof console.log != 'undefined') {
     // Firebug, Firebug Lite, or browser-native or other JS console present. At the very
     // least, these will allow us to print a simple string.
     var txt = name + ': ' + msg;
     if (file) {
      txt = txt + '; ' + file;
      if (line){ txt = txt + ' (' + line + ')'; }
     }
     if (typeof console.error != 'undefined') {
      if (  console.firebug
        || ( console.provider && console.provider.indexOf && console.provider.indexOf('Firebug') >= 0 )
        )
      {
       console.error(txt + " %o", ex); // Use Firebug's object dump to write the exception
      } else {
       console.error(txt);
      }
     } else {
      console.log(txt);
     }
     logged = true;
    }
    if (!logged || wgUserGroups.join(' ').indexOf('sysop') >= 0) {
     if (name.length === 0 && msg.length === 0 && !file) {
      return; // Don't log if there's no info
     }
     if (name.length === 0){
      name = 'Unknown error';
     }
     // Also put it onto the page for sysops.
     var log  = document.createElement('span');
     if (msg.indexOf('\n') >= 0) {
      var tmp = document.createElement('span');
      msg = msg.split('\n');
      for (var i = 0; i < msg.length; i++) {
       tmp.appendChild(document.createTextNode(msg[i]));
       if (i+1 < msg.length){
        tmp.appendChild(document.createElement('br'));
       }
      }
      log.appendChild(document.createTextNode(name + ': '));
      log.appendChild(tmp);
     } else {
      log.appendChild(document.createTextNode(name + ': ' + msg));
     }
     if (file) {
      log.appendChild(document.createElement('br'));
      var a = document.createElement('a');
      a.href = file;
      a.appendChild(document.createTextNode(file));
      log.appendChild(a);
      if (line){
       log.appendChild(document.createTextNode(' (' + line + ')'));
      }
     }
     jsMsgAppend(log, 'error');
    }
   } catch (anything) {
    // Swallow
   }
  }
 }; // end Logger

 // Wrap a function with an exception handler and exception logging.
 function makeSafe(f) {
  return function() {
   try {
    return f.apply(this, arguments);
   } catch (ex) {
    Logger.logException(ex);
    return null;
   }
  };
 }

 // Wrap the already registered onload hooks
 for (var i = 0; i < onloadFuncts.length; i++){
  onloadFuncts[i] = makeSafe(onloadFuncts[i]);
 }

 // Redefine addOnloadHook to catch future additions
 function addOnloadHook(hookFunct) {
  // Allows add-on scripts to add onload functions
  if (!doneOnloadHook) {
   onloadFuncts[onloadFuncts.length] = makeSafe(hookFunct);
  } else {
   makeSafe(hookFunct)();  // bug in MSIE script loading
  }
 }
} // end onload hook improvements


/**
 * JSconfig
 *
 * Global configuration options to enable/disable and configure
 * specific script features from [[MediaWiki:Common.js]] and [[MediaWiki:Monobook.js]]
 * This framework adds config options (saved as cookies) to [[Special:Preferences]]
 * For a more permanent change you can override the default settings in your
 * [[Special:Mypage/monobook.js]]
 * for Example: JSconfig.keys[loadAutoInformationTemplate] = false;
 *
 * Maintainer: [[User:Dschwen]]
 */
var JSconfig =
{
 prefix : 'jsconfig_',
 keys : {},
 meta : {},

 // Register a new configuration item
 //  * name      : String, internal name
 //  * default_value : String or Boolean (type determines configuration widget)
 //  * description  : String, text appearing next to the widget in the preferences, or an hash-object
 //           containing translations of the description indexed by the language code
 //  * prefpage    : Integer (optional), section in the preferences to insert the widget:
 //           0 : User profile     User profile
 //           1 : Skin         Appearance
 //           2 : Math         Date and Time
 //           3 : Files         Editing
 //           4 : Date and time     Recent Changes
 //           5 : Editing        Watchlist
 //           6 : Recent changes    Search Options
 //           7 : Watchlist       Misc
 //           8 : Search        Gadgets
 //           9 : Misc
 //
 // Access keys through JSconfig.keys[name]

 registerKey : function( name, default_value, description, prefpage )
 {
 if( typeof JSconfig.keys[name] == 'undefined' ){
  JSconfig.keys[name] = default_value;
 } else {
  // all cookies are read as strings,
  // convert to the type of the default value
  switch( typeof default_value )
  {
  case 'boolean' : JSconfig.keys[name] = (JSconfig.keys[name] == 'true'); break;
  case 'number'  : JSconfig.keys[name] = JSconfig.keys[name]/1; break;
  }
 }

 JSconfig.meta[name] = {
  'description' : description[wgUserLanguage] || description.en || (typeof description == 'string' && description) ||
  '<i>en</i> translation missing',
  'page' : prefpage || 0,
  'default_value' : default_value
 };

 // if called after setUpForm(), we'll have to add an extra input field
 if( JSconfig.prefsTabs ){
  JSconfig.addPrefsInput(name);
 }
 },

 readCookies : function()
 {
 var cookies = document.cookie.split('; ');
 var p =JSconfig.prefix.length;
 var i;

 for( var key=0; cookies && key < cookies.length; key++ )
 {
  if( cookies[key].substring(0,p) == JSconfig.prefix ){
   i = cookies[key].indexOf('=');
   //alert( cookies[key] + ',' + key + ',' + cookies[key].substring(p,i) );
   JSconfig.keys[cookies[key].substring(p,i)] = cookies[key].substring(i+1);
  }
 }
 },

 writeCookies : function()
 {
  var expdate = new Date();
  expdate.setTime(expdate.getTime()+1000*60*60*24*3650); // expires in 3560 days
  for( var key in JSconfig.keys ){
   document.cookie = JSconfig.prefix + key + '=' + JSconfig.keys[key] + '; path=/; expires=' + expdate.toUTCString();
  }
 },

 evaluateForm : function()
 {
 var w_ctrl,wt;
 //alert('about to save JSconfig');
 for( var key in JSconfig.meta ) {
  w_ctrl = document.getElementById( JSconfig.prefix + key );
  if(w_ctrl){
   wt = typeof JSconfig.meta[key].default_value;
   switch( wt ) {
    case 'boolean' : JSconfig.keys[key] = w_ctrl.checked; break;
    case 'string' : JSconfig.keys[key] = w_ctrl.value; break;
   }
  }
 }

 JSconfig.writeCookies();
 return true;
 },

 prefsTabs : false,

 setUpForm : function()
 {
 var prefChild = document.getElementById('preferences');
 if( !prefChild ){
  return;
 }
 prefChild = prefChild.childNodes;

 //
 // make a list of all preferences sections
 //
 var tabs = [];
 var len = prefChild.length;
 for( var key = 0; key < len; key++ ) {
  if( prefChild[key].tagName && prefChild[key].tagName.toLowerCase() == 'fieldset' ){
   tabs.push(prefChild[key]);
  }
 }
 JSconfig.prefsTabs = tabs;

 //
 // Create Widgets for all registered config keys
 //
 for( var wkey in JSconfig.meta ){
  JSconfig.addPrefsInput(wkey);
 }

 addEvent(document.getElementById('preferences').parentNode, 'submit', JSconfig.evaluateForm);
 },

 addPrefsInput : function(key){
 var w_div = document.createElement( 'DIV' );

 var w_label = document.createElement( 'LABEL' );
 var wt = typeof JSconfig.meta[key].default_value;
 switch ( wt ) {
  case 'boolean':
   JSconfig.meta[key].description = ' ' + JSconfig.meta[key].description;
   break;
  default: //case 'string': 
   JSconfig.meta[key].description += ': ';
   break;
 }
 w_label.appendChild( document.createTextNode( JSconfig.meta[key].description ) );
 w_label.htmlFor = JSconfig.prefix + key;

 var w_ctrl = document.createElement( 'INPUT' );
 w_ctrl.id = JSconfig.prefix + key;

 // before insertion into the DOM tree
 switch( wt ){
  case 'boolean':
   w_ctrl.type = 'checkbox';
   w_div.appendChild( w_ctrl );
   w_div.appendChild( w_label );
   break;
  default: //case 'string': 
   w_ctrl.type = 'text';
   w_div.appendChild( w_label );
   w_div.appendChild( w_ctrl );
   break;
 }

 JSconfig.prefsTabs[JSconfig.meta[key].page].appendChild( w_div );

 // after insertion into the DOM tree
 switch( wt ) {
  case 'boolean' : w_ctrl.defaultChecked = w_ctrl.checked = JSconfig.keys[key]; break;
  case 'string' : w_ctrl.defaultValue = w_ctrl.value = JSconfig.keys[key]; break;
 }
 }
};

JSconfig.readCookies();
if( wgNamespaceNumber == -1 && wgCanonicalSpecialPageName == 'Preferences' ) {
 $(document).ready(JSconfig.setUpForm);
}

// Escape all RegExp special characters such that the result can be safely used
// in a RegExp as a literal.
if ( typeof String.prototype.escapeRE === 'undefined' ) {
    String.prototype.escapeRE = function() {
        return this.replace(/([\\{}()|.?*+^$\[\]])/g, "\\$1");
    };
}
/** extract a URL parameter from the current URL **********
 * From [[en:User:Lupin/autoedit.js]]
 *
 * paramName : the name of the parameter to extract
 * url    : optional URL to extract the parameter from, document.location.href if not given.
 *
 * Local Maintainer: [[User:Dschwen]], [[User:Lupo]], [[User:Krinkle]]
 */
function getParamValue( paramName, url)
{
 url = url ? url : document.location.href;
 // Get last match, stop at hash
 var re = new RegExp( '[^#]*[&?]' + paramName.escapeRE() + '=([^&#]*)' );
 var m = re.exec( url );
 if ( m && m.length > 1 ) {
 return decodeURIComponent( m[1] );
 }
 return null;
}


/** &withJS= URL parameter *******
 * Allow to try custom scripts on the MediaWiki namespace without
 * editing [[Special:Mypage/monobook.js]]
 *
 * Maintainer: [[User:Platonides]], [[User:Lupo]]
 */
var extraJS = getParamValue('withJS');
// Leave here for backwards compatibility
(function(extraJS) {
 if (!extraJS){
  return;
 }
 if (extraJS.match("^MediaWiki:[^&<>=%#]*\.js$")){
  // Disallow some characters in file name
  importScript(extraJS);
 } else {
 // Dont use alert but the jsMsg system. Run jsMsg only once the DOM is ready.
 $(document).ready(function() {
  jsMsgAppend(document.createTextNode(extraJS + ' javascript not allowed to be loaded.'), 'error');
 });
 }
})(extraJS);


/** Attach (or remove) an Event to a specific object
 *
 * Cross-browser event attachment (John Resig)
 * http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
 *
 * obj : DOM tree object to attach the event to
 * type : String, event type ('click', 'mouseover', 'submit', etc.)
 * fn : Function to be called when the event is triggered (the ''this''
 *    keyword points to ''obj'' inside ''fn'' when the event is triggered)
 *
 * Local Maintainer: [[User:Dschwen]]
 */
function addEvent(obj, type, fn)
 {
  if (obj.addEventListener) {
   obj.addEventListener(type, fn, false);
  } else if (obj.attachEvent) {
    obj['e' + type + fn] = fn;
    obj[type + fn] = function() {
      obj['e' + type + fn](window.event);
    };
    obj.attachEvent('on' + type, obj[type + fn]);
  }
}
function removeEvent(obj, type, fn)
 {
  if (obj.removeEventListener) {
   obj.removeEventListener(type, fn, false);
  } else if (obj.detachEvent) {
    obj.detachEvent('on' + type, obj[type + fn]);
    obj[type + fn] = null;
    obj['e' + type + fn] = null;
  }
}


/**
 * Edittools
 *
 * Formatting buttons for special characters below the edit field
 * Also enables these buttons on any textarea or input field on the page.
 *
 * Maintainer: [[User:Lupo]], [[User:DieBuche]]
 */
if (wgAction=='edit' || wgAction=='submit' || wgNamespaceNumber == -1){
 importScript('MediaWiki:Edittools.js');
 //Avoid loading a rather long function for all users
 if (typeof $.fn.textSelection == 'undefined'){
  importScript('MediaWiki:Edittools-legacy.js');
 }
}


// Collapsible tables
importScript('MediaWiki:CollapsibleTemplates.js');

/**
 * ImageAnnotator
 * Globally enabled per
 * http://commons.wikimedia.org/?title=Commons:Village_pump&oldid=26818359#New_interface_feature
 * Maintainer: [[User:Lupo]]
 */
if( wgNamespaceNumber != -1 && wgAction && (wgAction == 'view' || wgAction == 'purge')) {
 // Not on Special pages, and only if viewing the page
 if( typeof ImageAnnotator_disable == 'undefined' || !ImageAnnotator_disable ){
  // Don't even import it if it's disabled.
  importScript('MediaWiki:Gadget-ImageAnnotator.js');
 }
}


/**
 * Special:Upload enhancements
 *
 * Moved to [[MediaWiki:Upload.js]]
 *
 * Maintainer: [[User:Lupo]]
 */
JSconfig.registerKey('UploadForm_loadform', true,
 {
 'bg': 'Използване на логиката на новия формуляр за качвания',
 'en': 'Use new upload form logic', // default
 'mk': 'Искористете ја логиката на новиот образец за подигнување',
 'ml': 'പുതിയ ആശയമനുസരിച്ചുള്ള അപ്‌ലോഡ് ഫോം ഉപയോഗിക്കുക',
 'ru': 'Использовать новую логику формы загрузки',
 'pt': 'Usar a nova lógica do formulário de carregamento',
 'pt-br': 'Usar a nova lógica do formulário de carregamento'
 }, 3);

JSconfig.registerKey('UploadForm_newlayout', true,
 {
 'bg': 'Използване на облика на новия формуляр за качвания',
 'en': 'Use new upload form layout', // default
 'mk': 'Искористете го рувото на новиот образец за подигнување',
 'ml': 'പുതിയ രൂപരേഖയിലുള്ള അപ്‌ലോഡ് ഫോം ഉപയോഗിക്കുക',
 'ru': 'Использовать новый интерфейс формы загрузки',
 'pt': 'Usar a nova aparência do formulário de carregamento',
 'pt-br': 'Usar a nova aparência do formulário de carregamento'
 }, 3);

function enableNewUploadForm() {
 var match = navigator.userAgent.match(/AppleWebKit\/(\d+)/);
 if (match) {
  var webKitVersion = parseInt(match[1]);
  if (webKitVersion < 420){ 
   return; // Safari 2 crashes hard with the new upload form...
  }
 }
 var isNlWLM = (document.URL.indexOf('uselang=nlwikilovesmonuments') >= 0);

 // honor JSConfig user settings
 if( !isNlWLM && !JSconfig.keys['UploadForm_loadform'] ){
  return;
 }

 importScript( 'MediaWiki:UploadForm.js' );
 // Load additional enhancements for a special upload form (request by User:Multichill)
 if ( isNlWLM ) {
  importScript('MediaWiki:UploadFormNlWikiLovesMonuments.js');
 }
}

if (wgPageName == 'Special:Upload') {
 importScript( 'MediaWiki:Upload.js' );
 // (Un)comment the following line (the call to enableNewUploadForm) to globally enable/disable
 // new upload form. Leave the line *above* (the include of MediaWiki:Upload.js) untouched;
 // that script provides useful default behavior if the new upload form is disabled or
 // redirects to the old form in case an error occurs.
 enableNewUploadForm();
}


/**
 * QICSigs
 *
 * Fix for the broken signatures in gallery tags
 * Helper script to make voting on QIC easier
 * needed for [[COM:QIC]]
 *
 * Maintainers: [[User:Dschwen]]
 */
if (wgPageName == 'Commons:Quality_images_candidates/candidate_list' && wgAction == 'edit') {
 importScript( 'MediaWiki:QICSigs.js' );
 importScript( 'MediaWiki:QIvoter.js' );
}


/**
 * VICValidate
 *
 * Some basic form validation for creating new Valued image nominations
 * needed for [[COM:VIC]]
 *
 * Maintainers: [[User:Dschwen]]
 */
if( wgPageName == 'Commons:Valued_image_candidates' && wgAction == 'view' )
{
 importScript( 'MediaWiki:VICValidate.js' );
}


/**
 * subPagesLink
 *
 * Adds a link to subpages of current page
 *
 * Maintainers: [[:he:משתמש:ערן]], [[User:Dschwen]]
 *
 * JSconfig items: bool JSconfig.subPagesLink(true=enabled (default), false=disabled)
 */
var subPagesLink =
{
 //
 // Translations of the menu item
 //
 i18n :
 {
 'bg': 'Подстраници',
 'ca': 'Subpàgines',
 'cs': 'Podstránky',
 'de': 'Unterseiten',
 'en': 'Subpages',   // default
 'et': 'Alamlehed',
 'eo': 'Subpaĝoj',
 'eu': 'Azpiorrialdeak',
 'es': 'Subpáginas',
 'fi': 'Alasivut',
 'fr': 'Sous-pages',
 'gl': 'Subpáxinas',
 'he': 'דפי משנה',
 'hr': 'Podstranice',
 'it': 'Sottopagine',
 'is': 'Undirsíður',
 'ko': '하위 문서 목록',
 'mk': 'Потстраници',
 'ml': 'ഉപതാളുകൾ',
 'nl': "Subpagina's",
 'no': 'Undersider',
 'pl': 'Podstrony',
 'pt': 'Subpáginas',
 'pt-br': 'Subpáginas',
 'ru': 'Подстраницы'
 },

 install: function()
 {
 // honor user configuration
 if( !JSconfig.keys['subPagesLink'] ){
  return;
 }

 if ( document.getElementById('t-whatlinkshere')
    && wgNamespaceNumber != -1 // Special:
    && wgNamespaceNumber != 6 // Image:
    && wgNamespaceNumber != 14 // Category:
   )
 {
  var subpagesText = subPagesLink.i18n[wgUserLanguage] || subPagesLink.i18n.en;
  var subpagesLink = wgArticlePath.replace('$1','Special:Prefixindex/' + wgPageName +'/');

  addPortletLink( 'p-tb', subpagesLink, subpagesText, 't-subpages' );
 }
 }
};
JSconfig.registerKey('subPagesLink', true,
 {
 'bg': 'Показване на връзката Подстраници в менюто с инструменти',
 'cs': 'Zobrazovat v panelu nástrojů odkaz Podstránky',
 'en': 'Show a Subpages link in the toolbox', // default
 'mk': 'Покажи врска до потстраниците во алатникот',
 'ml': 'പണിസഞ്ചിയിൽ ഉപതാളുകൾക്കുള്ള കണ്ണി പ്രദർശിപ്പിക്കുക',
 'pl': 'Pokaż w panelu bocznym link do podstron',
 'pt': 'Exibir um link para as subpáginas no menu de ferramentas',
 'pt-br': 'Exibir um link para as subpáginas no menu de ferramentas',
 'ru': 'Показывать ссылку на подстраницы в меню инструментов'
 }, 7);
$(document).ready(subPagesLink.install);


/**
 * gallery_dshuf_prepare
 *
 * prepare galleries which are surrounded by <div class='dshuf'></div>
 * for shuffling with dshuf (see below).
 *
 * Maintainers: [[User:Dschwen]]
 ****/
function gallery_dshuf_prepare()
{
 var tables = document.getElementsByTagName('table');
 var divsorig, divs, newdiv, parent, j, i;

 for ( i = 0; i < tables.length; i++) {
  if ( tables[i].className == 'gallery' && tables[i].parentNode.className == 'dshuf' )
  {
   divsorig = tables[i].getElementsByTagName( 'div' );
   divs = [];
   for ( j = 0; j < divsorig.length; j++){
    divs.push(divsorig[j]);
   }
   for ( j = 0; j < divs.length; j++) {
    if ( divs[j].className == 'gallerybox' )
    {
     newdiv = document.createElement( 'DIV' );
     newdiv.className = 'dshuf dshufset' + i;
     while( divs[j].childNodes.length > 0 )
     newdiv.appendChild( divs[j].removeChild(divs[j].firstChild) );
     divs[j].appendChild( newdiv );
    }
   }
  }
 }
}
$(document).ready(gallery_dshuf_prepare);

/**
 * dshuf
 *
 * shuffles div elements with the class dshuf and
 * common class dshufsetX (X being an integer)
 * taken from http://commons.wikimedia.org/w/index.php?title=MediaWiki:Common.js&oldid=7380543
 *
 * Maintainers: [[User:Gmaxwell]], [[User:Dschwen]]
 */
function dshuf(){
 var shufsets = {};
 var rx = new RegExp('dshuf'+'\\s+(dshufset\\d+)', 'i');
 var divs = document.getElementsByTagName('div');
 var i = divs.length;
 while( i-- )
 {
 if( rx.test(divs[i].className) )
 {
  if ( typeof shufsets[RegExp.$1] == 'undefined' )
  {
  shufsets[RegExp.$1] = {};
  shufsets[RegExp.$1].inner = [];
  shufsets[RegExp.$1].member = [];
  }
  shufsets[RegExp.$1].inner.push( { key:Math.random(), html:divs[i].innerHTML } );
  shufsets[RegExp.$1].member.push(divs[i]);
 }
 }

 for( shufset in shufsets )
 {
 shufsets[shufset].inner.sort( function(a,b) { return a.key - b.key; } );
 i = shufsets[shufset].member.length;
 while( i-- )
 {
  shufsets[shufset].member[i].innerHTML = shufsets[shufset].inner[i].html;
  shufsets[shufset].member[i].style.display = 'block';
 }
 }
}
$(document).ready(dshuf);


/**
 * SVG images: adds links to rendered PNG images in different resolutions
 *
 * Maintainer(s): ???
 */
//Adds a dismissable notice to Special:Watchlist
//Useful to use instead of the sitenotice for messages only
//relevant to registered users.
if( wgCanonicalSpecialPageName == 'Watchlist' ){
 importScript('MediaWiki:WatchlistNotice.js');
}


/**
 * localizeSignature: localizes the signature on Commons with the string in the user's preferred language
 *
 * Maintainer: [[User:Slomox]]
 */
function localizeSignature(){
 var talkTextLocalization = { ca: 'Discussió', cs: 'diskuse', de: 'Diskussion', fr: 'd', nds: 'Diskuschoon' };
 var talkText = talkTextLocalization[wgUserLanguage];
 if (!talkText){
  return;
 }
 $('span.signature-talk').text(talkText);
}
$(document).ready(localizeSignature);


/**
 * Add 'Nominate for Deletion' to toolbar ([[MediaWiki:AjaxQuickDelete.js]])
 *
 * Maintainer: [[User:DieBuche]]
 */
importScript('MediaWiki:AjaxQuickDelete.js');


/**
 * Import usergroup-specific stylesheet, only for admins atm
 *
 * Maintainer: ???
 */
for( var key=0; wgUserGroups && key < wgUserGroups.length; key++ )
{
 if (wgUserGroups[key] =='sysop'){
  importStylesheet('MediaWiki:Admin.css');
 } else if (wgUserGroups[key] =='filemover') {
  importStylesheet('MediaWiki:Filemover.css');
 }
}

// Ajax Translation of /lang links, see [[MediaWiki:AjaxTranslation.js]]
// Maintainer: [[User:ערן]], [[User:DieBuche]]
importScript('MediaWiki:AjaxTranslation.js');

/**
 * SVG images: adds links to rendered PNG images in different resolutions
 *
 * Maintainer: ???
 */
function SVGThumbs()
{
 var file = document.getElementById('file'); // might fail if MediaWiki can't render the SVG
 if (file && wgIsArticle && wgTitle.match(/\.svg$/i))
 {
 var thumbu = file.getElementsByTagName('IMG')[0].src;
 if(!thumbu){
  return;
 }

 function svgAltSize( w, title){
  var path = thumbu.replace(/\/\d+(px-[^\/]+$)/, '/' + w + '$1');
  var a = document.createElement('A');
  a.setAttribute('href', path);
  a.appendChild(document.createTextNode(title));
  return a;
 }

 var p = document.createElement('p');
 p.className = 'SVGThumbs';

 var i18n = {
  en : 'This image rendered as PNG in other sizes: ',
  de : 'Dieses Bild im PNG-Format in folgenden Größen: ',
  cs : 'Tento obrázek jako PNG v jiné velikosti: ',
  ml : 'ഈ ചിത്രം PNG ആയി ലഭ്യമാകുന്ന മറ്റ് വലിപ്പങ്ങൾ: '
 };
 ptext = i18n[wgUserLanguage] || i18n.en;

 p.appendChild(document.createTextNode(ptext));
 var l = [200, 500, 1000, 2000];
 for( var i = 0; i < l.length; i++ )
 {
  p.appendChild(svgAltSize( l[i], l[i] + 'px'));
  if( i < l.length-1 ){
   p.appendChild(document.createTextNode(', '));
  }
 }
 p.appendChild(document.createTextNode('.'));
 var info = getElementsByClassName( file.parentNode, 'div', 'fullMedia' )[0];
 if( info ){
  info.appendChild(p);
 }
 }
}
$(document).ready(SVGThumbs);


//Language & skin specific JavaScript and CSS.
importScript('MediaWiki:Common.js/' + wgUserLanguage);
importStylesheet('MediaWiki:' + skin + '.css/' + wgUserLanguage);

//Automatic language selection using javascript
importScript('MediaWiki:Multilingual description.js');


/**
 * Helper function to normalize date used by script (e.g. Flickrreview script)
 *
 * Maintainer: ???
 */
function getISODate()
{ // UTC
 var date = new Date();
 var dd = date.getUTCDate();
 if (dd < 10) { dd = '0'+ dd.toString(); }
 var mm = date.getUTCMonth()+1;
 if (mm < 10) { mm = '0'+ mm.toString(); }
 var YYYY = date.getUTCFullYear();
 var ISOdate = YYYY + '-' + mm + '-' + dd;
 return ISOdate;
}


// Sitenotice translation for all skins
$( function() {
 if ( wgUserLanguage !== 'en' ) {
 $('#siteNotice p').load( wgServer + wgScript + '?title=MediaWiki:Sitenotice-translation&action=render&uselang='
  + wgUserLanguage + ' p');
 }
});


// Hide title on all main pages and change the 'Gallery' tab text to 'Main page' (or equivalent
// in user's language) on all main pages and their talk pages
if (wgNamespaceNumber === 0 || wgNamespaceNumber == 1) {
  importScript('MediaWiki:MainPages.js');
}


/**
 * Change target of add-section links
 * See Template:ChangeSectionLink
 *
 * Maintainer: ???
 */
$(document).ready(function(){
 var changeAddSection = document.getElementById('jsChangeAddSection');
 if (changeAddSection)
 {
 var addSection = document.getElementById('ca-addsection');
 if (addSection)
 {
  addSection.firstChild.setAttribute('href', wgScript +
  '?action=edit&section=new&title=' + encodeURIComponent(
  changeAddSection.getAttribute('title')));
 }
 }
});


/**
 * Add links to GlobalUsage and the CommonsDelinker log to file deletion log entries.
 *
 * Maintainer: [[User:Ilmari Karonen]]
 */
$(document).ready(function(){
 // guard against multiple inclusion
 if (window.commonsDelinkerLogLinksAdded){
  return;
 }
 window.commonsDelinkerLogLinksAdded = true;

 var content = document.getElementById('bodyContent') ||    // monobook & vector skins
        document.getElementById('mw_contentholder') ||  // modern skin
        document.getElementById('article');       // classic skins
 if (!content){
  return;
 }

 var deletions = getElementsByClassName(content, 'li', 'mw-logline-delete');
 if (!deletions || !deletions.length){
  return;
 }

 // create the links in advance so we can cloneNode() them quickly in the loop
 var guLink = document.createElement('a');
 guLink.className = 'delinker-log-globalusage';
 guLink.appendChild(document.createTextNode('global usage'));

 var cdLink = document.createElement('a');
 cdLink.className = 'delinker-log-link extiw';
 cdLink.appendChild(document.createTextNode('delinker log'));

 var span = document.createElement('span');
 span.className = 'delinker-log-links';
 span.appendChild(document.createTextNode(' ('));
 span.appendChild(guLink);
 span.appendChild(document.createTextNode('; '));
 span.appendChild(cdLink);
 span.appendChild(document.createTextNode(')'));

 for (var i = 0; i < deletions.length; i++)
 {
 var match = null;
 for (var elem = deletions[i].firstChild; elem; elem = elem.nextSibling)
 {
  if (!elem.tagName || elem.tagName.toLowerCase() != 'a'){
   continue;
  }
  if (/mw-userlink/.test(elem.className)){
   continue;
  }
  match = /^File:(.*)/.exec(getInnerText(elem));
  if (match){
   break;
  }
 }
 if (match)
 {
  var filename = encodeURIComponent(match[1].replace(/ /g, '_'));
  guLink.href = wgScript + '?title=Special:GlobalUsage&target=' + filename;
  guLink.title = 'Current usage of ' + match[1] + ' on all Wikimedia projects';
  cdLink.href = 'http://toolserver.org/~delinker/index.php?image=' + filename;
  cdLink.title = 'CommonsDelinker log for ' + match[1];
  deletions[i].appendChild(span.cloneNode(true));
 }
 }
});

/*
 * Description: Stay on the secure server as much as possible
 * Maintainers: [[User:TheDJ]]
 */
if( wgServer == 'https://secure.wikimedia.org' ) {
 importScript( 'MediaWiki:Common.js/secure.js');
}

// Workaround for [[bugzilla:708]] via [[Template:InterProject]]
importScript('MediaWiki:InterProject.js');

//Extra interface tabs for (external) tools such as check usage
//This should add the possibility to opt-out via gadgets
//the 'remove image tools' gadget will set load_extratabs to false,
//so this won't load. If that's undefined, assume opt-in
if(typeof load_extratabs == 'undefined'){
 importScript('MediaWiki:Extra-tabs.js');
}

//Add a CSS validator to promote correct syntax
if (wgTitle.match(/\.css$/i) && (wgNamespaceNumber == 2 || wgNamespaceNumber == 8)){
 importScript('MediaWiki:Gadget-CSSValidate.js');
}

//Allow to move certain gadgets to other preference pages
//See {{Gadget-desc}} for documentation
if ( wgPageName === 'Special:Preferences' ) {
 $(document).ready(function () {
 $('[class*=prefsMoveToSection]').each(function () {
  var destination = $(this).attr('className').split('-').pop();
  var sheet = $('#prefsection-' + destination);
  var br = $(this).parent().next();
  sheet.append($(this).parent().prev());
  sheet.append($(this).parent()[0].previousSibling);
  sheet.append($(this).parent());
  sheet.append(br);
 });
 });
}


/**
 * {{tl|LargeImage}} linkswap
 *
 * Swaps the 'full resolution' link with the 'interactive zoomviewer' links for large images.
 * Avoids people crashing their browser by accidentally attempting to view a 200MP image
 *
 * Maintainer: [[User:Dschwen]]
 */
if( wgAction == 'view' &&  wgNamespaceNumber == 6 )
{
 $(document).ready(function(){
  var $viewerLinks = $('#LargeImage_viewer_links'),
    $fullResLink = $('#file>a[href^="http://upload.wikimedia.org/wikipedia/commons/"]:not(:has(img))'),
    copy_to = fullResLink.clone(true),
    copy_from = viewerLinks.clone(true);
  $fullResLink.replaceWith(copy_from);
  $viewerLinks.replaceWith(copy_to);
 });
}

//Update from http://toolserver.org/~krinkle/wpAvailableLanguages.js.php - Last update: Mon, 03 Jan 2011 23:07:04 +0000
window.wpAvailableLanguages={"aa":"Qaf\u00e1r af","ab":"\u0410\u04a7\u0441\u0443\u0430","ace":"Ac\u00e8h","af":"Afrikaans","ak":"Akan","aln":"Geg\u00eb","als":"Alemannisch","am":"\u12a0\u121b\u122d\u129b","an":"Aragon\u00e9s","ang":"\u00c6nglisc","ar":"\u0627\u0644\u0639\u0631\u0628\u064a\u0629","arc":"\u0710\u072a\u0721\u071d\u0710","arn":"Mapudungun","ary":"Ma\u0121ribi","arz":"\u0645\u0635\u0631\u0649","as":"\u0985\u09b8\u09ae\u09c0\u09af\u09bc\u09be","ast":"Asturianu","av":"\u0410\u0432\u0430\u0440","avk":"Kotava","ay":"Aymar aru","az":"Az\u0259rbaycanca","ba":"\u0411\u0430\u0448\u04a1\u043e\u0440\u0442","bar":"Boarisch","bat-smg":"\u017demait\u0117\u0161ka","bcc":"\u0628\u0644\u0648\u0686\u06cc \u0645\u06a9\u0631\u0627\u0646\u06cc","bcl":"Bikol Central","be":"\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f","be-tarask":"\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f (\u0442\u0430\u0440\u0430\u0448\u043a\u0435\u0432\u0456\u0446\u0430)","be-x-old":"\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f (\u0442\u0430\u0440\u0430\u0448\u043a\u0435\u0432\u0456\u0446\u0430)","bg":"\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438","bh":"\u092d\u094b\u091c\u092a\u0941\u0930\u0940","bi":"Bislama","bjn":"Bahasa Banjar","bm":"Bamanankan","bn":"\u09ac\u09be\u0982\u09b2\u09be","bo":"\u0f56\u0f7c\u0f51\u0f0b\u0f61\u0f72\u0f42","bpy":"\u0987\u09ae\u09be\u09b0 \u09a0\u09be\u09b0\/\u09ac\u09bf\u09b7\u09cd\u09a3\u09c1\u09aa\u09cd\u09b0\u09bf\u09af\u09bc\u09be \u09ae\u09a3\u09bf\u09aa\u09c1\u09b0\u09c0","bqi":"\u0628\u062e\u062a\u064a\u0627\u0631\u064a","br":"Brezhoneg","bs":"Bosanski","bug":"\u1a05\u1a14 \u1a15\u1a18\u1a01\u1a17","bxr":"\u0411\u0443\u0440\u044f\u0430\u0434","ca":"Catal\u00e0","cbk-zam":"Chavacano de Zamboanga","cdo":"M\u00ecng-d\u0115\u0324ng-ng\u1e73\u0304","ce":"\u041d\u043e\u0445\u0447\u0438\u0439\u043d","ceb":"Cebuano","ch":"Chamoru","cho":"Choctaw","chr":"\u13e3\u13b3\u13a9","chy":"Tsets\u00eahest\u00e2hese","ckb":"Soran\u00ee \/ \u06a9\u0648\u0631\u062f\u06cc","ckb-latn":"\u202aSoran\u00ee (lat\u00een\u00ee)\u202c","ckb-arab":"\u202b\u06a9\u0648\u0631\u062f\u06cc (\u0639\u06d5\u0631\u06d5\u0628\u06cc)\u202c","co":"Corsu","cps":"Capice\u00f1o","cr":"N\u0113hiyaw\u0113win \/ \u14c0\u1426\u1403\u152d\u140d\u140f\u1423","crh":"Q\u0131r\u0131mtatarca","crh-latn":"\u202aQ\u0131r\u0131mtatarca (Latin)\u202c","crh-cyrl":"\u202a\u041a\u044a\u044b\u0440\u044b\u043c\u0442\u0430\u0442\u0430\u0440\u0434\u0436\u0430 (\u041a\u0438\u0440\u0438\u043b\u043b)\u202c","cs":"\u010cesky","csb":"Kasz\u00ebbsczi","cu":"\u0421\u043b\u043e\u0432\u0463\u0301\u043d\u044c\u0441\u043a\u044a \/ \u2c14\u2c0e\u2c11\u2c02\u2c21\u2c10\u2c20\u2c14\u2c0d\u2c1f","cv":"\u0427\u04d1\u0432\u0430\u0448\u043b\u0430","cy":"Cymraeg","da":"Dansk","de":"Deutsch","de-at":"\u00d6sterreichisches Deutsch","de-ch":"Schweizer Hochdeutsch","de-formal":"Deutsch (Sie-Form)","diq":"Zazaki","dsb":"Dolnoserbski","dv":"\u078b\u07a8\u0788\u07ac\u0780\u07a8\u0784\u07a6\u0790\u07b0","dz":"\u0f47\u0f7c\u0f44\u0f0b\u0f41","ee":"E\u028begbe","el":"\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac","eml":"Emili\u00e0n e rumagn\u00f2l","en":"English","en-gb":"British English","eo":"Esperanto","es":"Espa\u00f1ol","et":"Eesti","eu":"Euskara","ext":"Estreme\u00f1u","fa":"\u0641\u0627\u0631\u0633\u06cc","ff":"Fulfulde","fi":"Suomi","fiu-vro":"V\u00f5ro","fj":"Na Vosa Vakaviti","fo":"F\u00f8royskt","fr":"Fran\u00e7ais","frc":"Fran\u00e7ais cadien","frp":"Arpetan","frr":"Nordfriisk","fur":"Furlan","fy":"Frysk","ga":"Gaeilge","gag":"Gagauz","gan":"\u8d1b\u8a9e","gan-hans":"\u8d63\u8bed(\u7b80\u4f53)","gan-hant":"\u8d1b\u8a9e(\u7e41\u9ad4)","gd":"G\u00e0idhlig","gl":"Galego","glk":"\u06af\u06cc\u0644\u06a9\u06cc","gn":"Ava\u00f1e'\u1ebd","got":"\ud800\udf32\ud800\udf3f\ud800\udf44\ud800\udf39\ud800\udf43\ud800\udf3a","grc":"\u1f08\u03c1\u03c7\u03b1\u03af\u03b1 \u1f11\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u1f74","gsw":"Alemannisch","gu":"\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0","gv":"Gaelg","ha":"\u0647\u064e\u0648\u064f\u0633\u064e","hak":"Hak-k\u00e2-fa","haw":"Hawai`i","he":"\u05e2\u05d1\u05e8\u05d9\u05ea","hi":"\u0939\u093f\u0928\u094d\u0926\u0940","hif":"Fiji Hindi","hif-latn":"Fiji Hindi","hil":"Ilonggo","ho":"Hiri Motu","hr":"Hrvatski","hsb":"Hornjoserbsce","ht":"Krey\u00f2l ayisyen","hu":"Magyar","hy":"\u0540\u0561\u0575\u0565\u0580\u0565\u0576","hz":"Otsiherero","ia":"Interlingua","id":"Bahasa Indonesia","ie":"Interlingue","ig":"Igbo","ii":"\ua187\ua259","ik":"I\u00f1upiak","ike-cans":"\u1403\u14c4\u1483\u144e\u1450\u1466","ike-latn":"inuktitut","ilo":"Ilokano","inh":"\u0413\u0406\u0430\u043b\u0433\u0406\u0430\u0439 \u011eal\u011faj","io":"Ido","is":"\u00cdslenska","it":"Italiano","iu":"\u1403\u14c4\u1483\u144e\u1450\u1466\/inuktitut","ja":"\u65e5\u672c\u8a9e","jbo":"Lojban","jut":"Jysk","jv":"Basa Jawa","ka":"\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8","kaa":"Qaraqalpaqsha","kab":"Taqbaylit","kbd":"\u043a\u044a\u044d\u0431\u044d\u0440\u0434\u0435\u0438\u0431\u0437\u044d\/qabardjaj\u0259bza","kbd-cyrl":"\u043a\u044a\u044d\u0431\u044d\u0440\u0434\u0435\u0438\u0431\u0437\u044d","kg":"Kongo","ki":"G\u0129k\u0169y\u0169","kiu":"K\u0131rmancki","kj":"Kwanyama","kk":"\u049a\u0430\u0437\u0430\u049b\u0448\u0430","kk-arab":"\u202b\u0642\u0627\u0632\u0627\u0642\u0634\u0627 (\u062a\u0674\u0648\u062a\u06d5)\u202c","kk-cyrl":"\u202a\u049a\u0430\u0437\u0430\u049b\u0448\u0430 (\u043a\u0438\u0440\u0438\u043b)\u202c","kk-latn":"\u202aQazaq\u015fa (lat\u0131n)\u202c","kk-cn":"\u202b\u0642\u0627\u0632\u0627\u0642\u0634\u0627 (\u062c\u06c7\u0646\u06af\u0648)\u202c","kk-kz":"\u202a\u049a\u0430\u0437\u0430\u049b\u0448\u0430 (\u049a\u0430\u0437\u0430\u049b\u0441\u0442\u0430\u043d)\u202c","kk-tr":"\u202aQazaq\u015fa (T\u00fcrk\u00efya)\u202c","kl":"Kalaallisut","km":"\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a","kn":"\u0c95\u0ca8\u0ccd\u0ca8\u0ca1","ko":"\ud55c\uad6d\uc5b4","ko-kp":"\ud55c\uad6d\uc5b4 (\uc870\uc120)","koi":"\u041f\u0435\u0440\u0435\u043c \u041a\u043e\u043c\u0438","kr":"Kanuri","krc":"\u041a\u044a\u0430\u0440\u0430\u0447\u0430\u0439-\u041c\u0430\u043b\u043a\u044a\u0430\u0440","kri":"Krio","krj":"Kinaray-a","ks":"\u0915\u0936\u094d\u092e\u0940\u0930\u0940 - (\u0643\u0634\u0645\u064a\u0631\u064a)","ksh":"Ripoarisch","ku":"Kurd\u00ee","ku-latn":"\u202aKurd\u00ee (lat\u00een\u00ee)\u202c","ku-arab":"\u202b\u0643\u0648\u0631\u062f\u064a (\u0639\u06d5\u0631\u06d5\u0628\u06cc)\u202c","kv":"\u041a\u043e\u043c\u0438","kw":"Kernewek","ky":"\u041a\u044b\u0440\u0433\u044b\u0437\u0447\u0430","la":"Latina","lad":"Ladino","lb":"L\u00ebtzebuergesch","lbe":"\u041b\u0430\u043a\u043a\u0443","lez":"\u041b\u0435\u0437\u0433\u0438","lfn":"Lingua Franca Nova","lg":"Luganda","li":"Limburgs","lij":"L\u00edguru","lmo":"Lumbaart","ln":"Ling\u00e1la","lo":"\u0ea5\u0eb2\u0ea7","loz":"Silozi","lt":"Lietuvi\u0173","ltg":"Latga\u013cu","lv":"Latvie\u0161u","lzh":"\u6587\u8a00","lzz":"Lazuri","mai":"\u092e\u0948\u0925\u093f\u0932\u0940","map-bms":"Basa Banyumasan","mdf":"\u041c\u043e\u043a\u0448\u0435\u043d\u044c","mg":"Malagasy","mh":"Ebon","mhr":"\u041e\u043b\u044b\u043a \u041c\u0430\u0440\u0438\u0439","mi":"M\u0101ori","min":"Baso Minangkabau","mk":"\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438","ml":"\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02","mn":"\u041c\u043e\u043d\u0433\u043e\u043b","mo":"\u041c\u043e\u043b\u0434\u043e\u0432\u0435\u043d\u044f\u0441\u043a\u044d","mr":"\u092e\u0930\u093e\u0920\u0940","mrj":"\u041a\u044b\u0440\u044b\u043a \u043c\u0430\u0440\u044b","ms":"Bahasa Melayu","mt":"Malti","mus":"Mvskoke","mwl":"Mirand\u00e9s","my":"\u1019\u103c\u1014\u103a\u1019\u102c\u1018\u102c\u101e\u102c","myv":"\u042d\u0440\u0437\u044f\u043d\u044c","mzn":"\u0645\u0627\u0632\u0650\u0631\u0648\u0646\u06cc","na":"Dorerin Naoero","nah":"N\u0101huatl","nan":"B\u00e2n-l\u00e2m-g\u00fa","nap":"Nnapulitano","nb":"\u202aNorsk (bokm\u00e5l)\u202c","nds":"Plattd\u00fc\u00fctsch","nds-nl":"Nedersaksisch","ne":"\u0928\u0947\u092a\u093e\u0932\u0940","new":"\u0928\u0947\u092a\u093e\u0932 \u092d\u093e\u0937\u093e","ng":"Oshiwambo","niu":"Niu\u0113","nl":"Nederlands","nl-informal":"Nederlands (informeel)","nn":"\u202aNorsk (nynorsk)\u202c","no":"\u202aNorsk (bokm\u00e5l)\u202c","nov":"Novial","nrm":"Nouormand","nso":"Sesotho sa Leboa","nv":"Din\u00e9 bizaad","ny":"Chi-Chewa","oc":"Occitan","om":"Oromoo","or":"\u0b13\u0b21\u0b3c\u0b3f\u0b06","os":"\u0418\u0440\u043e\u043d\u0430\u0443","pa":"\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40","pag":"Pangasinan","pam":"Kapampangan","pap":"Papiamentu","pcd":"Picard","pdc":"Deitsch","pdt":"Plautdietsch","pfl":"P\u00e4lzisch","pi":"\u092a\u093e\u093f\u0934","pih":"Norfuk \/ Pitkern","pl":"Polski","pms":"Piemont\u00e8is","pnb":"\u067e\u0646\u062c\u0627\u0628\u06cc","pnt":"\u03a0\u03bf\u03bd\u03c4\u03b9\u03b1\u03ba\u03ac","prg":"Pr\u016bsiskan","ps":"\u067e\u069a\u062a\u0648","pt":"Portugu\u00eas","pt-br":"Portugu\u00eas do Brasil","qu":"Runa Simi","rgn":"Rumagn\u00f4l","rif":"Tarifit","rm":"Rumantsch","rmy":"Romani","rn":"Kirundi","ro":"Rom\u00e2n\u0103","roa-rup":"Arm\u00e3neashce","roa-tara":"Tarand\u00edne","ru":"\u0420\u0443\u0441\u0441\u043a\u0438\u0439","rue":"\u0440\u0443\u0441\u0438\u043d\u044c\u0441\u043a\u044b\u0439 \u044f\u0437\u044b\u043a","ruq":"Vl\u0103he\u015fte","ruq-cyrl":"\u0412\u043b\u0430\u0445\u0435\u0441\u0442\u0435","ruq-latn":"Vl\u0103he\u015fte","rw":"Kinyarwanda","sa":"\u0938\u0902\u0938\u094d\u0915\u0943\u0924","sah":"\u0421\u0430\u0445\u0430 \u0442\u044b\u043b\u0430","sc":"Sardu","scn":"Sicilianu","sco":"Scots","sd":"\u0633\u0646\u068c\u064a","sdc":"Sassaresu","se":"S\u00e1megiella","sei":"Cmique Itom","sg":"S\u00e4ng\u00f6","sh":"Srpskohrvatski \/ \u0421\u0440\u043f\u0441\u043a\u043e\u0445\u0440\u0432\u0430\u0442\u0441\u043a\u0438","shi":"Ta\u0161l\u1e25iyt","si":"\u0dc3\u0dd2\u0d82\u0dc4\u0dbd","simple":"Simple English","sk":"Sloven\u010dina","sl":"Sloven\u0161\u010dina","sli":"Schl\u00e4sch","sm":"Gagana Samoa","sma":"\u00c5arjelsaemien","sn":"chiShona","so":"Soomaaliga","sq":"Shqip","sr":"\u0421\u0440\u043f\u0441\u043a\u0438 \/ Srpski","sr-ec":"\u0421\u0440\u043f\u0441\u043a\u0438 (\u045b\u0438\u0440\u0438\u043b\u0438\u0446\u0430)","sr-el":"Srpski (latinica)","srn":"Sranantongo","ss":"SiSwati","st":"Sesotho","stq":"Seeltersk","su":"Basa Sunda","sv":"Svenska","sw":"Kiswahili","szl":"\u015al\u016fnski","ta":"\u0ba4\u0bae\u0bbf\u0bb4\u0bcd","tcy":"\u0ca4\u0cc1\u0cb3\u0cc1","te":"\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41","tet":"Tetun","tg":"\u0422\u043e\u04b7\u0438\u043a\u04e3","tg-cyrl":"\u0422\u043e\u04b7\u0438\u043a\u04e3","tg-latn":"tojik\u012b","th":"\u0e44\u0e17\u0e22","ti":"\u1275\u130d\u122d\u129b","tk":"T\u00fcrkmen\u00e7e","tl":"Tagalog","tn":"Setswana","to":"lea faka-Tonga","tokipona":"Toki Pona","tp":"Toki Pona (deprecated:tokipona)","tpi":"Tok Pisin","tr":"T\u00fcrk\u00e7e","ts":"Xitsonga","tt":"\u0422\u0430\u0442\u0430\u0440\u0447\u0430\/Tatar\u00e7a","tt-cyrl":"\u0422\u0430\u0442\u0430\u0440\u0447\u0430","tt-latn":"Tatar\u00e7a","tum":"chiTumbuka","tw":"Twi","ty":"Reo M\u0101`ohi","tyv":"\u0422\u044b\u0432\u0430 \u0434\u044b\u043b","udm":"\u0423\u0434\u043c\u0443\u0440\u0442","ug":"\u0626\u06c7\u064a\u063a\u06c7\u0631\u0686\u06d5 \/ Uyghurche\u200e","ug-arab":"\u0626\u06c7\u064a\u063a\u06c7\u0631\u0686\u06d5","ug-latn":"Uyghurche\u200e","uk":"\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430","ur":"\u0627\u0631\u062f\u0648","uz":"O'zbek","ve":"Tshivenda","vec":"V\u00e8neto","vep":"Vepsan kel'","vi":"Ti\u1ebfng Vi\u1ec7t","vls":"West-Vlams","vmf":"Mainfr\u00e4nkisch","vo":"Volap\u00fck","vot":"Va\u010f\u010fa","vro":"V\u00f5ro","wa":"Walon","war":"Winaray","wo":"Wolof","wuu":"\u5434\u8bed","xal":"\u0425\u0430\u043b\u044c\u043c\u0433","xh":"isiXhosa","xmf":"\u10db\u10d0\u10e0\u10d2\u10d0\u10da\u10e3\u10e0\u10d8","yi":"\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9","yo":"Yor\u00f9b\u00e1","yue":"\u7cb5\u8a9e","za":"Vahcuengh","zea":"Ze\u00eauws","zh":"\u4e2d\u6587","zh-classical":"\u6587\u8a00","zh-cn":"\u202a\u4e2d\u6587(\u4e2d\u56fd\u5927\u9646)\u202c","zh-hans":"\u202a\u4e2d\u6587(\u7b80\u4f53)\u202c","zh-hant":"\u202a\u4e2d\u6587(\u7e41\u9ad4)\u202c","zh-hk":"\u202a\u4e2d\u6587(\u9999\u6e2f)\u202c","zh-min-nan":"B\u00e2n-l\u00e2m-g\u00fa","zh-mo":"\u202a\u4e2d\u6587(\u6fb3\u9580)\u202c","zh-my":"\u202a\u4e2d\u6587(\u9a6c\u6765\u897f\u4e9a)\u202c","zh-sg":"\u202a\u4e2d\u6587(\u65b0\u52a0\u5761)\u202c","zh-tw":"\u202a\u4e2d\u6587(\u53f0\u7063)\u202c","zh-yue":"\u7cb5\u8a9e","zu":"isiZulu"};

/* Enable AnonymousI18N for anonymous users */
/* This interally imports [[MediaWiki:ReferrerWikiUselang.js]] to proces incoming links from other projects */
$( function() {
 if ( ! wgUserName ) {
  importScript( 'MediaWiki:AnonymousI18N.js' );
 }
} );
//</source>