МедияУики:Common.js

от Уикиречник

Направо към: навигация, търсене

Бележка: След съхранението е необходимо да изтриете кеша на браузъра, за да видите промените: Mozilla / Firefox / Safari: натиснете бутона Shift и щракнете върху Презареждане (Reload), или изберете клавишната комбинация Ctrl-Shift-R (Cmd-Shift-R за Apple Mac); IE: натиснете Ctrl и щракнете върху Refresh, или клавишната комбинация CTRL-F5; Konqueror: щракнете върху Презареждане или натиснете F5; Opera: вероятно е необходимо да изчистите кеша през менюто Tools→Preferences.

/* * * * * * * * * *   Edit tools data   * * * * * * * * * */
 
// знаци, от които ще се генерират бутони с insertTags()
var chars = {
"IPA": [
'a', 'ɐ', 'ɑ', 'ɒ', 'ʌ', 'æ', 'ɶ', 'e', 'ɘ', 'ə', 'ɛ', 'ɜ', 'œ', 'ɞ',
'o', 'ɔ', 'ɵ', 'ø', 'i', 'ɨ', 'ɪ', 'u', 'ʉ', 'ʊ', 'ɯ', 'y', 'ʏ', 'ɣ', '--',
'b', 'β', 'ʙ', 'c', 'ç', 'd', 'ɖ', 'ɗ', 'f', 'ɡ', 'ɢ', 'h', 'ɦ', 'ħ',
'j', 'ʝ', 'ɟ', 'k', 'l', 'ɭ', 'ɬ', 'ɮ', 'ʟ', 'm', 'ɱ', 'n', 'ɳ', 'ɲ',
'ŋ', 'ɴ', 'p', 'q', 'r', 'ɾ', 'ɿ', 'ɽ', 'ɻ', 'ʀ', 'ʁ', 's', 'ʂ', 'ʃ',
'ʅ', 'ʆ', 't', 'ʈ', 'ð', 'θ', 'ɸ', 'v', 'ʋ', 'ɰ', 'x', 'χ', 'ɣ', 'ɤ',
'ʎ', 'ʏ', 'z', 'ʐ', 'ʑ', 'ʒ', 'ʓ', 'ʕ', 'ʔ', 'ʖ', 'ʘ', 'ǂ', 'ʰ', 'ʷ',
'ʲ', 'ˠ', 'ˤ', 'ⁿ', 'ˡ', '--',
'z̥', 's̬', 't̬', 'l̩', 'm̩', 'n̩', 'ŋ̩', 'ɪ̯', 'ʊ̯', 'ɛ̃', 'ɪ̃', 'ɔ̃', '--',
'ˈ', 'ˌ', 'ː', '˘', 'ˑ', '.', '‿', '|', '‖'],
"AHD": ['ā', 'ă', 'ä', 'â', 'ē', 'ĕ', 'ī', 'ĭ', 'î', 'ō', 'ŏ', 'ô', 'ŭ',
'o͞o', 'o͝o', 'û', 'ə'],
"DMG": ['ʾ', 'ʿ', 'Ā', 'ā', 'Č', 'č', 'Ḍ', 'ḍ', 'Ḏ', 'ḏ', 'Ǧ', 'ǧ',
'Ġ', 'ġ', 'Ḥ', 'ḥ', 'Ḫ', 'ḫ', 'Ī', 'ī', 'ḷ', 'ŋ', 'Ṣ', 'ṣ', 'Š', 'š',
'Ṭ', 'ṭ', 'Ṯ', 'ṯ', 'Ū', 'ū', 'Ẓ', 'ẓ', 'Ẕ', 'ẕ', 'Ž', 'ž'],
"Арабски": [
'؛', '؟', 'ء', 'آ', 'أ', 'ؤ', 'إ', 'ئ', 'ا', 'ب', 'ة', 'ت', 'ث', 'ج', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ك', 'ل', 'م', 'ن', 'ه', 'و', 'ى', 'ي', '،'
],
"Виетнамски": [
'À', 'à', 'Ả', 'ả', 'Á', 'á', 'Ạ', 'ạ', 'Ã', 'ã', 'Ă', 'ă', 'Ằ', 'ằ',
'Ẳ', 'ẳ', 'Ẵ', 'ẵ', 'Ắ', 'ắ', 'Ặ', 'ặ', 'Â', 'â', 'Ầ', 'ầ', 'Ẩ', 'ẩ',
'Ẫ', 'ẫ', 'Ấ', 'ấ', 'Ậ', 'ậ', 'Đ', 'đ',
'È', 'è', 'Ẻ', 'ẻ', 'Ẽ', 'ẽ', 'É', 'é', 'Ẹ', 'ẹ', 'Ê', 'ê', 'Ề', 'ề',
'Ể', 'ể', 'Ễ', 'ễ', 'Ế', 'ế', 'Ệ', 'ệ',
'Ỉ', 'ỉ', 'Ĩ', 'ĩ', 'Í', 'í', 'Ị', 'ị', 'Ì', 'ì',
'Ỏ', 'ỏ', 'Ó', 'ó', 'Ọ', 'ọ', 'Ò', 'ò', 'Õ', 'õ', 'Ô', 'ô', 'Ồ', 'ồ',
'Ổ', 'ổ', 'Ỗ', 'ỗ', 'Ố', 'ố', 'Ộ', 'ộ', 'Ơ', 'ơ', 'Ờ', 'ờ', 'Ở', 'ở',
'Ỡ', 'ỡ', 'Ớ', 'ớ', 'Ợ', 'ợ',
'Ù', 'ù', 'Ủ', 'ủ', 'Ũ', 'ũ', 'Ú', 'ú', 'Ụ', 'ụ', 'Ư', 'ư', 'Ừ', 'ừ',
'Ử', 'ử', 'Ữ', 'ữ', 'Ứ', 'ứ', 'Ự', 'ự',
'Ỳ', 'ỳ', 'Ỷ', 'ỷ', 'Ỹ', 'ỹ', 'Ỵ', 'ỵ', 'Ý', 'ý'],
"Галисийски": [
'Á', 'á', 'À', 'à', 'Â', 'â', 'Ä', 'ä', 'É', 'é', 'È', 'è', 'Ê', 'ê', 'Ë', 'ë',
'Ì', 'ì', 'Î', 'î', 'Ï', 'ï', 'Ó', 'ó', 'Ò', 'ò', 'Ô', 'ô', 'Ö', 'ö', 'Ù', 'ù',
'Û', 'û', 'Ẁ', 'ẁ', 'Ŵ', 'ŵ', 'Ẅ', 'ẅ', 'Ý', 'ý', 'Ỳ', 'ỳ', 'Ŷ', 'ŷ', 'Ÿ', 'ÿ'],
"Гръцки": [
'Α', 'Ά', 'Β', 'Γ', 'Δ', 'Ε', 'Έ', 'Ζ', 'Η', 'Ή', 'Θ', 'Ι', 'Ί', 'Κ', 'Λ', 'Μ',
'Ν', 'Ξ', 'Ο', 'Ό', 'Π', 'Ρ', 'Σ', 'Τ', 'Υ', 'Ύ', 'Φ', 'Χ', 'Ψ', 'Ω', 'Ώ', '--',
'α', 'ά', 'β', 'γ', 'δ', 'ε', 'έ', 'ζ', 'η', 'ή', 'θ', 'ι', 'ί', 'κ', 'λ', 'μ',
'ν', 'ξ', 'ο', 'ό', 'π', 'ρ', 'σ', 'ς', 'τ', 'υ', 'ύ', 'φ', 'χ', 'ψ', 'ω', 'ώ'],
"Есперанто": ['Ĉ', 'ĉ', 'Ĝ', 'ĝ', 'Ĥ', 'ĥ', 'Ĵ', 'ĵ', 'Ŝ', 'ŝ', 'Ŭ', 'ŭ'],
"Естонски": ['Č', 'č', 'Š', 'š', 'Ž', 'ž', 'Õ', 'õ', 'Ä', 'ä', 'Ö', 'ö', 'Ü', 'ü'],
"Исландски": ['Á', 'á', 'Ð', 'ð', 'É', 'é', 'Í', 'í', 'Ó', 'ó', 'Ú', 'ú',
'Ý', 'ý', 'Þ', 'þ', 'Æ', 'æ', 'Ö', 'ö'],
"Идиш": [
'א', 'אַ', 'אָ', 'ב', 'בֿ', 'ג', 'ד', 'ה', 'ו', 'וּ', 'װ', 'ױ', 'ז', 'זש', 'ח', 'ט', 'י', 'יִ', 'ײ', 'ײַ', 'כ', 'ך', 'כּ', 'ל', 'ל+', 'מ', 'ם', 'נ', 'ן', 'ס', 'ע', 'ע+', 'פ', 'פּ', 'פֿ', 'ף', 'צ', 'ץ', 'ק', 'ר', 'ש', 'שׂ', 'תּ', 'ת', '׳', '״', '־'
],
"Испански": ['Á', 'á', 'É', 'é', 'Í', 'í', 'Ñ', 'ñ', 'Ó', 'ó',
'Ú', 'ú', 'Ü', 'ü', '¡', '¿'],
"Италиански": ['Á', 'á', 'À', 'à', 'É', 'é', 'È', 'è', 'Í', 'í',
'Ì', 'ì', 'Ó', 'ó', 'Ò', 'ò', 'Ú', 'ú', 'Ù', 'ù'],
"Каталонски": ['Á', 'á', 'À', 'à', 'Ç', 'ç', 'É', 'é', 'È', 'è', 'Ë', 'ë',
'Í', 'í', 'Ï', 'ï', 'Ó', 'ó', 'Ò', 'ò', 'Ö', 'ö', 'Ú', 'ú', 'Ù', 'ù'],
"Кирилски": [
'А', 'Б', 'В', 'Г', 'Ґ', 'Ѓ', 'Д', 'Ђ', 'Е', 'Є', 'Ё', 'Ж', 'З', 'Ѕ',
'И', 'І', 'Ї', 'Й', 'Ј', 'К', 'Ќ', 'Л', 'Љ', 'М', 'Н', 'Њ', 'О', 'Ө',
'П', 'Р', 'С', 'Т', 'Ћ', 'У', 'Ү', 'Ў', 'Ф', 'Х', 'Ц', 'Ч', 'Џ', 'Ш',
'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', '--',
'а', 'б', 'в', 'г', 'ґ', 'ѓ', 'д', 'ђ', 'е', 'є', 'ё', 'ж', 'з', 'ѕ',
'и', 'і', 'ї', 'й', 'ј', 'к', 'ќ', 'л', 'љ', 'м', 'н', 'њ', 'о', 'ө',
'п', 'р', 'с', 'т', 'ћ', 'у', 'ү', 'ў', 'ф', 'х', 'ц', 'ч', 'џ', 'ш',
'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'],
"Латвийски": [
'Ā', 'Č', 'Ē', 'Ģ', 'Ī', 'Ķ', 'Ļ', 'Ņ', 'Š', 'Ū', 'Ž', '--',
'ā', 'č', 'ē', 'ģ', 'ī', 'ķ', 'ļ', 'ņ', 'š', 'ū', 'ž'],
"Латински": [
'Á', 'á', 'Ć', 'ć', 'É', 'é', 'Í', 'í', 'Ó', 'ó', 'Ś', 'ś', 'Ú', 'ú',
'Ý', 'ý', 'Ǿ', 'ǿ', '--',
'À', 'à', 'È', 'è', 'Ì', 'ì', 'Ò', 'ò', 'Ù', 'ù', '--',
'Â', 'â', 'Ĉ', 'ĉ', 'Ê', 'ê', 'Ĝ', 'ĝ', 'Ĥ', 'ĥ', 'Î', 'î', 'Ĵ', 'ĵ', 'Ô', 'ô',
'ŝ', 'Ŝ', 'Û', 'û', '--',
'Ä', 'ä', 'Ë', 'ë', 'Ï', 'ï', 'Ö', 'ö', 'Ü', 'ü', 'ÿ', '--',
'Ã', 'ã', 'Ñ', 'ñ', 'Õ', 'õ', '--',
'Å', 'å', '--', 'Ç', 'ç', '--', 'Č', 'č', 'Š', 'š', 'ŭ', '--', 'Ł', 'ł', '--',
'Ő', 'ő', 'Ű', 'ű', '--', 'Ø', 'ø', '--',
'Ā', 'ā', 'Ē', 'ē', 'Ī', 'ī', 'Ō', 'ō', 'Ū', 'ū', 'Ȳ', 'ȳ', '--',
'Ă', 'ă', 'Ĕ', 'ĕ', 'Ğ', 'ğ', 'Ĭ', 'ĭ', 'Ŏ', 'ŏ', 'Ŭ', 'ŭ', 'Y̆', 'y̆', '--',
'ß', '--', 'Æ', 'æ', 'Œ', 'œ', '--', 'Ð', 'ð', 'Þ', 'þ'],
"Малтийски": ['Ċ', 'ċ', 'Ġ', 'ġ', 'Ħ', 'ħ', 'Ż', 'ż'],
"Немски": ['Ä', 'ä', 'Ö', 'ö', 'ß', 'Ü', 'ü'],
"Пинин": [
'Á', 'á', 'À', 'à', 'Ǎ', 'ǎ', 'Ā', 'ā', 'É', 'é', 'È', 'è', 'Ě', 'ě', 'Ē', 'ē',
'Í', 'í', 'Ì', 'ì', 'Ǐ', 'ǐ', 'Ī', 'ī', 'Ó', 'ó', 'Ò', 'ò', 'Ǒ', 'ǒ', 'Ō', 'ō',
'Ú', 'ú', 'Ù', 'ù', 'Ü', 'ü', 'Ǔ', 'ǔ', 'Ū', 'ū', 'Ǘ', 'ǘ', 'Ǜ', 'ǜ', 'Ǚ', 'ǚ', 'Ǖ', 'ǖ'],
"Полски": ['ą', 'Ą', 'ć', 'Ć', 'ę', 'Ę', 'ł', 'Ł', 'ń', 'Ń', 'ó', 'Ó', 'ś', 'Ś',
'ź', 'Ź', 'ż', 'Ż'],
"Португалски": [
'Á', 'á', 'À', 'à', 'Â', 'â', 'Ã', 'ã', 'Ç', 'ç', 'É', 'é', 'Ê', 'ê',
'Í', 'í', 'Ó', 'ó', 'Ô', 'ô', 'Õ', 'õ', 'Ú', 'ú', 'Ü', 'ü'],
"Реторомански": ['Ā', 'ā', 'Ē', 'ē', 'Ī', 'ī', 'Ō', 'ō', 'Ū', 'ū'],
"Румънски": ['Ă', 'ă', 'Â', 'â', 'Î', 'î', 'Ş', 'ş', 'Ţ', 'ţ'],
"Скандинавски": [
'À', 'à', 'É', 'é', 'Å', 'å', 'Æ', 'æ', 'Ä', 'ä', 'Ø', 'ø', 'Ö', 'ö'],
"Сръбски": [
'А', 'а', 'Б', 'б', 'В', 'в', 'Г', 'г', 'Д', 'д', 'Ђ', 'ђ', 'Е', 'е', 'Ж', 'ж',
'З', 'з', 'И', 'и', 'Ј', 'ј', 'К', 'к', 'Л', 'л', 'Љ', 'љ', 'М', 'м', 'Н', 'н',
'Њ', 'њ', 'О', 'о', 'П', 'п', 'Р', 'р', 'С', 'с', 'Т', 'т', 'Ћ', 'ћ', 'У', 'у',
'Ф', 'ф', 'Х', 'х', 'Ц', 'ц', 'Ч', 'ч', 'Џ', 'џ', 'Ш', 'ш'],
"Староанглийски": [
'Ā', 'ā', 'Æ', 'æ', 'Ǣ', 'ǣ', 'Ǽ', 'ǽ', 'Ċ', 'ċ', 'Ð', 'ð', 'Ē', 'ē', 'Ġ', 'ġ',
'Ī', 'ī', 'Ō', 'ō', 'Ū', 'ū', 'Ƿ', 'ƿ', 'Ȳ', 'ȳ', 'Þ', 'þ', 'Ȝ', 'ȝ'],
"Турски": ['Ç', 'ç', 'Ğ', 'ğ', 'İ', 'ı', 'Ş', 'ş', 'Ö', 'ö', 'Ü', 'ü'],
"Френски": [
'À', 'à', 'Â', 'â', 'Ç', 'ç', 'É', 'é', 'È', 'è', 'Ê', 'ê', 'Ë', 'ë', 'Î', 'î',
'Ï', 'ï', 'Ô', 'ô', 'Œ', 'œ', 'Ù', 'ù', 'Û', 'û', 'Ü', 'ü', 'Ÿ', 'ÿ'],
"Хавайски": ['Ā', 'ā', 'Ē', 'ē', 'Ī', 'ī', 'Ō', 'ō', 'Ū', 'ū', 'ʻ'],
"Хърватски": ['Č', 'č', 'Ć', 'ć', 'Dž', 'dž', 'Đ', 'đ', 'Š', 'š', 'Ž', 'ž'],
"Чешки": [
'Á', 'á', 'Č', 'č', 'Ď', 'ď', 'É', 'é', 'Ě', 'ě', 'Í', 'í', 'Ň', 'ň', 'Ó', 'ó',
'Ř', 'ř', 'Š', 'š', 'Ť', 'ť', 'Ú', 'ú', 'Ů', 'ů', 'Ý', 'ý', 'Ž', 'ž'],
"Унгарски": ['Ő', 'ő', 'Ű', 'ű'],
"Разни": ['Ŗ', 'ŗ', 'Ĺ', 'ĺ', 'Ŕ', 'ŕ', 'Ľ', 'ľ', 'Ė', 'ė', 'Į', 'į',
'Ų', 'ų', 'Ŀ', 'ŀ']
};
 
// този масив ще се попълва от потребителите на личните им js страници
// трябва да съдържа ключове на елементи от масива chars
var myChars = [];
 
// от тези данни ще се генерират допълнителни бутони с insertTags()
var customInsButtons = [
	// ТЕКСТ_ОТЛЯВО ТЕКСТ_ОТДЯСНО ТЕКСТ_ПО_СРЕДАТА ЗАГЛАВИЕ ПОКАЗАН_ТЕКСТ
	["#виж ["+"[", "]]", "Страница", "+команда за пренасочване", "вж"],
	["["+"[Категория:", "]]", "Категория", "+препратка за категория", "кат"],
	["<code>", "</code>", "текст", "Текст с фиксирана ширина на буквите — обикновено код", "<tt>код</tt>"],
	["<sub>", "</sub>", "индекс", "+долен индекс", "a<sub>x</sub>"],
	["<sup>", "</sup>", "степен", "+горен индекс", "a<sup>x</sup>"],
	["&nbsp;", "", "", "+несекаем интервал", "nbsp"],
	["„", "“", "текст", "+български кавички", "„“"],
	["<del>", "</del>", "текст", "Отбелязване на текст като изтрит", "<del>del</del>"],
	["{"+"{", "}}", "", "+скоби за шаблон", "{{}}"],
	["|", "", "", "+отвесна черта — |", "&nbsp;|&nbsp;"],
	["—", "", "", "+дълга чертица — mdash", "—"],
	["–", "", "", "+средна чертица — ndash", "&nbsp;–&nbsp;"],
	["·", "", "", "+средна точка", "&nbsp;·&nbsp;"],
	["ѝ", "", "", "+„и“ с ударение", "ѝ"],
	["", "&#768;", "", "+ударение за гласна буква (маркирайте една буква)", "&nbsp;&#768;"],
	["<"+"!--", "-->", "коментар", "+коментар", "&lt;!--"]
];
 
// данни за още бутони с код по желание
var customMiscButtons = [
	// КОД_ЗА_ИЗПЪЛНЕНИЕ	ЗАГЛАВИЕ	ПОКАЗАН_ТЕКСТ
];
 
var tpl1 = {
	// "ПОКАЗВАН ТЕКСТ" : "ИМЕ НА СТРАНИЦАТА",
	"Част на речта…" : "-",
	"Български език" : {
		"Съществ. нариц. име": "Шаблон:Съществително нарицателно име/празен",
		"Прилагателно име": "Шаблон:Прилагателно име/празен",
		"Местоимение": "Шаблон:Местоимение/празен",
		"Числително име": "Шаблон:Числително име/празен",
		"Глагол": "Шаблон:Глагол/празен",
		"Наречие": "Шаблон:Наречие/празен",
		"Съюз": "Шаблон:Съюз/празен",
		"Междуметие": "Шаблон:Междуметие/празен",
		"Частица": "Шаблон:Частица/празен",
		"Предлог": "Шаблон:Предлог/празен",
		"Съществ. собств. име": "Шаблон:Съществително собствено име/празен",
		"Представка": "Шаблон:Представка/празен",
		"Наставка": "Шаблон:Наставка/празен",
		"Словоформа": "Шаблон:Форма/празен"
	},
	"Други езици": {
		"Съществително име": "Шаблон:Noun/празен",
		"Прилагателно име": "Шаблон:Adjective/празен",
		"Глагол": "Шаблон:Verb/празен",
		"Наречие": "Шаблон:Adverb/празен"
	}
};
 
// тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Шаблон…“
var tpl2 = {
	// "ПОКАЗВАН ТЕКСТ" : "ИМЕ НА СТРАНИЦАТА",
	"Шаблон…" : "-"
};
 
 
/* * * * * * * * * *   Edit tools functions   * * * * * * * * * */
 
var tplVarBaseName = "tpl";
 
// добавя нови бутони и други играчки
function setupCustomEditTools() {
	var toolbar = document.getElementById("toolbar");
	// ако няма съществуващи бутони, няма да добавяме и тези
	if ( !toolbar ) { return; }
	toolbar.className += " buttonlinks";
	var tools = document.createElement("div");
	tools.id = "custombuttons";
	for (var i in customInsButtons) {
		var el = customInsButtons[i];
		var title = el[3];
		if ( title.charAt(0) == "+" ) {
			title = "Вмъкване на " + title.substr(1);
		}
		addCustomButton(tools,
			{"href": "javascript:insertTags('"+el[0] +"','"+el[1]+"','"+ el[2]+"')",
			"title": title, "innerHTML": el[4]});
	}
	for (var i in customMiscButtons) {
		var el = customMiscButtons[i];
		addCustomButton(tools, {"href":"javascript:"+el[0], "title":el[1], "innerHTML":el[2]});
	}
	// падащите менюта
	addDropDownMenus(toolbar);
	toolbar.appendChild(tools);
	toolbar.appendChild( makeCharsContainer() );
	viewChars("my");
}
 
hookEvent("load", setupCustomEditTools);
 
var charsElemId = "extraChars"; // името на елемента за знаците
var genChars = new Object(); // вече генерираните знаци
 
function makeCharsContainer() {
	var wrapper = document.createElement("div");
	wrapper.id = "extraCharsWrapper";
	var ctrl = document.createElement("span");
	ctrl.appendChild( makeCharSelector() );
	var chars = document.createElement("span");
	chars.id = charsElemId;
	wrapper.appendChild(ctrl);
	wrapper.appendChild(chars);
	return wrapper;
}
 
function makeCharSelector() {
	var l = document.createElement("label");
	l.appendChild( document.createTextNode("Знаци: ") );
	var b = document.createElement("select");
	l.setAttribute("for", b.id = "xchm");
	b.onchange = function() {
		viewChars(this.value);
	}
	b.appendChild( newOption("", "(Избор)") );
	for (var id in chars) {
		b.appendChild( newOption(id, id) );
	}
	b.appendChild( newOption("my", "(Моите знаци)") );
	b.appendChild( newOption("all", "(Всички знаци)") );
	var w = document.createElement("span");
	w.appendChild(l);
	w.appendChild(b);
	return w;
}
 
function viewChars(id) {
	var box = document.getElementById(charsElemId);
	if ( !box ) { return; }
	box.innerHTML = id == "my" || id == "all" ? makeCharsMult(id) : makeChars(id);
}
 
function makeCharsMult(id) {
	if ( typeof( genChars[id] ) != "undefined" ) { return genChars[id]; }
	var cont = "";
	var lchars = id == "my" ? filterArrByKey(chars, myChars) : chars;
	for (var cid in lchars) {
		cont += '<br/><span><em>'+cid +':</em> '+ makeChars(cid) +'</span>';
	}
	return genChars[id] = cont;
}
 
function makeChars(id) {
	if ( typeof( chars[id] ) == "undefined" ) { return ""; }
	// ако знаците са готови, връщаме тях
	if ( typeof( genChars[id] ) != "undefined" ) { return genChars[id]; }
	var cont = "";
	for (var i in chars[id]) {
		var ch = chars[id][i];
		if (ch == "--") { cont += " ···"; continue; }
		cont += " <a href=\"javascript:insertTags('"+ch+"', '', '')\" "+
			'title="Вмъкване на знака „'+ch+'“">'+ch+'</a> ';
	}
	return genChars[id] = cont;
}
 
 
function addCustomButton(box, item) {
	var b = document.createElement("a");
	for (var attr in item) { b[attr] = item[attr]; }
	box.appendChild(b);
	box.appendChild( document.createTextNode(" ") );
}
 
function addDropDownMenus(parent) {
	var tplVar = null;
	for ( var i = 1; tplVar = tplVarBaseName + i,
			eval("var tpl = typeof("+ tplVar +") == 'object' ? "+ tplVar +" : null"),
			tpl != null; i++ ) {
		addDropDownMenu(parent, tpl);
	}
}
 
/** генерира падащо меню */
function addDropDownMenu(parent, content) {
	var box = document.createElement("select");
	box.title = "Оттук можете да вмъкнете празен шаблон";
	box.onchange = function() {
		if (this.value != "-") {
			loadPage(this.value);
			this.selectedIndex = 0;
		}
		return;
	};
	if ( appendOptions(box, content) > 1 ) {
		parent.appendChild(box);
	}
}
 
function appendOptions(box, opts) {
	var count = 0;
	for (var i in opts) {
		if (opts[i] == "") {
			continue; // skip emtpy entries
		}
		var child = typeof(opts[i]) == "object"
			? newOptgroup(i, opts[i])
			: newOption(opts[i], i);
		box.appendChild(child);
		count++;
	}
	return count;
}
 
function newOptgroup(label, data) {
	var g = document.createElement("optgroup");
	g.label = label;
	for (var i in data) {
		g.appendChild( newOption(data[i], i) );
	}
	return g;
}
 
function newOption(val, text) {
	var o = document.createElement("option");
	o.value = val;
	o.appendChild( document.createTextNode(text) );
	return o;
}
 
 
/* * * * * * * * * *   Ajax functions   * * * * * * * * * */
 
var prevReq;
var pageUrl = wgScript + "?title=$1&action=raw&templates=expand";
var pageToFetch = "";
 
function loadPage(page) {
	prevReq = sajax_init_object();
	if( !prevReq ) return false;
	pageToFetch = page;
	var getUrl = pageUrl.replace(/\$1/, encodeURI(page));
	//alert("Страница: "+page+"\nАдрес: "+getUrl);
	showLoadIndicator();
	prevReq.onreadystatechange = insertIntoWikiText;
	prevReq.open("GET", getUrl, true);
	prevReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	prevReq.send(null);
	return true;
}
 
function insertIntoWikiText() {
	if( prevReq.readyState != 4 ) {
		return;
	}
	hideLoadIndicator();
	if ( prevReq.status != 200 ) {
		window.alert("Неуспешна връзка: " + prevReq.status +
			" “" + prevReq.statusText + "”\nСтраница: "+ pageToFetch);
		return;
	}
	// изтриване на текст, отбелязан за невмъкване + <pre> и <nowiki>
	var re = /<!--noinclude-->.*<!--\/noinclude-->|<\/?pre>|<\/?nowiki>/g;
	var content = prevReq.responseText.replace(re, "");
	// replace escaped tags
	var specials = ["pre", "nowiki"];
	for (var i in specials) {
		re = new RegExp("\\[(\/?)"+ specials[i] +"\\]", "g");
		content = content.replace(re, "<$1"+ specials[i] +">");
	}
	// split at caret’s position
	var parts = content.split(">>|<<");
	var left = parts[0];
	delete(parts[0]);
	var right = parts.join("");
	insertTags(left, right, "");
}
 
var loadIndicator;
function showLoadIndicator() {
	if ( typeof(loadIndicator) != "undefined" ) {
		loadIndicator.style.display = "block";
		return;
	}
	var content = document.getElementById("content");
	if ( !content ) { // no "content" element
		return;
	}
	loadIndicator = document.createElement("div");
	loadIndicator.id = "loadIndicator";
	loadIndicator.appendChild( document.createTextNode("Шаблонът се зарежда…") );
	content.appendChild(loadIndicator);
}
 
function hideLoadIndicator() {
	loadIndicator.style.display = "none";
}
 
 
/* * * * * * * * * *   Miscelaneous functions   * * * * * * * * * */
 
 
function filterArrByKey(arr, keys) {
	var narr = new Array();
	for (var i in keys) {
		var key = keys[i];
		if ( typeof( arr[key] ) != "undefined" ) {
			narr[key] = arr[key];
		}
	}
	return narr;
}
 
 
/** Import module *************************************************************
 *
 *  Description: Includes a raw wiki page as javascript or CSS,
 *               used for including user made modules.
 *  Maintainers: [[w:en:User:AzaToth]]
 */
var importedScripts = {}; // object keeping track of included scripts, so a script ain't included twice
function importScript( page ) {
	if( importedScripts[page] ) {
		return;
	}
	importedScripts[page] = true;
	var url = wgScriptPath
		+ '/index.php?title='
		+ encodeURIComponent( page.replace( / /g, '_' ) )
		+ '&action=raw&ctype=text/javascript';
	var scriptElem = document.createElement( 'script' );
	scriptElem.setAttribute( 'src' , url );
	scriptElem.setAttribute( 'type' , 'text/javascript' );
	document.getElementsByTagName( 'head' )[0].appendChild( scriptElem );
}
 
function importStylesheet( page ) {
	var sheet = '@import "'
		+ wgScriptPath
		+ '/index.php?title='
		+ encodeURIComponent( page.replace( / /g, '_' ) )
		+ '&action=raw&ctype=text/css";';
	var styleElem = document.createElement( 'style' );
	styleElem.setAttribute( 'type' , 'text/css' );
	styleElem.appendChild( document.createTextNode( sheet ) );
	document.getElementsByTagName( 'head' )[0].appendChild( styleElem );
}