MediaWiki:Edittools.js: Difference between revisions

From MandrakeWiki
Jump to navigation Jump to search
(Created page with "→‎<source lang="javascript"><nowiki> Top of Javascript: // Drop down box for the Special character menu in MediaWiki:Edittools // will be called from [[MediaWiki:Common.js...")
 
(Undo revision 8128 by The Clay Camel (talk))
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
/* <source lang="javascript"><nowiki> Top of Javascript */
var charinsert = {
// Drop down box for the Special character menu in [[MediaWiki:Edittools]]
  "Standard":[
// will be called from [[MediaWiki:Common.js]].
    [ "’", ["‚","‘"], ["“","”"], ["‘","’"], ["«","»"], ["‹","›"], ["–","","","Hyphen"] ],
// Adapted from:
    [ "+", ["−","","","Minus"], "#", "*", "§", "$", "¿", "¡", "‣", "•", ["〈","〉"], "…" ],
// http://commons.wikimedia.org/wiki/MediaWiki:Edittools.js
    [ [" ","","","Non-breakable space"], ["[[","]]","","Wikilink"], "|", ["{{","}}"], ["[[User:The Clay Camel|The Clay Camel]] 18:02, 13 March 2012 (UTC)","","","Signature"] ],
    [ ["<poem>","<\/poem>"], ["<tt>","<\/tt>"], ["<nowiki>","<\/nowiki>"], ["<pre>","<\/pre>"], ["<code>","<\/code>"],
      ["<noinclude>","<\/noinclude>"], ["<includeonly>","<\/includeonly>"], ["[[Category:","]]"], ["[[File:","]]"],
      ["{{filepath:","}}"], ["{{DEFAULTSORT:","}}"], "{{NameSorter}}", ["#REDIRECT [[","]]"] ]
  ],


// Switch for people that don't want it
  "Latin":[
if (load_edittools == true)
    ["A", "a", "Á", "á", "À", "à", "Â", "â", "Ä", "ä", "Ǎ", "ǎ", "Ă", "ă", "Ā", "ā", "Ã", "ã", "Å", "å", "Ą", "ą",
{
    "Æ", "æ", "Ǣ", "ǣ", "B", "b", "C", "c", "Ć", "ć", "Ċ", "ċ", "Ĉ", "ĉ", "Č", "č", "Ç", "ç", "D", "d", "Ď", "ď",
    "Đ", "đ", "Ḍ", "ḍ", "Ð", "ð", "E", "e", "É", "é", "È", "è", "Ė", "ė", "Ê", "ê", "Ë", "ë", "Ě", "ě", "Ĕ", "ĕ",
    "Ē", "ē", "Ẽ", "ẽ", "Ę", "ę", "Ə", "ə", "F", "f", "G", "g", "Ġ", "ġ", "Ĝ", "ĝ", "Ğ", "ğ", "Ģ", "ģ", "H", "h",
    "Ĥ", "ĥ", "Ħ", "ħ", "Ḥ", "ḥ", "I", "i", "İ", "ı", "Í", "í", "Ì", "ì", "Î", "î", "Ï", "ï", "Ǐ", "ǐ", "Ĭ", "ĭ",
    "Ī", "ī", "Ĩ", "ĩ", "Į", "į", "J", "j", "Ĵ", "ĵ", "K", "k", "Ķ", "ķ", "L", "l", "Ĺ", "ĺ", "Ŀ", "ŀ", "Ľ", "ľ",
    "Ļ", "ļ", "Ł", "ł", "Ḷ", "ḷ", "Ḹ", "ḹ", "M", "m", "Ṃ", "ṃ", "N", "n", "Ń", "ń", "Ň", "ň", "Ñ", "ñ", "Ņ", "ņ",
    "Ṇ", "ṇ", "O", "o", "Ó", "ó", "Ò", "ò", "Ô", "ô", "Ö", "ö", "Ǒ", "ǒ", "Ŏ", "ŏ", "Ō", "ō", "Õ", "õ", "Ǫ", "ǫ",
    "Ő", "ő", "Ø", "ø", "Œ", "œ", "P", "p", "Q", "q", "R", "r", "Ŕ", "ŕ", "Ř", "ř", "Ŗ", "ŗ", "Ṛ", "ṛ", "Ṝ", "ṝ",
    "S", "s", "Ś", "ś", "Ŝ", "ŝ", "Š", "š", "Ş", "ş", "Ṣ", "ṣ", "ß", "T", "t", "Ť", "ť", "Ţ", "ţ", "Ṭ", "ṭ", "Þ",
    "þ", "U", "u", "Ú", "ú", "Ù", "ù", "Û", "û", "Ü", "ü", "Ǔ", "ǔ", "Ŭ", "ŭ", "Ū", "ū", "Ũ", "ũ", "Ů", "ů", "Ų",
    "ų", "Ű", "ű", "Ǘ", "ǘ", "Ǜ", "ǜ", "Ǚ", "ǚ", "Ǖ", "ǖ", "V", "v", "W", "w", "Ŵ", "ŵ", "X", "x", "Y", "y", "Ý", "ý",
    "Ŷ", "ŷ", "Ÿ", "ÿ", "Ỹ", "ỹ", "Ȳ", "ȳ", "Z", "z", "Ź", "ź", "Ż", "ż", "Ž", "ž", "ß", "Ð", "ð", "Þ", "þ", "Ə", "ə"]
  ],
  "Classical Greek":[
    { "lang":"grc", "font-family":"'Arial Unicode MS','Lucida Sans Unicode','MS Mincho',Arial,sans-serif;" },
    ["Α", "α", "Ά", "ά", "Β", "β", "Γ", "γ", "Δ", "δ", "Ε", "ε", "Έ", "έ", "Ζ", "ζ", "Η", "η", "Ή", "ή", "Θ", "θ", "Ι",
    "ι", "Ί", "ί", "Ϊ", "ϊ", "ΐ", "Κ", "κ", "Λ", "λ", "Μ", "μ", "Ν", "ν", "Ξ", "ξ", "Ο", "ο", "", "Ό", "ό", "Π", "π",
    "Ρ", "ρ", "Σ", "σ", "ς", "Τ", "τ", "Υ", "υ", "Ϋ", "ϋ", "Ύ", "ύ", "ΰ", "Φ", "φ", "Χ", "χ", "Ψ", "ψ", "Ω", "ω", "Ώ",
    "ώ", ";", "·", "ἀ", "ἁ", "ὰ", "ᾶ", "ἂ", "ἃ", "ἄ", "ἅ", "ἆ", "ἇ", "ᾳ", "ᾀ", "ᾁ", "ᾴ", "ᾲ", "ᾷ", "ᾄ", "ᾅ", "ᾂ", "ᾃ",
    "ᾆ", "ᾇ", "ἐ", "ἑ", "ὲ", "ἔ", "ἕ", "ἒ", "ἓ", "ἠ", "ἡ", "ὴ", "ῆ", "ἤ", "ἢ", "ἣ", "ἥ", "ἦ", "ἧ", "ῃ", "ῄ", "ῂ", "ῇ",
    "ᾐ", "ᾑ", "ᾔ", "ᾒ", "ᾕ", "ᾓ", "ᾖ", "ᾗ", "ἰ", "ἱ", "ὶ", "ῖ", "ἴ", "ἲ", "ἵ", "ἳ", "ἶ", "ἷ", "ὸ", "ὀ", "ὁ", "ὄ", "ὅ",
    "ὂ", "ὃ", "ῤ", "ῥ", "ὐ", "ὑ", "ὺ", "ῦ", "ὔ", "ὕ", "ὒ", "ὓ", "ὖ", "ὗ", "ὠ", "ὡ", "ὼ", "ῶ", "ὤ", "ὢ", "ὥ", "ὣ", "ὦ",
    "ὧ", "ῳ", "ῴ", "ῲ", "ῷ", "ᾠ", "ᾡ", "ᾤ", "ᾢ", "ᾥ", "ᾣ", "ᾦ", "ᾧ", "`", "᾿", "῾", "῍", "῎", "῏", "῟", "῞", "῝", "῍",
    "῎", "Ϝ", "ϝ", "Ϙ", "ϙ", "Ϡ", "ϡ"]
  ],
  "Cyrillic":[
    ["А", "а", "Б", "б", "В", "в", "Г", "г", "Ґ", "ґ", "Ѓ", "ѓ", "Д", "д", "Ђ", "ђ", "Е", "е", "Ё", "ё", "Є", "є",
    "Ж", "ж", "З", "з", "Ѕ", "ѕ", "И", "и", "І", "і", "Ї", "ї", "Й", "й", "Ј", "ј", "К", "к", "Ќ", "ќ", "Л", "л",
    "Љ", "љ", "М", "м", "Н", "н", "Њ", "њ", "О", "о", "П", "п", "Р", "р", "С", "с", "Т", "т", "Ћ", "ћ", "У", "у",
    "Ў", "ў", "Ф", "ф", "Х", "х", "Ц", "ц", "Ч", "ч", "Џ", "џ", "Ш", "ш", "Щ", "щ", "Ъ", "ъ", "Ы", "ы", "Ь", "ь",
    "Э", "э", "Ю", "ю", "Я", "я", "Ә", "ә", "Ө", "ө", "Ғ", "ғ", "Җ", "җ", "Қ", "қ", "Ҝ", "ҝ", "Ң", "ң", "Ү", "ү",
    "Ұ", "ұ", "Ҳ", "ҳ", "Ҹ", "ҹ", "Һ", "һ", "Ҕ", "ҕ", "Ӣ", "ӣ", "Ӯ", "ӯ", "Ҙ", "ҙ", "Ҡ", "ҡ", "Ҥ", "ҥ", "Ҫ", "ҫ",
    "Ӑ", "ӑ", "Ӓ", "ӓ", "Ӕ", "ӕ", "Ӗ", "ӗ", "Ӱ", "ӱ", "Ӳ", "ӳ", "Ӹ", "ӹ", "Ӏ", "Ҟ", "ҟ", "Ҧ", "ҧ", "Ҩ", "ҩ", "Ҭ",
    "ҭ", "Ҵ", "ҵ", "Ҷ", "ҷ", "Ҽ", "ҽ", "Ҿ", "ҿ", "Ӂ", "ӂ", "Ӄ", "ӄ", "Ӈ", "ӈ", "Ӌ", "ӌ", "Ӛ", "ӛ", "Ӝ", "ӝ", "Ӟ",
    "ӟ", "Ӡӡ", "Ӥ", "ӥ", "Ӧ", "ӧ", "Ӫ", "ӫ", "Ӵ", "ӵ"]
  ],
  "Vietnamese":[
    { "lang":"vi" },
    ["À", "à", "Ả", "ả", "Á", "á", "Ạ", "ạ", "Ã", "ã", "Ă", "ă", "Ằ", "ằ", "Ẳ", "ẳ", "Ẵ", "ẵ", "Ắ", "ắ", "Ặ",
    "ặ", "Â", "â", "Ầ", "ầ", "Ẩ", "ẩ", "Ẫ", "ẫ", "Ấ", "ấ", "Ậ", "ậ", "Đ", "đ", "È", "è", "Ẻ", "ẻ", "Ẽ", "ẽ",
    "É", "é", "Ẹ", "ẹ", "Ê", "ê", "Ề", "ề", "Ể", "ể", "Ễ", "ễ", "Ế", "ế", "Ệ", "ệ", "Ỉ", "ỉ", "Ĩ", "ĩ", "Í",
    "í", "Ị", "ị", "Ì", "ì", "Ỏ", "ỏ", "Ó", "ó", "Ọ", "ọ", "Ò", "ò", "Õ", "õ", "Ô", "ô", "Ồ", "ồ", "Ổ", "ổ",
    "Ỗ", "ỗ", "Ố", "ố", "Ộ", "ộ", "Ơ", "ơ", "Ờ", "ờ", "Ở", "ở", "Ỡ", "ỡ", "Ớ", "ớ", "Ợ", "ợ", "Ù", "ù", "Ủ",
    "ủ", "Ũ", "ũ", "Ú", "ú", "Ụ", "ụ", "Ư", "ư", "Ừ", "ừ", "Ử", "ử", "Ữ", "ữ", "Ứ", "ứ", "Ự", "ự", "Ỳ", "ỳ",
    "Ỷ", "ỷ", "Ỹ", "ỹ", "Ỵ", "ỵ", "Ý", "ý"]
  ]
};


function addCharSubsetMenu() {
addOnloadHook(function() {
var specialchars = document.getElementById('specialchars');
addOnloadHook(function() {
 
  var box;
if (specialchars) {
  function loadCommonsTools() {
var menu = "<select style=\"display:inline\" onChange=\"chooseCharSubset(selectedIndex)\">";
    function selectSubset() {
menu += "<option>Standard</option>";
      var pp = box.getElementsByTagName("p");
menu += "<option>Latin</option>";
      for (var i=0; i<pp.length; ++i) {
menu += "<option>Greek</option>";
        pp[i].style["display"] = "none";
menu += "<option>Cyrillic</option>";
      }
menu += "<option>IPA</option>";
      // show/create current subset
menu += "<option>Arabic</option>";
      var id = sel.options[sel.selectedIndex].value;
menu += "<option>Catalan</option>";
      var p = document.getElementById(id);
menu += "<option>Czech</option>";
      if(!p) {
menu += "<option>Devanāgarī</option>";
        p = document.createElement('p');
menu += "<option>Esperanto</option>";
        p.setAttribute("id", id);
menu += "<option>Estonian</option>";
        p.setAttribute("class", "mwEdittoolsLanguage");
menu += "<option>French</option>";
        createTokens(p, charinsert[id.substr("mwEdittools--".length)]);
menu += "<option>German</option>";
        box.appendChild(p);
menu += "<option>Hawaiian</option>";
      }
menu += "<option>Hebrew</option>";
      p.style["display"] = "inline";
menu += "<option>Hungarian</option>";
    }
menu += "<option>Icelandic</option>";
   
menu += "<option>Italian</option>";
    function createTokens(paragraph, outerArr) {
menu += "<option>Latvian</option>";
      var buttons;
menu += "<option>Lithuanian</option>";
     
menu += "<option>Maltese</option>";
      function insertInner(elem) {
menu += "<option>Old English</option>";
        var a = false, ins;
menu += "<option>Pinyin</option>";
        switch(typeof(elem)) {
menu += "<option>Polish</option>";
          case("string"): {
menu += "<option>Portuguese</option>";
            ins = function() {
menu += "<option>Romaji</option>";
              insertTags(elem, "", "");
menu += "<option>Romanian</option>";
              return false;
menu += "<option>Scandinavian</option>";
            };
menu += "<option>Serbian</option>";
            a = document.createElement("a");
menu += "<option>Spanish</option>";
            a.setAttribute("title", elem);
menu += "<option>Turkish</option>";
            a.appendChild(document.createTextNode(elem));
menu += "<option>Vietnamese</option>";
          } break;
menu += "<option>Welsh</option>";
          case("array"):
menu += "<option>Yiddish</option>";
          case("object"): {
menu += "</select>";
            ins = function() {
specialchars.innerHTML = menu + specialchars.innerHTML;
              insertTags(elem[0], elem[1] || "", elem[2] || "");
 
              return false;
// Standard-CharSubset
            };
chooseCharSubset(0);
            a = document.createElement("a");
}
            a.setAttribute("title", elem[3] || (elem[0] + (elem[2] || "") + (elem[1] || "")));
}
            a.appendChild(document.createTextNode(elem[0] + (elem[1] || "")));
 
          }; break;
// CharSubset selection
        }
function chooseCharSubset(s) {
        if(a !== false) {
var l = document.getElementById('specialchars').getElement sByTagName('p');
          a.onclick = ins;
for (var i = 0; i < l.length ; i++) {
          a.setAttribute("href", "#");
l[i].style.display = i == s ? 'inline' : 'none';
          a.setAttribute("class", "mwEdittoolsButton");
// l[i].style.visibility = i == s ? 'visible' : 'hidden';
          buttons.appendChild(document.createTextNode(" "));
}
          buttons.appendChild(a);
}
        }
 
      }
// Menu insertion
     
if (window.addEventListener)  
      function insertOuter(innerArr) {
window.addEventListener("load", addCharSubsetMenu, false);
        switch(typeof(innerArr)) {
else if (window.attachEvent)  
          case("object"):
window.attachEvent("onload", addCharSubsetMenu);
          case("array"):
 
            var obj = false;
}
            if(typeof(innerArr["class"]) === "string") {
/* Bottom of Javascript </nowiki></source>*/
              obj = true;
              paragraph.setAttribute("class", innerArr["class"]);
            }
            if(typeof(innerArr["lang"]) === "string") {
              obj = true;
              paragraph.setAttribute("lang", innerArr["lang"]);
            }
            if(typeof(innerArr["direction"]) === "string") {
              obj = true;
              paragraph.style.direction = innerArr["direction"];
            }
            if(typeof(innerArr["font-family"]) === "string") {
              obj = true;
              paragraph.style.fontFamily = innerArr["font-family"];
            }
            if(typeof(innerArr["font-size"]) === "string") {
              obj = true;
              paragraph.style.fontSize = innerArr["font-size"];
            }
            if(obj) {
              return false;
            }
            buttons = document.createElement("span");
            buttons.setAttribute("class", "mwEdittoolsButtons");
            for(var i = 0; i<innerArr.length; ++i) {
              insertInner(innerArr[i]);
            }
            paragraph.appendChild(buttons);
            return true;
          default:
            return false;
        }
      }
     
      if(outerArr.length == 0) { return; }
      for(var i=0; i<outerArr.length-1; ++i) {
        if(insertOuter(outerArr[i])) {
          var s = document.createElement("span");
          s.appendChild(document.createTextNode("\xA0\xA0•\xA0 "));
          s.style["font-weight"] = "bold";
          paragraph.appendChild(s);
        }
      }
      insertOuter(outerArr[outerArr.length-1]);
    }
   
    //create drop-down select
    var sel = document.createElement("select");
    for(var id in charinsert) {
      var op = document.createElement("option");
      op.setAttribute("value", "mwEdittools--" + id);
      op.appendChild(document.createTextNode(id));
      sel.appendChild(op);
    }
    sel.setAttribute("title", "Zeichensatz auswählen");
    sel.onchange = sel.onkeyup = selectSubset;
    box.appendChild(sel);
    box.appendChild(document.createTextNode(" "));
    selectSubset();
    return false;
  }
 
  //get div#mw-editTools
  box = document.getElementById('mw-editTools');
  if(!box) { return; }
 
  box = box.appendChild(document.createElement("div"));
  box.setAttribute("id", "specialchars");
  box.style.cssText = 'margin-top:5px; border:1px solid #aaaaaa; padding:2px;';
 
  loadCommonsTools();
})
});

Latest revision as of 18:56, 13 March 2012

var charinsert = {
  "Standard":[
    [ "’", ["‚","‘"], ["“","”"], ["‘","’"], ["«","»"], ["‹","›"], ["–","","","Hyphen"] ],
    [ "+", ["−","","","Minus"], "#", "*", "§", "$", "¿", "¡", "‣", "•", ["〈","〉"], "…" ],
    [ [" ","","","Non-breakable space"], ["[[","]]","","Wikilink"], "|", ["{{","}}"], ["[[User:The Clay Camel|The Clay Camel]] 18:02, 13 March 2012 (UTC)","","","Signature"] ],
    [ ["<poem>","<\/poem>"], ["<tt>","<\/tt>"], ["<nowiki>","<\/nowiki>"], ["<pre>","<\/pre>"], ["<code>","<\/code>"],
      ["<noinclude>","<\/noinclude>"], ["<includeonly>","<\/includeonly>"], ["[[Category:","]]"], ["[[File:","]]"],
      ["{{filepath:","}}"], ["{{DEFAULTSORT:","}}"], "{{NameSorter}}", ["#REDIRECT [[","]]"] ]
  ],

  "Latin":[
    ["A", "a", "Á", "á", "À", "à", "Â", "â", "Ä", "ä", "Ǎ", "ǎ", "Ă", "ă", "Ā", "ā", "Ã", "ã", "Å", "å", "Ą", "ą",
     "Æ", "æ", "Ǣ", "ǣ", "B", "b", "C", "c", "Ć", "ć", "Ċ", "ċ", "Ĉ", "ĉ", "Č", "č", "Ç", "ç", "D", "d", "Ď", "ď", 
     "Đ", "đ", "Ḍ", "ḍ", "Ð", "ð", "E", "e", "É", "é", "È", "è", "Ė", "ė", "Ê", "ê", "Ë", "ë", "Ě", "ě", "Ĕ", "ĕ", 
     "Ē", "ē", "Ẽ", "ẽ", "Ę", "ę", "Ə", "ə", "F", "f", "G", "g", "Ġ", "ġ", "Ĝ", "ĝ", "Ğ", "ğ", "Ģ", "ģ", "H", "h", 
     "Ĥ", "ĥ", "Ħ", "ħ", "Ḥ", "ḥ", "I", "i", "İ", "ı", "Í", "í", "Ì", "ì", "Î", "î", "Ï", "ï", "Ǐ", "ǐ", "Ĭ", "ĭ", 
     "Ī", "ī", "Ĩ", "ĩ", "Į", "į", "J", "j", "Ĵ", "ĵ", "K", "k", "Ķ", "ķ", "L", "l", "Ĺ", "ĺ", "Ŀ", "ŀ", "Ľ", "ľ", 
     "Ļ", "ļ", "Ł", "ł", "Ḷ", "ḷ", "Ḹ", "ḹ", "M", "m", "Ṃ", "ṃ", "N", "n", "Ń", "ń", "Ň", "ň", "Ñ", "ñ", "Ņ", "ņ", 
     "Ṇ", "ṇ", "O", "o", "Ó", "ó", "Ò", "ò", "Ô", "ô", "Ö", "ö", "Ǒ", "ǒ", "Ŏ", "ŏ", "Ō", "ō", "Õ", "õ", "Ǫ", "ǫ", 
     "Ő", "ő", "Ø", "ø", "Œ", "œ", "P", "p", "Q", "q", "R", "r", "Ŕ", "ŕ", "Ř", "ř", "Ŗ", "ŗ", "Ṛ", "ṛ", "Ṝ", "ṝ", 
     "S", "s", "Ś", "ś", "Ŝ", "ŝ", "Š", "š", "Ş", "ş", "Ṣ", "ṣ", "ß", "T", "t", "Ť", "ť", "Ţ", "ţ", "Ṭ", "ṭ", "Þ", 
     "þ", "U", "u", "Ú", "ú", "Ù", "ù", "Û", "û", "Ü", "ü", "Ǔ", "ǔ", "Ŭ", "ŭ", "Ū", "ū", "Ũ", "ũ", "Ů", "ů", "Ų", 
     "ų", "Ű", "ű", "Ǘ", "ǘ", "Ǜ", "ǜ", "Ǚ", "ǚ", "Ǖ", "ǖ", "V", "v", "W", "w", "Ŵ", "ŵ", "X", "x", "Y", "y", "Ý", "ý",
     "Ŷ", "ŷ", "Ÿ", "ÿ", "Ỹ", "ỹ", "Ȳ", "ȳ", "Z", "z", "Ź", "ź", "Ż", "ż", "Ž", "ž", "ß", "Ð", "ð", "Þ", "þ", "Ə", "ə"]
  ],
  "Classical Greek":[
    { "lang":"grc", "font-family":"'Arial Unicode MS','Lucida Sans Unicode','MS Mincho',Arial,sans-serif;" },
    ["Α", "α", "Ά", "ά", "Β", "β", "Γ", "γ", "Δ", "δ", "Ε", "ε", "Έ", "έ", "Ζ", "ζ", "Η", "η", "Ή", "ή", "Θ", "θ", "Ι",
     "ι", "Ί", "ί", "Ϊ", "ϊ", "ΐ", "Κ", "κ", "Λ", "λ", "Μ", "μ", "Ν", "ν", "Ξ", "ξ", "Ο", "ο", "", "Ό", "ό", "Π", "π",
     "Ρ", "ρ", "Σ", "σ", "ς", "Τ", "τ", "Υ", "υ", "Ϋ", "ϋ", "Ύ", "ύ", "ΰ", "Φ", "φ", "Χ", "χ", "Ψ", "ψ", "Ω", "ω", "Ώ",
     "ώ", ";", "·", "ἀ", "ἁ", "ὰ", "ᾶ", "ἂ", "ἃ", "ἄ", "ἅ", "ἆ", "ἇ", "ᾳ", "ᾀ", "ᾁ", "ᾴ", "ᾲ", "ᾷ", "ᾄ", "ᾅ", "ᾂ", "ᾃ",
     "ᾆ", "ᾇ", "ἐ", "ἑ", "ὲ", "ἔ", "ἕ", "ἒ", "ἓ", "ἠ", "ἡ", "ὴ", "ῆ", "ἤ", "ἢ", "ἣ", "ἥ", "ἦ", "ἧ", "ῃ", "ῄ", "ῂ", "ῇ",
     "ᾐ", "ᾑ", "ᾔ", "ᾒ", "ᾕ", "ᾓ", "ᾖ", "ᾗ", "ἰ", "ἱ", "ὶ", "ῖ", "ἴ", "ἲ", "ἵ", "ἳ", "ἶ", "ἷ", "ὸ", "ὀ", "ὁ", "ὄ", "ὅ",
     "ὂ", "ὃ", "ῤ", "ῥ", "ὐ", "ὑ", "ὺ", "ῦ", "ὔ", "ὕ", "ὒ", "ὓ", "ὖ", "ὗ", "ὠ", "ὡ", "ὼ", "ῶ", "ὤ", "ὢ", "ὥ", "ὣ", "ὦ",
     "ὧ", "ῳ", "ῴ", "ῲ", "ῷ", "ᾠ", "ᾡ", "ᾤ", "ᾢ", "ᾥ", "ᾣ", "ᾦ", "ᾧ", "`", "᾿", "῾", "῍", "῎", "῏", "῟", "῞", "῝", "῍",
     "῎", "Ϝ", "ϝ", "Ϙ", "ϙ", "Ϡ", "ϡ"]
  ],
  "Cyrillic":[
    ["А", "а", "Б", "б", "В", "в", "Г", "г", "Ґ", "ґ", "Ѓ", "ѓ", "Д", "д", "Ђ", "ђ", "Е", "е", "Ё", "ё", "Є", "є",
     "Ж", "ж", "З", "з", "Ѕ", "ѕ", "И", "и", "І", "і", "Ї", "ї", "Й", "й", "Ј", "ј", "К", "к", "Ќ", "ќ", "Л", "л",
     "Љ", "љ", "М", "м", "Н", "н", "Њ", "њ", "О", "о", "П", "п", "Р", "р", "С", "с", "Т", "т", "Ћ", "ћ", "У", "у",
     "Ў", "ў", "Ф", "ф", "Х", "х", "Ц", "ц", "Ч", "ч", "Џ", "џ", "Ш", "ш", "Щ", "щ", "Ъ", "ъ", "Ы", "ы", "Ь", "ь",
     "Э", "э", "Ю", "ю", "Я", "я", "Ә", "ә", "Ө", "ө", "Ғ", "ғ", "Җ", "җ", "Қ", "қ", "Ҝ", "ҝ", "Ң", "ң", "Ү", "ү",
     "Ұ", "ұ", "Ҳ", "ҳ", "Ҹ", "ҹ", "Һ", "һ", "Ҕ", "ҕ", "Ӣ", "ӣ", "Ӯ", "ӯ", "Ҙ", "ҙ", "Ҡ", "ҡ", "Ҥ", "ҥ", "Ҫ", "ҫ",
     "Ӑ", "ӑ", "Ӓ", "ӓ", "Ӕ", "ӕ", "Ӗ", "ӗ", "Ӱ", "ӱ", "Ӳ", "ӳ", "Ӹ", "ӹ", "Ӏ", "Ҟ", "ҟ", "Ҧ", "ҧ", "Ҩ", "ҩ", "Ҭ",
     "ҭ", "Ҵ", "ҵ", "Ҷ", "ҷ", "Ҽ", "ҽ", "Ҿ", "ҿ", "Ӂ", "ӂ", "Ӄ", "ӄ", "Ӈ", "ӈ", "Ӌ", "ӌ", "Ӛ", "ӛ", "Ӝ", "ӝ", "Ӟ",
     "ӟ", "Ӡӡ", "Ӥ", "ӥ", "Ӧ", "ӧ", "Ӫ", "ӫ", "Ӵ", "ӵ"]
  ],
  "Vietnamese":[
    { "lang":"vi" },
    ["À", "à", "Ả", "ả", "Á", "á", "Ạ", "ạ", "Ã", "ã", "Ă", "ă", "Ằ", "ằ", "Ẳ", "ẳ", "Ẵ", "ẵ", "Ắ", "ắ", "Ặ",
     "ặ", "Â", "â", "Ầ", "ầ", "Ẩ", "ẩ", "Ẫ", "ẫ", "Ấ", "ấ", "Ậ", "ậ", "Đ", "đ", "È", "è", "Ẻ", "ẻ", "Ẽ", "ẽ",
     "É", "é", "Ẹ", "ẹ", "Ê", "ê", "Ề", "ề", "Ể", "ể", "Ễ", "ễ", "Ế", "ế", "Ệ", "ệ", "Ỉ", "ỉ", "Ĩ", "ĩ", "Í",
     "í", "Ị", "ị", "Ì", "ì", "Ỏ", "ỏ", "Ó", "ó", "Ọ", "ọ", "Ò", "ò", "Õ", "õ", "Ô", "ô", "Ồ", "ồ", "Ổ", "ổ",
     "Ỗ", "ỗ", "Ố", "ố", "Ộ", "ộ", "Ơ", "ơ", "Ờ", "ờ", "Ở", "ở", "Ỡ", "ỡ", "Ớ", "ớ", "Ợ", "ợ", "Ù", "ù", "Ủ",
     "ủ", "Ũ", "ũ", "Ú", "ú", "Ụ", "ụ", "Ư", "ư", "Ừ", "ừ", "Ử", "ử", "Ữ", "ữ", "Ứ", "ứ", "Ự", "ự", "Ỳ", "ỳ",
     "Ỷ", "ỷ", "Ỹ", "ỹ", "Ỵ", "ỵ", "Ý", "ý"]
  ]
};

addOnloadHook(function() {
addOnloadHook(function() {
  var box;
  function loadCommonsTools() {
    function selectSubset() {
      var pp = box.getElementsByTagName("p");
      for (var i=0; i<pp.length; ++i) {
        pp[i].style["display"] = "none";
      }
      // show/create current subset
      var id = sel.options[sel.selectedIndex].value;
      var p = document.getElementById(id);
      if(!p) {
        p = document.createElement('p');
        p.setAttribute("id", id);
        p.setAttribute("class", "mwEdittoolsLanguage");
        createTokens(p, charinsert[id.substr("mwEdittools--".length)]);
        box.appendChild(p);
      }
      p.style["display"] = "inline";
    }
    
    function createTokens(paragraph, outerArr) {
      var buttons;
      
      function insertInner(elem) {
        var a = false, ins;
        switch(typeof(elem)) {
          case("string"): {
            ins = function() {
              insertTags(elem, "", "");
              return false;
            };
            a = document.createElement("a");
            a.setAttribute("title", elem);
            a.appendChild(document.createTextNode(elem));
          } break;
          case("array"):
          case("object"): {
            ins = function() {
              insertTags(elem[0], elem[1] || "", elem[2] || "");
              return false;
            };
            a = document.createElement("a");
            a.setAttribute("title", elem[3] || (elem[0] + (elem[2] || "…") + (elem[1] || "")));
            a.appendChild(document.createTextNode(elem[0] + (elem[1] || "")));
          }; break;
        }
        if(a !== false) {
          a.onclick = ins;
          a.setAttribute("href", "#");
          a.setAttribute("class", "mwEdittoolsButton");
          buttons.appendChild(document.createTextNode(" "));
          buttons.appendChild(a);
        }
      }
      
      function insertOuter(innerArr) {
        switch(typeof(innerArr)) {
          case("object"):
          case("array"):
            var obj = false;
            if(typeof(innerArr["class"]) === "string") {
              obj = true;
              paragraph.setAttribute("class", innerArr["class"]);
            }
            if(typeof(innerArr["lang"]) === "string") {
              obj = true;
              paragraph.setAttribute("lang", innerArr["lang"]);
            }
            if(typeof(innerArr["direction"]) === "string") {
              obj = true;
              paragraph.style.direction = innerArr["direction"];
            }
            if(typeof(innerArr["font-family"]) === "string") {
              obj = true;
              paragraph.style.fontFamily = innerArr["font-family"];
            }
            if(typeof(innerArr["font-size"]) === "string") {
              obj = true;
              paragraph.style.fontSize = innerArr["font-size"];
            }
            if(obj) {
              return false;
            }
            buttons = document.createElement("span");
            buttons.setAttribute("class", "mwEdittoolsButtons");
            for(var i = 0; i<innerArr.length; ++i) {
              insertInner(innerArr[i]);
            }
            paragraph.appendChild(buttons);
            return true;
          default:
            return false;
        }
      }
      
      if(outerArr.length == 0) { return; }
      for(var i=0; i<outerArr.length-1; ++i) {
        if(insertOuter(outerArr[i])) {
          var s = document.createElement("span");
          s.appendChild(document.createTextNode("\xA0\xA0•\xA0 "));
          s.style["font-weight"] = "bold";
          paragraph.appendChild(s);
        }
      }
      insertOuter(outerArr[outerArr.length-1]);
    }
    
    //create drop-down select
    var sel = document.createElement("select");
    for(var id in charinsert) {
      var op = document.createElement("option");
      op.setAttribute("value", "mwEdittools--" + id);
      op.appendChild(document.createTextNode(id));
      sel.appendChild(op);
    }
    sel.setAttribute("title", "Zeichensatz auswählen");
    sel.onchange = sel.onkeyup = selectSubset;
    box.appendChild(sel);
    box.appendChild(document.createTextNode(" "));
    selectSubset();
    return false;
  }
  
  //get div#mw-editTools
  box = document.getElementById('mw-editTools');
  if(!box) { return; }
  
  box = box.appendChild(document.createElement("div"));
  box.setAttribute("id", "specialchars");
  box.style.cssText = 'margin-top:5px; border:1px solid #aaaaaa; padding:2px;';
  
  loadCommonsTools();
})
});