MediaWiki:Edittools.js: Difference between revisions

From MandrakeWiki
Jump to navigation Jump to search
No edit summary
(Undo revision 8128 by The Clay Camel (talk))
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
// <source lang="javascript">
var charinsert = {
/*
  "Standard":[
  EditTools support: add a selector, change into true buttons, enable for all text input fields
    [ "’", ["‚","‘"], ["“","”"], ["‘","’"], ["«","»"], ["‹","›"], ["–","","","Hyphen"] ],
  If enabled in preferences, the script puts the buttons into the WikiEditor Toolbar
    [ "+", ["−","","","Minus"], "#", "*", "§", "$", "¿", "¡", "‣", "•", ["〈","〉"], "…" ],
  The special characters to insert are defined at [[MediaWiki:Edittools]].
    [ [" ","","","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:","]]"],
/*jshint curly:false */
      ["{{filepath:","}}"], ["{{DEFAULTSORT:","}}"], "{{NameSorter}}", ["#REDIRECT [[","]]"] ]
/*global importStylesheetURI:false, jQuery:false, oldEdittools:false */
  ],
 
( function ( $ ) {
  "Latin":[
"use strict";
    ["A", "a", "Á", "á", "À", "à", "Â", "â", "Ä", "ä", "Ǎ", "ǎ", "Ă", "ă", "Ā", "ā", "Ã", "ã", "Å", "å", "Ą", "ą",
var EditTools, insertTags;
    "Æ", "æ", "Ǣ", "ǣ", "B", "b", "C", "c", "Ć", "ć", "Ċ", "ċ", "Ĉ", "ĉ", "Č", "č", "Ç", "ç", "D", "d", "Ď", "ď",
    "Đ", "đ", "Ḍ", "ḍ", "Ð", "ð", "E", "e", "É", "é", "È", "è", "Ė", "ė", "Ê", "ê", "Ë", "ë", "Ě", "ě", "Ĕ", "ĕ",
importStylesheetURI('//commons.wikimedia.org/?title=MediaWiki:Edittools.css&action=raw&ctype=text/css');
    "Ē", "ē", "Ẽ", "ẽ", "Ę", "ę", "Ə", "ə", "F", "f", "G", "g", "Ġ", "ġ", "Ĝ", "ĝ", "Ğ", "ğ", "Ģ", "ģ", "H", "h",  
window.insertTags = insertTags = function (tagOpen, tagClose, sampleText) {
    "Ĥ", "ĥ", "Ħ", "ħ", "Ḥ", "ḥ", "I", "i", "İ", "ı", "Í", "í", "Ì", "ì", "Î", "î", "Ï", "ï", "Ǐ", "ǐ", "Ĭ", "ĭ",
    var $txtarea = EditTools.getTextArea();
    "Ī", "ī", "Ĩ", "ĩ", "Į", "į", "J", "j", "Ĵ", "ĵ", "K", "k", "Ķ", "ķ", "L", "l", "Ĺ", "ĺ", "Ŀ", "ŀ", "Ľ", "ľ",
    if ($txtarea.length !== 1) return;
    "Ļ", "ļ", "Ł", "ł", "Ḷ", "ḷ", "Ḹ", "ḹ", "M", "m", "Ṃ", "ṃ", "N", "n", "Ń", "ń", "Ň", "ň", "Ñ", "ñ", "Ņ", "ņ",
    "Ṇ", "ṇ", "O", "o", "Ó", "ó", "Ò", "ò", "Ô", "ô", "Ö", "ö", "Ǒ", "ǒ", "Ŏ", "ŏ", "Ō", "ō", "Õ", "õ", "Ǫ", "ǫ",  
    /* Usability initiative compatibility */
    "Ő", "ő", "Ø", "ø", "Œ", "œ", "P", "p", "Q", "q", "R", "r", "Ŕ", "ŕ", "Ř", "ř", "Ŗ", "ŗ", "Ṛ", "ṛ", "Ṝ", "ṝ",
     if (typeof $.fn.textSelection !== 'undefined') {
    "S", "s", "Ś", "ś", "Ŝ", "ŝ", "Š", "š", "Ş", "ş", "Ṣ", "ṣ", "ß", "T", "t", "Ť", "ť", "Ţ", "ţ", "Ṭ", "ṭ", "Þ",
      $txtarea.textSelection('encapsulateSelection', {
    "þ", "U", "u", "Ú", "ú", "Ù", "ù", "Û", "û", "Ü", "ü", "Ǔ", "ǔ", "Ŭ", "ŭ", "Ū", "ū", "Ũ", "ũ", "Ů", "ů", "Ų",  
        'pre': tagOpen,
    "ų", "Ű", "ű", "Ǘ", "ǘ", "Ǜ", "ǜ", "Ǚ", "ǚ", "Ǖ", "ǖ", "V", "v", "W", "w", "Ŵ", "ŵ", "X", "x", "Y", "y", "Ý", "ý",
        'peri': sampleText,
    "Ŷ", "ŷ", "Ÿ", "ÿ", "Ỹ", "ỹ", "Ȳ", "ȳ", "Z", "z", "Ź", "ź", "Ż", "ż", "Ž", "ž", "ß", "Ð", "ð", "Þ", "þ", "Ə", "ə"]
        'post': tagClose
  ],
      });
  "Classical Greek":[
      return;
     { "lang":"grc", "font-family":"'Arial Unicode MS','Lucida Sans Unicode','MS Mincho',Arial,sans-serif;" },
    }
    ["Α", "α", "Ά", "ά", "Β", "β", "Γ", "γ", "Δ", "δ", "Ε", "ε", "Έ", "έ", "Ζ", "ζ", "Η", "η", "Ή", "ή", "Θ", "θ", "Ι",
    "ι", "Ί", "ί", "Ϊ", "ϊ", "ΐ", "Κ", "κ", "Λ", "λ", "Μ", "μ", "Ν", "ν", "Ξ", "ξ", "Ο", "ο", "", "Ό", "ό", "Π", "π",
    "Ρ", "ρ", "Σ", "σ", "ς", "Τ", "τ", "Υ", "υ", "Ϋ", "ϋ", "Ύ", "ύ", "ΰ", "Φ", "φ", "Χ", "χ", "Ψ", "ψ", "Ω", "ω", "Ώ",
    "ώ", ";", "·", "ἀ", "ἁ", "ὰ", "ᾶ", "ἂ", "ἃ", "ἄ", "ἅ", "ἆ", "ἇ", "ᾳ", "ᾀ", "ᾁ", "ᾴ", "ᾲ", "ᾷ", "ᾄ", "ᾅ", "ᾂ", "ᾃ",
    "ᾆ", "ᾇ", "ἐ", "ἑ", "ὲ", "ἔ", "ἕ", "ἒ", "ἓ", "ἠ", "ἡ", "ὴ", "ῆ", "ἤ", "ἢ", "ἣ", "ἥ", "ἦ", "ἧ", "ῃ", "ῄ", "ῂ", "ῇ",
    "ᾐ", "ᾑ", "ᾔ", "ᾒ", "ᾕ", "ᾓ", "ᾖ", "ᾗ", "ἰ", "ἱ", "ὶ", "ῖ", "ἴ", "ἲ", "ἵ", "ἳ", "ἶ", "ἷ", "ὸ", "ὀ", "ὁ", "ὄ", "ὅ",
    "ὂ", "ὃ", "ῤ", "ῥ", "ὐ", "ὑ", "ὺ", "ῦ", "ὔ", "ὕ", "ὒ", "ὓ", "ὖ", "ὗ", "ὠ", "ὡ", "ὼ", "ῶ", "ὤ", "ὢ", "ὥ", "ὣ", "ὦ",
    "ὧ", "ῳ", "ῴ", "ῲ", "ῷ", "ᾠ", "ᾡ", "ᾤ", "ᾢ", "ᾥ", "ᾣ", "ᾦ", "ᾧ", "`", "᾿", "῾", "῍", "῎", "῏", "῟", "῞", "῝", "῍",
    "῎", "Ϝ", "ϝ", "Ϙ", "ϙ", "Ϡ", "ϡ"]
  ],
  "Cyrillic":[
    ["А", "а", "Б", "б", "В", "в", "Г", "г", "Ґ", "ґ", "Ѓ", "ѓ", "Д", "д", "Ђ", "ђ", "Е", "е", "Ё", "ё", "Є", "є",
    "Ж", "ж", "З", "з", "Ѕ", "ѕ", "И", "и", "І", "і", "Ї", "ї", "Й", "й", "Ј", "ј", "К", "к", "Ќ", "ќ", "Л", "л",
    "Љ", "љ", "М", "м", "Н", "н", "Њ", "њ", "О", "о", "П", "п", "Р", "р", "С", "с", "Т", "т", "Ћ", "ћ", "У", "у",
    "Ў", "ў", "Ф", "ф", "Х", "х", "Ц", "ц", "Ч", "ч", "Џ", "џ", "Ш", "ш", "Щ", "щ", "Ъ", "ъ", "Ы", "ы", "Ь", "ь",
    "Э", "э", "Ю", "ю", "Я", "я", "Ә", "ә", "Ө", "ө", "Ғ", "ғ", "Җ", "җ", "Қ", "қ", "Ҝ", "ҝ", "Ң", "ң", "Ү", "ү",
    "Ұ", "ұ", "Ҳ", "ҳ", "Ҹ", "ҹ", "Һ", "һ", "Ҕ", "ҕ", "Ӣ", "ӣ", "Ӯ", "ӯ", "Ҙ", "ҙ", "Ҡ", "ҡ", "Ҥ", "ҥ", "Ҫ", "ҫ",
    "Ӑ", "ӑ", "Ӓ", "ӓ", "Ӕ", "ӕ", "Ӗ", "ӗ", "Ӱ", "ӱ", "Ӳ", "ӳ", "Ӹ", "ӹ", "Ӏ", "Ҟ", "ҟ", "Ҧ", "ҧ", "Ҩ", "ҩ", "Ҭ",
    "ҭ", "Ҵ", "ҵ", "Ҷ", "ҷ", "Ҽ", "ҽ", "Ҿ", "ҿ", "Ӂ", "ӂ", "Ӄ", "ӄ", "Ӈ", "ӈ", "Ӌ", "ӌ", "Ӛ", "ӛ", "Ӝ", "ӝ", "Ӟ",
    "ӟ", "Ӡӡ", "Ӥ", "ӥ", "Ӧ", "ӧ", "Ӫ", "ӫ", "Ӵ", "ӵ"]
  ],
  "Vietnamese":[
    { "lang":"vi" },
    ["À", "à", "Ả", "ả", "Á", "á", "Ạ", "ạ", "Ã", "ã", "Ă", "ă", "Ằ", "ằ", "Ẳ", "ẳ", "Ẵ", "ẵ", "Ắ", "ắ", "Ặ",
    "ặ", "Â", "â", "Ầ", "ầ", "Ẩ", "ẩ", "Ẫ", "ẫ", "Ấ", "ấ", "Ậ", "ậ", "Đ", "đ", "È", "è", "Ẻ", "ẻ", "Ẽ", "ẽ",
    "É", "é", "Ẹ", "ẹ", "Ê", "ê", "Ề", "ề", "Ể", "ể", "Ễ", "ễ", "Ế", "ế", "Ệ", "ệ", "Ỉ", "ỉ", "Ĩ", "ĩ", "Í",
    "í", "Ị", "ị", "Ì", "ì", "Ỏ", "ỏ", "Ó", "ó", "Ọ", "ọ", "Ò", "ò", "Õ", "õ", "Ô", "ô", "Ồ", "ồ", "Ổ", "ổ",
    "Ỗ", "ỗ", "Ố", "ố", "Ộ", "ộ", "Ơ", "ơ", "Ờ", "ờ", "Ở", "ở", "Ỡ", "ỡ", "Ớ", "ớ", "Ợ", "ợ", "Ù", "ù", "Ủ",
    "ủ", "Ũ", "ũ", "Ú", "ú", "Ụ", "ụ", "Ư", "ư", "Ừ", "ừ", "Ử", "ử", "Ữ", "ữ", "Ứ", "ứ", "Ự", "ự", "Ỳ", "ỳ",
    "Ỷ", "ỷ", "Ỹ", "ỹ", "Ỵ", "ỵ", "Ý", "ý"]
  ]
};
};
window.EditTools = EditTools = {
 
  createSelector: function () {
addOnloadHook(function() {
    var $spec = $('#specialchars');
addOnloadHook(function() {
    var $sb = $('#specialchars p.specialbasic');
  var box;
  function loadCommonsTools() {
    // Only care if there is more than one
     function selectSubset() {
    if (!$spec.length || $sb.length <= 1) return;
       var pp = box.getElementsByTagName("p");
       for (var i=0; i<pp.length; ++i) {
    var $sel = $('<select>');
        pp[i].style["display"] = "none";
      }
    $sel.change(function () {
      // show/create current subset
      EditTools.chooseCharSubset();
      var id = sel.options[sel.selectedIndex].value;
    });
      var p = document.getElementById(id);
      if(!p) {
     $sb.each(function (i) {
        p = document.createElement('p');
       var id = $(this).attr('id').replace(/.([0-9A-F][0-9A-F])/g, '%$1').replace(/_/g, ' ');
        p.setAttribute("id", id);
       $sel.append('<option value='+ i +'>' + decodeURIComponent (id) + '</option>');
        p.setAttribute("class", "mwEdittoolsLanguage");
    });
        createTokens(p, charinsert[id.substr("mwEdittools--".length)]);
         box.appendChild(p);
    $spec.prepend($sel);
      }
      p.style["display"] = "inline";
    this.chooseCharSubset();
  },
  chooseCharSubset: function () {
    var $sb = $('#specialchars p.specialbasic');
    var id = $('#specialchars select').val();
    var $wanted = $sb.eq(id);
    this.makeButtons($wanted);
    $sb.hide();
    $wanted.css('display', 'inline');
  },
  bindOnClick: function ($button, _this) {
    var onclick = _this.getAttribute("onclick");
    // if onclick is not a function, it's not IE7, so use setAttribute
    if('function' !== typeof onclick) {
         $button[0].setAttribute('onclick', onclick); // for FF,IE8,Chrome
    // if onclick is a function, use the IE7 method and call onclick() in the anonymous function
    } else {
        $button[0].onclick = function() {
            onclick();
        }; // for IE7
     }
     }
  },
   
    function createTokens(paragraph, outerArr) {
  makeButtons: function ($wanted) {
      var buttons;
    var $links = $wanted.find('a');
     
    var _this = this;
      function insertInner(elem) {
        var a = false, ins;
    $links.each(function () {
        switch(typeof(elem)) {
      var $button = $('<button type="button">');
          case("string"): {
      $button.text($(this).text());
            ins = function() {
              insertTags(elem, "", "");
      _this.bindOnClick($button, this);
              return false;
            };
      $(this).replaceWith($button);
            a = document.createElement("a");
      $(this).blur();
            a.setAttribute("title", elem);
    });
            a.appendChild(document.createTextNode(elem));
    $wanted.contents().not('button').remove();
          } break;
  },
          case("array"):
  makeToolbarButtons: function () {
          case("object"): {
    var _this = this;
            ins = function() {
              insertTags(elem[0], elem[1] || "", elem[2] || "");
    // Add  Edittool section
              return false;
    $('#wpTextbox1').wikiEditor('addToToolbar', {
            };
       'sections': {
            a = document.createElement("a");
         'Edittools': {
            a.setAttribute("title", elem[3] || (elem[0] + (elem[2] || "…") + (elem[1] || "")));
           'type': 'booklet',
            a.appendChild(document.createTextNode(elem[0] + (elem[1] || "")));
           'label': 'Edittools',
          }; break;
          'pages': {
        }
             'Edittools1': {
        if(a !== false) {
               'layout': 'characters',
          a.onclick = ins;
               'label': 'Edittools2'
          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) {
    var $section = $('.page-Edittools1 div');
        if(insertOuter(outerArr[i])) {
    var $links = $('#specialchars p.specialbasic').eq(0).find('a');
          var s = document.createElement("span");
    $links.each(function () {
          s.appendChild(document.createTextNode("\xA0\xA0•\xA0 "));
      var $button = $('<span>');
          s.style["font-weight"] = "bold";
      $button.text($(this).text());
          paragraph.appendChild(s);
        }
      _this.bindOnClick($button, this);
      }
      $section.append($button);
       insertOuter(outerArr[outerArr.length-1]);
    });
    $('.mw-editTools').remove();
  },
  last_active_textfield: null,
  enableForAllFields: function () {
    $('textarea, input').focus(function () {
       EditTools.last_active_textfield = this.id;
    });
  },
  getTextArea: function () {
    var $txtarea = {};
    if (EditTools.last_active_textfield !== null) $txtarea = $('#' + EditTools.last_active_textfield).eq(0);
    if ($txtarea.length !== 1) {
      $txtarea = $('#bodyContent textarea').eq(0);
     }
     }
     return $txtarea;
      
  },
     //create drop-down select
     var sel = document.createElement("select");
  registerTextField : function (evt)
     for(var id in charinsert) {
  {
      var op = document.createElement("option");
     var e = evt || window.event;
       op.setAttribute("value", "mwEdittools--" + id);
     var node = e.target || e.srcElement;
       op.appendChild(document.createTextNode(id));
    if (!node) return;
       sel.appendChild(op);
     EditTools.last_active_textfield = node.id;
    return true;
  },
  setup: function () {
    //Decide whether to use the toolbar or the bottom div
    if ( ( typeof oldEdittools !== 'undefined' && oldEdittools === true ) || $('#wpUploadDescription').length || !$.wikiEditor || !$.wikiEditor.isSupported()) {
       EditTools.createSelector();
       EditTools.enableForAllFields();
    } else {
      EditTools.makeToolbarButtons();
       EditTools.enableForAllFields();
     }
     }
    sel.setAttribute("title", "Zeichensatz auswählen");
    sel.onchange = sel.onkeyup = selectSubset;
    box.appendChild(sel);
    box.appendChild(document.createTextNode(" "));
    selectSubset();
    return false;
   }
   }
};
 
$(document).ready(function () {
  //get div#mw-editTools
    if ( $('#specialchars').length !== 1 ) return; // Don't do anything if no edittools present.
  box = document.getElementById('mw-editTools');
    EditTools.setup();
  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();
})
});
});
// </source>
}( jQuery ));

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();
})
});