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))
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
// copied from [[mw:User:Alex Smotrov/edittools.js]], modified for use on the English Wikipedia.
var charinsert = {
// enableForAllFields() feature from [[commons:MediaWiki:Edittools.js]]
  "Standard":[
// combined and modified by [[User:Ilmari Karonen]]
    [ "’", ["‚","‘"], ["“","”"], ["‘",""], ["«","»"], ["‹","›"], ["–","","","Hyphen"] ],
// after making changes to this page and testing them, update the number after "edittools-version-" in [[MediaWiki:Edittools]] to purge the cache for everyone
    [ "+", ["−","","","Minus"], "#", "*", "§", "$", "¿", "¡", "‣", "•", ["〈","〉"], "…" ],
    [ [" ","","","Non-breakable space"], ["[[","]]","","Wikilink"], "|", ["{{","}}"], ["[[User:The Clay Camel|The Clay Camel]] 18:02, 13 March 2012 (UTC)","","","Signature"] ],
if (typeof (EditTools_set_focus) == 'undefined')
    [ ["<poem>","<\/poem>"], ["<tt>","<\/tt>"], ["<nowiki>","<\/nowiki>"], ["<pre>","<\/pre>"], ["<code>","<\/code>"],
  var EditTools_set_focus = true;
      ["<noinclude>","<\/noinclude>"], ["<includeonly>","<\/includeonly>"], ["[[Category:","]]"], ["[[File:","]]"],
      ["{{filepath:","}}"], ["{{DEFAULTSORT:","}}"], "{{NameSorter}}", ["#REDIRECT [[","]]"] ]
if (typeof (EditTools_set_focus_initially) == 'undefined')
  ],
  var EditTools_set_focus_initially = EditTools_set_focus;
 
  "Latin":[
var EditTools =
    ["A", "a", "Á", "á", "À", "à", "Â", "â", "Ä", "ä", "Ǎ", "ǎ", "Ă", "ă", "Ā", "ā", "Ã", "ã", "Å", "å", "Ą", "ą",
{
    "Æ", "æ", "Ǣ", "ǣ", "B", "b", "C", "c", "Ć", "ć", "Ċ", "ċ", "Ĉ", "ĉ", "Č", "č", "Ç", "ç", "D", "d", "Ď", "ď",
  charinsert : {
    "Đ", "đ", "Ḍ", "ḍ", "Ð", "ð", "E", "e", "É", "é", "È", "è", "Ė", "ė", "Ê", "ê", "Ë", "ë", "Ě", "ě", "Ĕ", "ĕ",  
    'Insert': ' – — ‘+’ “+” ° ″ ′ ≈ ≠ ≤ ≥ ± − × ÷ √ ← → · §  Sign_your_posts_on_talk_pages: ~~\~~  Cite_your_sources: <ref>+</ref>',
     "Ē", "ē", "Ẽ", "ẽ", "Ę", "ę", "Ə", "ə", "F", "f", "G", "g", "Ġ", "ġ", "Ĝ", "ĝ", "Ğ", "ğ", "Ģ", "ģ", "H", "h",  
    'Wiki markup': 'Insert:  – — ‘+’ “+” ° ″ ′ ≈ ≠ ≤ ≥ ± − × ÷ √ ← → · § ~~\~~ <ref>+</ref>  Wiki_markup:  {\{+}} {\{\{+}}}  |  [+] [\[+]]  [\[Category:+]] #REDIRECT.[\[+]]  &nbsp;  <s>+</s> <sup>+</sup> <sub>+</sub> <code>+</code> <pre>+</pre> <blockquote>+</blockquote> <ref.name="+"/> {\{#tag:ref|+|group="nb"|name=""}}  {\{Reflist}}  <references/>  <includeonly>+</includeonly>  <noinclude>+</noinclude>  {\{DEFAULTSORT:+}}  <nowiki>+</nowiki>  <!--.+_-->  <span.class="plainlinks">+</span>',
    "Ĥ", "ĥ", "Ħ", "ħ", "Ḥ", "ḥ", "I", "i", "İ", "ı", "Í", "í", "Ì", "ì", "Î", "î", "Ï", "ï", "Ǐ", "ǐ", "Ĭ", "ĭ",
    'Symbols': '~ | ¡¿†‡↔↑↓•¶  # ½⅓⅔¼¾⅛⅜⅝⅞∞  ‘+’ “+” ‹+› «+» ⟨+⟩  ¤₳฿₵¢₡₢$₫₯€₠₣ƒ₴₭₤ℳ₥₦№₧₰£៛₨₪৳₮₩¥  ♠♣♥♦  m² m³  ♭♯♮  ©®™ ◌ {\{Unicode|+}}',  
     "Ī", "ī", "Ĩ", "ĩ", "Į", "į", "J", "j", "Ĵ", "ĵ", "K", "k", "Ķ", "ķ", "L", "l", "Ĺ", "ĺ", "Ŀ", "ŀ", "Ľ", "ľ",  
    '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 Ź ź Ż ż Ž ž  ß Ð ð Þ þ Ŋ ŋ Ə ə  {\{Unicode|+}}',
     "Ļ", "ļ", "Ł", "ł", "Ḷ", "ḷ", "Ḹ", "ḹ", "M", "m", "Ṃ", "ṃ", "N", "n", "Ń", "ń", "Ň", "ň", "Ñ", "ñ", "Ņ", "ņ",
    'Greek': 'ΆάΈέΉήΊίΌόΎύΏώ  ΑαΒβΓγΔδ  ΕεΖζΗηΘθ  ΙιΚκΛλΜμ  ΝνΞξΟοΠπ  ΡρΣσςΤτΥυ  ΦφΧχΨψΩω  ᾼᾳᾴᾺὰᾲᾶᾷἈἀᾈᾀἉἁᾉᾁἌἄᾌᾄἊἂᾊᾂἎἆᾎᾆἍἅᾍᾅἋἃᾋᾃἏἇᾏᾇ  ῈὲἘἐἙἑἜἔἚἒἝἕἛἓ  ῌῃῄῊὴῂῆῇἨἠᾘᾐἩἡᾙᾑἬἤᾜᾔἪἢᾚᾒἮἦᾞᾖἭἥᾝᾕἫἣᾛᾓἯἧᾟᾗ  ῚὶῖἸἰἹἱἼἴἺἲἾἶἽἵἻἳἿἷ  ῸὸὈὀὉὁὌὄὊὂὍὅὋὃ  ῤῬῥ  ῪὺῦὐὙὑὔὒὖὝὕὛὓὟὗ  ῼῳῴῺὼῲῶῷὨὠᾨᾠὩὡᾩᾡὬὤᾬᾤὪὢᾪᾢὮὦᾮᾦὭὥᾭᾥὫὣᾫᾣὯὧᾯᾧ  {\{Polytonic|+}}',
    "Ṇ", "ṇ", "O", "o", "Ó", "ó", "Ò", "ò", "Ô", "ô", "Ö", "ö", "Ǒ", "ǒ", "Ŏ", "ŏ", "Ō", "ō", "Õ", "õ", "Ǫ", "ǫ",
    'Cyrillic': 'АаБбВвГг  ҐґЃѓДдЂђ  ЕеЁёЄєЖж  ЗзЅѕИиІі  ЇїЙйЈјКк  ЌќЛлЉљМм  НнЊњОоПп  РрСсТтЋћ  УуЎўФфХх  ЦцЧчЏџШш  ЩщЪъЫыЬь  ЭэЮюЯя ӘәӨөҒғҖҗ ҚқҜҝҢңҮү ҰұҲҳҸҹҺһ  ҔҕӢӣӮӯҘҙ  ҠҡҤҥҪҫӐӑ  ӒӓӔӕӖӗӰӱ  ӲӳӸӹӀ  ҞҟҦҧҨҩҬҭ  ҴҵҶҷҼҽҾҿ  ӁӂӃӄӇӈӋӌ  ӚӛӜӝӞӟӠӡ  ӤӥӦӧӪӫӴӵ  ́',
    "Ő", "ő", "Ø", "ø", "Œ", "œ", "P", "p", "Q", "q", "R", "r", "Ŕ", "ŕ", "Ř", "ř", "Ŗ", "ŗ", "Ṛ", "ṛ", "Ṝ", "ṝ",
    'Hebrew': 'אבגדהוזחטיךכלםמןנסעףפץצקרשת  ׳ ״  װױײ',
    "S", "s", "Ś", "ś", "Ŝ", "ŝ", "Š", "š", "Ş", "ş", "Ṣ", "ṣ", "ß", "T", "t", "Ť", "ť", "Ţ", "ţ", "Ṭ", "ṭ", "Þ",
     'Arabic': '  Transcription: ʾ ṯ ḥ ḫ ẖ ḏ š ṣ ḍ ṭ ẓ ʿ ġ ẗ ا ﺁ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه ة و ي ى ء أ إ ؤ ئ',
    "þ", "U", "u", "Ú", "ú", "Ù", "ù", "Û", "û", "Ü", "ü", "Ǔ", "ǔ", "Ŭ", "ŭ", "Ū", "ū", "Ũ", "ũ", "Ů", "ů", "Ų",
    'IPA (English)': 'ˈ ˌ ŋ ɡ tʃ dʒ ʃ ʒ θ ð ʔ  iː ɪ uː ʊ ʌ ɜr eɪ ɛ æ oʊ ɒ ɔː ɔɪ ɔr ɑː ɑr aɪ aʊ  ə ər ɨ ɵ ʉ  {\{IPA-en|+}} {\{IPA|/+/}} ⟨+⟩',
    "ų", "Ű", "ű", "Ǘ", "ǘ", "Ǜ", "ǜ", "Ǚ", "ǚ", "Ǖ", "ǖ", "V", "v", "W", "w", "Ŵ", "ŵ", "X", "x", "Y", "y", "Ý", "ý",
    'IPA': 'ʈɖɟɡɢʡʔ  ɸβθðʃʒɕʑʂʐçʝɣχʁħʕʜʢɦ  ɱɳɲŋɴ  ʋɹɻɰ  ʙⱱʀɾɽ  ɬ ɮ ɺ ɭʎʟ  ʍɥɧ  ʼ ɓɗʄɠʛ  ʘǀǃǂǁ  ɨʉɯ ɪʏʊ øɘɵɤ ə ɛœɜɞʌɔ æ ɐ ɶɑɒ  ʰʱʷʲˠˤˀ ᵊ k̚ ⁿˡ  ˈˌːˑ t̪ d̪ s̺ s̻ θ̼ s̬ n̥ ŋ̊ a̤ a̰  β̞ ˕ r̝ ˔ o˞ ɚ ɝ e̘ e̙ u̟ i̠ ɪ̈ e̽ ɔ̹ ɔ̜ n̩ ə̆ ə̯ ə̃ ȷ̃ ɫ z̴ ə̋ ə́ ə̄ ə̀ ə̏ ə̌ ə̂ ə᷄ ə᷅ ə᷇ ə᷆ ə᷈ ə᷉ t͡ʃ d͡ʒ t͜ɬ ‿  ˥ ˦ ˧ ˨ ˩ ꜛ ꜜ | ‖ ↗ ↘  k͈ s͎ {\{IPA|+}}',
    "Ŷ", "ŷ", "Ÿ", "ÿ", "Ỹ", "ỹ", "Ȳ", "ȳ", "Z", "z", "Ź", "ź", "Ż", "ż", "Ž", "ž", "ß", "Ð", "ð", "Þ", "þ", "Ə", "ə"]
    'Math and logic': '− × ÷ ⋅ ° ∗ ∘ ± ∓ ≤ ≥ ≠ ≡ ≅ ≜ ≝ ≐ ≃ ≈ ⊕ ⊗ ⇐ ⇔ ⇒ ∞ ← ↔ → ≪ ≫ ∝ √ ∤ ≀ ◅ ▻ ⋉ ⋊ ⋈ ∴ ∵ ↦ ¬ ∧ ∨ ⊻ ∀ ∃ ∈ ∉ ∋ ⊆ ⊈ ⊊ ⊂ ⊄ ⊇ ⊉ ⊋ ⊃ ⊅ ∪ ∩ ∑ ∏ ∐ ′ ∫ ∬ ∭ ∮ ∇ ∂ ∆ ∅ ℂ ℍ ℕ ℙ ℚ ℝ ℤ ℵ ⌊ ⌋ ⌈ ⌉ ⊤ ⊥ ⊢ ⊣ ⊧ □ ∠ ⟨ ⟩ {\{frac|+|}} &nbsp; &minus; <math>+</math> {\{math|+}}'
  ],
  },
  "Classical Greek":[
    { "lang":"grc", "font-family":"'Arial Unicode MS','Lucida Sans Unicode','MS Mincho',Arial,sans-serif;" },
  charinsertDivider : "\240",
    ["Α", "α", "Ά", "ά", "Β", "β", "Γ", "γ", "Δ", "δ", "Ε", "ε", "Έ", "έ", "Ζ", "ζ", "Η", "η", "Ή", "ή", "Θ", "θ", "Ι",
     "ι", "Ί", "ί", "Ϊ", "ϊ", "ΐ", "Κ", "κ", "Λ", "λ", "Μ", "μ", "Ν", "ν", "Ξ", "ξ", "Ο", "ο", "", "Ό", "ό", "Π", "π",
  extraCSS : '\
    "Ρ", "ρ", "Σ", "σ", "ς", "Τ", "τ", "Υ", "υ", "Ϋ", "ϋ", "Ύ", "ύ", "ΰ", "Φ", "φ", "Χ", "χ", "Ψ", "ψ", "Ω", "ω", "Ώ",
    #editpage-specialchars {\
    "ώ", ";", "·", "ἀ", "ἁ", "ὰ", "ᾶ", "ἂ", "ἃ", "ἄ", "ἅ", "ἆ", "ἇ", "ᾳ", "ᾀ", "ᾁ", "ᾴ", "ᾲ", "ᾷ", "ᾄ", "ᾅ", "ᾂ", "ᾃ",
      margin-top: 15px;\
    "ᾆ", "ᾇ", "ἐ", "ἑ", "ὲ", "ἔ", "ἕ", "ἒ", "ἓ", "ἠ", "ἡ", "ὴ", "ῆ", "ἤ", "ἢ", "ἣ", "ἥ", "ἦ", "ἧ", "ῃ", "ῄ", "ῂ", "ῇ",
      border-width: 1px;\
    "ᾐ", "ᾑ", "ᾔ", "ᾒ", "ᾕ", "ᾓ", "ᾖ", "ᾗ", "ἰ", "ἱ", "ὶ", "ῖ", "ἴ", "ἲ", "ἵ", "ἳ", "ἶ", "ἷ", "ὸ", "ὀ", "ὁ", "ὄ", "ὅ",
      border-style: solid;\
    "ὂ", "ὃ", "ῤ", "ῥ", "ὐ", "ὑ", "ὺ", "ῦ", "ὔ", "ὕ", "ὒ", "ὓ", "ὖ", "ὗ", "ὠ", "ὡ", "ὼ", "ῶ", "ὤ", "ὢ", "ὥ", "ὣ", "ὦ",
      border-color: #aaaaaa;\
    "ὧ", "ῳ", "ῴ", "ῲ", "ῷ", "ᾠ", "ᾡ", "ᾤ", "ᾢ", "ᾥ", "ᾣ", "ᾦ", "ᾧ", "`", "᾿", "῾", "῍", "῎", "῏", "῟", "῞", "῝", "῍",
      padding: 2px;\
    "῎", "Ϝ", "ϝ", "Ϙ", "ϙ", "Ϡ", "ϡ"]
    }\
  ],
    #editpage-specialchars a {\
  "Cyrillic":[
    }\
    ["А", "а", "Б", "б", "В", "в", "Г", "г", "Ґ", "ґ", "Ѓ", "ѓ", "Д", "д", "Ђ", "ђ", "Е", "е", "Ё", "ё", "Є", "є",
    #editpage-specialchars a:hover {\
    "Ж", "ж", "З", "з", "Ѕ", "ѕ", "И", "и", "І", "і", "Ї", "ї", "Й", "й", "Ј", "ј", "К", "к", "Ќ", "ќ", "Л", "л",
    }\
    "Љ", "љ", "М", "м", "Н", "н", "Њ", "њ", "О", "о", "П", "п", "Р", "р", "С", "с", "Т", "т", "Ћ", "ћ", "У", "у",
  ',
    "Ў", "ў", "Ф", "ф", "Х", "х", "Ц", "ц", "Ч", "ч", "Џ", "џ", "Ш", "ш", "Щ", "щ", "Ъ", "ъ", "Ы", "ы", "Ь", "ь",
    "Э", "э", "Ю", "ю", "Я", "я", "Ә", "ә", "Ө", "ө", "Ғ", "ғ", "Җ", "җ", "Қ", "қ", "Ҝ", "ҝ", "Ң", "ң", "Ү", "ү",
  appendExtraCSS : function ()
    "Ұ", "ұ", "Ҳ", "ҳ", "Ҹ", "ҹ", "Һ", "һ", "Ҕ", "ҕ", "Ӣ", "ӣ", "Ӯ", "ӯ", "Ҙ", "ҙ", "Ҡ", "ҡ", "Ҥ", "ҥ", "Ҫ", "ҫ",
  {
    "Ӑ", "ӑ", "Ӓ", "ӓ", "Ӕ", "ӕ", "Ӗ", "ӗ", "Ӱ", "ӱ", "Ӳ", "ӳ", "Ӹ", "ӹ", "Ӏ", "Ҟ", "ҟ", "Ҧ", "ҧ", "Ҩ", "ҩ", "Ҭ",
    appendCSS(EditTools.extraCSS);
    "ҭ", "Ҵ", "ҵ", "Ҷ", "ҷ", "Ҽ", "ҽ", "Ҿ", "ҿ", "Ӂ", "ӂ", "Ӄ", "ӄ", "Ӈ", "ӈ", "Ӌ", "ӌ", "Ӛ", "ӛ", "Ӝ", "ӝ", "Ӟ",
  },
    "ӟ", "Ӡӡ", "Ӥ", "ӥ", "Ӧ", "ӧ", "Ӫ", "ӫ", "Ӵ", "ӵ"]
  ],
  "Vietnamese":[
  cookieName : 'edittoolscharsubset',
    { "lang":"vi" },
    ["À", "à", "Ả", "ả", "Á", "á", "Ạ", "ạ", "Ã", "ã", "Ă", "ă", "Ằ", "ằ", "Ẳ", "ẳ", "Ẵ", "ẵ", "Ắ", "ắ", "Ặ",
  createEditTools : function (placeholder)
    "ặ", "Â", "â", "Ầ", "ầ", "Ẩ", "ẩ", "Ẫ", "ẫ", "Ấ", "ấ", "Ậ", "ậ", "Đ", "đ", "È", "è", "Ẻ", "ẻ", "Ẽ", "ẽ",
  {
    "É", "é", "Ẹ", "ẹ", "Ê", "ê", "Ề", "ề", "Ể", "ể", "Ễ", "ễ", "Ế", "ế", "Ệ", "ệ", "Ỉ", "ỉ", "Ĩ", "ĩ", "Í",
    var box = document.createElement("div");
    "í", "Ị", "ị", "Ì", "ì", "Ỏ", "ỏ", "Ó", "ó", "Ọ", "ọ", "Ò", "ò", "Õ", "õ", "Ô", "ô", "Ồ", "ồ", "Ổ", "ổ",
    box.id = "editpage-specialchars";
    "Ỗ", "ỗ", "Ố", "ố", "Ộ", "ộ", "Ơ", "ơ", "Ờ", "ờ", "Ở", "ở", "Ỡ", "ỡ", "Ớ", "ớ", "Ợ", "ợ", "Ù", "ù", "Ủ",
    box.title = 'Click on the character or tag to insert it into the edit window';
    "ủ", "Ũ", "ũ", "Ú", "ú", "Ụ", "ụ", "Ư", "ư", "Ừ", "ừ", "Ử", "ử", "Ữ", "ữ", "Ứ", "ứ", "Ự", "ự", "Ỳ", "ỳ",
    "Ỷ", "ỷ", "Ỹ", "ỹ", "Ỵ", "ỵ", "Ý", "ý"]
     //append user-defined sets
  ]
    if (window.charinsertCustom)
};
for (id in charinsertCustom)
 
  if (!EditTools.charinsert[id]) EditTools.charinsert[id] = '';
addOnloadHook(function() {
addOnloadHook(function() {
    //create drop-down select
  var box;
    var prevSubset = 0, curSubset = 0;
  function loadCommonsTools() {
    var sel = document.createElement('select'), id;
    function selectSubset() {
    for (id in EditTools.charinsert)
      var pp = box.getElementsByTagName("p");
sel.options[sel.options.length] = new Option(id, id);
      for (var i=0; i<pp.length; ++i) {
    sel.selectedIndex = 0;
        pp[i].style["display"] = "none";
     sel.style.cssFloat = sel.style.styleFloat = 'left';
      }
    sel.style.marginRight = '5px';
      // show/create current subset
    sel.title = 'Choose character subset';
      var id = sel.options[sel.selectedIndex].value;
    sel.onchange = sel.onkeyup = selectSubset;
      var p = document.getElementById(id);
    box.appendChild(sel);
      if(!p) {
        p = document.createElement('p');
    //create "recall" switch
        p.setAttribute("id", id);
    if (window.editToolsRecall) {
        p.setAttribute("class", "mwEdittoolsLanguage");
var recall = document.createElement('span');
        createTokens(p, charinsert[id.substr("mwEdittools--".length)]);
recall.appendChild(document.createTextNode('↕')); // ↔
        box.appendChild(p);
recall.onclick = function () {
      }
  sel.selectedIndex = prevSubset;
      p.style["display"] = "inline";
  selectSubset();
    }
}
   
with (recall.style) { cssFloat = styleFloat = 'left'; marginRight = '5px'; cursor = 'pointer'; }
    function createTokens(paragraph, outerArr) {
box.appendChild(recall);
      var buttons;
    }
     
      function insertInner(elem) {
    // load latest selection from cookies
        var a = false, ins;
    try {
        switch(typeof(elem)) {
        var cookieRe = new RegExp ("(?:^|;)\\s*" + EditTools.cookieName + "=(\\d+)\\s*(?:;|$)");
          case("string"): {
        var m = cookieRe.exec(document.cookie);
            ins = function() {
        if (m && m.length > 1 && parseInt(m[1]) < sel.options.length)
              insertTags(elem, "", "");
          sel.selectedIndex = parseInt(m[1]);
              return false;
    } catch (err) { /* ignore */ }
            };
            a = document.createElement("a");
    placeholder.parentNode.replaceChild(box, placeholder);
            a.setAttribute("title", elem);
    selectSubset();
            a.appendChild(document.createTextNode(elem));
    return;
          } break;
          case("array"):
    function selectSubset ()
          case("object"): {
    {
            ins = function() {
//remember previous (for "recall" button)
              insertTags(elem[0], elem[1] || "", elem[2] || "");
prevSubset = curSubset;
              return false;
curSubset = sel.selectedIndex;
            };
        //save into cookies for persistence
            a = document.createElement("a");
        try {
            a.setAttribute("title", elem[3] || (elem[0] + (elem[2] || "…") + (elem[1] || "")));
          var expires = new Date ();
            a.appendChild(document.createTextNode(elem[0] + (elem[1] || "")));
          expires.setTime( expires.getTime() + 30 * 24 * 60 * 60 * 1000 );  // + 30 days
          }; break;
          document.cookie = EditTools.cookieName + "=" + curSubset + ";path=/;expires=" + expires.toUTCString();
        }
        } catch (err) { /* ignore */ }
        if(a !== false) {
//hide other subsets
          a.onclick = ins;
var pp = box.getElementsByTagName('p') ;
          a.setAttribute("href", "#");
for (var i=0; i<pp.length; i++)
          a.setAttribute("class", "mwEdittoolsButton");
  pp[i].style.display = 'none';
          buttons.appendChild(document.createTextNode(" "));
//show/create current subset
          buttons.appendChild(a);
var id = sel.options[curSubset].value;
        }
var p = document.getElementById(id);
      }
if (!p){
     
  p = document.createElement('p');
      function insertOuter(innerArr) {
  p.id = id;
        switch(typeof(innerArr)) {
  if (id == 'Arabic' || id == 'Hebrew'){ p.style.fontSize = '120%'; p.dir = 'rtl'; }
          case("object"):
  var tokens = EditTools.charinsert[id];
          case("array"):
  if (window.charinsertCustom && charinsertCustom[id]){
            var obj = false;
      if (tokens.length > 0) tokens += ' ';
            if(typeof(innerArr["class"]) === "string") {
      tokens += charinsertCustom[id];
              obj = true;
  }
              paragraph.setAttribute("class", innerArr["class"]);
  EditTools.createTokens(p, tokens);
  box.appendChild(p);
}
p.style.display = 'inline';
    }
  },
  createTokens : function (paragraph, str)
  {
    var tokens = str.split(' '), token, i, n;
    for (i = 0; i < tokens.length; i++) {
token = tokens[i];
n = token.indexOf('+');
if (token == '' || token == '_')
  addText(EditTools.charinsertDivider + ' ');
else if (token == '\n')
  paragraph.appendChild(document.createElement('br'));
else if (token == '___')
  paragraph.appendChild(document.createElement('hr'));
else if (token.charAt(token.length-1) == ':')  // : at the end means just text
  addBold(token);
else if (n == 0) // +<tag>  ->  <tag>+</tag>
  addLink(token.substring(1), '</' + token.substring(2), token.substring(1));
else if (n > 0) // <tag>+</tag>
  addLink(token.substring(0,n), token.substring(n+1));
else if (token.length > 2 && token.charCodeAt(0) > 127) //a string of insertable characters
  for (var j=0; j < token.length; j++) addLink(token.charAt(j), '');
else
  addLink(token, '');
     }
    return;
    function addLink (tagOpen, tagClose, name)
    {
        var handler;
        var dle = tagOpen.indexOf('\x10');
        if (dle > 0){
            var path = tagOpen.substring(dle+1).split('.');
            tagOpen = tagOpen.substring(0,dle);
            var handler = window;
            for (var i = 0; i < path.length; i++) {
                handler = handler[path[i]];
             }
             }
        } else {
            if(typeof(innerArr["lang"]) === "string") {
    tagOpen = tagOpen.replace(/\./g,' ');
              obj = true;
    tagClose = tagClose ? tagClose.replace(/_/g,' ') : '';
              paragraph.setAttribute("lang", innerArr["lang"]);
             handler = new Function( "evt", "insertTags('" + tagOpen + "', '" + tagClose + "', ''); return killEvt( evt );" );
            }
            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);
         }
         }
var a = document.createElement('a');
      }
name = name || tagOpen + tagClose;
      insertOuter(outerArr[outerArr.length-1]);
name = name.replace(/\\n/g,'');
     }
a.appendChild(document.createTextNode(name));
   
a.href = "#";
    //create drop-down select
addHandler( a, 'click', handler );
    var sel = document.createElement("select");
paragraph.appendChild(a);
    for(var id in charinsert) {
addText(' ');
      var op = document.createElement("option");
    }
      op.setAttribute("value", "mwEdittools--" + id);
    function addBold (text)
      op.appendChild(document.createTextNode(id));
    {
      sel.appendChild(op);
var b = document.createElement('b');
    }
b.appendChild(document.createTextNode(text.replace(/_/g,' ')));
    sel.setAttribute("title", "Zeichensatz auswählen");
paragraph.appendChild(b);
    sel.onchange = sel.onkeyup = selectSubset;
addText(' ');
    box.appendChild(sel);
    }      
    box.appendChild(document.createTextNode(" "));
    function addText (txt)
    selectSubset();
    {
    return false;
paragraph.appendChild(document.createTextNode(txt));
    }
  },
  enableForAllFields : function ()
  {
    if (typeof (insertTags) != 'function' || window.WikEdInsertTags) return;
    // insertTags from the site-wide /skins-1.5/common/edit.js just inserts in the first
    // textarea in the document. Evidently, that's not good if we have multiple textareas.
    // My first idea was to simply add a hidden textarea as the first one, and redefine
    // insertTags such that it copied first the last active textareas contents over to that hidden
    // field, set the cursor or selection there, let the standard insertTags do its thing, and
    // then copy the hidden field's text, cursor position and selection back to the currently
    // active field. Unfortunately, that is just as complex as simply copying the whole code
    // from wikibits to here and let it work on the right text field in the first place.
    var texts = document.getElementsByTagName ('textarea');  
    for (var i = 0; i < texts.length; i++) {
addHandler (texts[i], 'focus', EditTools.registerTextField);
    }
    // While we're at it, also enable it for input fields
    texts = document.getElementsByTagName ('input');
    for (var i = 0; i < texts.length; i++) {
if (texts[i].type == 'text') addHandler (texts[i], 'focus', EditTools.registerTextField);
    }
    insertTags = EditTools.insertTags; // Redefine the global insertTags
  },
  last_active_textfield : null,
  registerTextField : function (evt)
  {
    var e = evt || window.event;
    var node = e.target || e.srcElement;
    if (!node) return;
    EditTools.last_active_textfield = node.id;
    return true;
  },
  getTextArea : function ()
  {
    var txtarea = null;
    if (EditTools.last_active_textfield && EditTools.last_active_textfield != "")
txtarea = document.getElementById (EditTools.last_active_textfield);
    if (!txtarea) {
// Fallback option: old behaviour
if (document.editform) {
  txtarea = document.editform.wpTextbox1;
} else {
  // Some alternate form? Take the first one we can find
  txtarea = document.getElementsByTagName ('textarea');
  if (txtarea.length > 0) txtarea = txtarea[0]; else txtarea = null;
}
    }
    return txtarea;
  },
  insertTags : function (tagOpen, tagClose, sampleText)
  {
    var txtarea = EditTools.getTextArea ();
    if (!txtarea) return;
    /* Usability initiative compatibility */
    if ( typeof $j != 'undefined' && typeof $j.fn.textSelection != 'undefined' ) {
          $j( txtarea ).textSelection(
          'encapsulateSelection', { 'pre': tagOpen, 'peri': sampleText, 'post': tagClose }
          );
          return;
    }
    var selText, isSample = false;
    function checkSelectedText ()
    {
if (!selText) {
  selText = sampleText; isSample = true;
} else if (selText.charAt (selText.length - 1) == ' ') { // Exclude ending space char
  selText = selText.substring (0, selText.length - 1);
  tagClose += ' ';
}
    }
    if (document.selection && document.selection.createRange) { // IE/Opera
// Save window scroll position
var winScroll = 0;
if (document.documentElement && document.documentElement.scrollTop)
  winScroll = document.documentElement.scrollTop;
else if (document.body)
  winScroll = document.body.scrollTop;
// Get current selection 
txtarea.focus();
var range = document.selection.createRange();
selText = range.text;
// Insert tags
checkSelectedText ();
range.text = tagOpen + selText + tagClose;
// Mark sample text as selected
if (isSample && range.moveStart) {
  if (window.opera) tagClose = tagClose.replace (/\n/g, "");
  range.moveStart( 'character', - tagClose.length - selText.length);
  range.moveEnd ('character', - tagClose.length);
}
range.select (); 
// Restore window scroll position
if (document.documentElement && document.documentElement.scrollTop)
  document.documentElement.scrollTop = winScroll;
else if (document.body)
  document.body.scrollTop = winScroll;
    } else if (txtarea.selectionStart || txtarea.selectionStart == '0') { // Mozilla
// Save textarea scroll position
var textScroll = txtarea.scrollTop;
// Get current selection
txtarea.focus();
var startPos = txtarea.selectionStart;
var endPos  = txtarea.selectionEnd;
selText = txtarea.value.substring (startPos, endPos);
// Insert tags
checkSelectedText ();
txtarea.value = txtarea.value.substring (0, startPos)
+ tagOpen + selText + tagClose
+ txtarea.value.substring (endPos);
// Set new selection
if (isSample) {
  txtarea.selectionStart = startPos + tagOpen.length;
  txtarea.selectionEnd = startPos + tagOpen.length + selText.length;
} else {
  txtarea.selectionStart = startPos + tagOpen.length + selText.length + tagClose.length;
  txtarea.selectionEnd = txtarea.selectionStart;
}
// Restore textarea scroll position
txtarea.scrollTop = textScroll;
    }
  }, // end insertTags
  setup : function ()
  {
    var placeholder = document.getElementById("editpage-specialchars");
    if (!placeholder) return; // has this already been run once?
    EditTools.appendExtraCSS ();
    EditTools.createEditTools (placeholder);
    EditTools.enableForAllFields ();
   }
   }
 
}; // end EditTools
  //get div#mw-editTools
  box = document.getElementById('mw-editTools');
// No need to hook this, as the loading of this page is itself hooked.
  if(!box) { return; }
EditTools.setup();
 
  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();
})
});