Разлика между версии на „МедияУики:Common.js“
От БГ-Фантастика
м (+Шаблон:Превод/празен в tplPages) |
(целия код тук) |
||
(Не са показани 41 междинни версии от трима потребители) | |||
Ред 1: | Ред 1: | ||
− | /* | + | /** Namespace constants */ |
− | + | var | |
− | + | NS_MEDIA = -2, | |
− | + | NS_SPECIAL = -1, | |
+ | NS_MAIN = 0, | ||
+ | NS_TALK = 1, | ||
+ | NS_USER = 2, | ||
+ | NS_USER_TALK = 3, | ||
+ | NS_PROJECT = 4, | ||
+ | NS_PROJECT_TALK = 5, | ||
+ | NS_IMAGE = 6, | ||
+ | NS_IMAGE_TALK = 7, | ||
+ | NS_MEDIAWIKI = 8, | ||
+ | NS_MEDIAWIKI_TALK = 9, | ||
+ | NS_TEMPLATE = 10, | ||
+ | NS_TEMPLATE_TALK = 11, | ||
+ | NS_HELP = 12, | ||
+ | NS_HELP_TALK = 13, | ||
+ | NS_CATEGORY = 14, | ||
+ | NS_CATEGORY_TALK = 15; | ||
− | /* | + | var |
− | var | + | DEFAULT_USER_LANGUAGE = "bg", |
− | + | FALLBACK_USER_LANGUAGE = "en"; | |
− | + | ||
− | + | /** Checks if a value exists in an array */ | |
− | + | function inArray(val, arr) { | |
− | + | var len = arr.length; | |
− | ' | + | for (var i = 0 ; i < len ; i++) { |
− | + | if (arr[i] === val) { | |
− | ' | + | return true; |
− | + | } | |
− | + | } | |
− | + | return false; | |
− | + | } | |
− | + | ||
− | + | ||
− | + | function importScript(page) { | |
− | + | var uri = wgScript + '?title=' + | |
− | ' | + | encodeURIComponent(page.replace(/ /g,'_')).replace(/%2F/ig,'/').replace(/%3A/ig,':') + |
− | ' | + | '&action=raw&ctype=text/javascript'; |
− | ' | + | return importScriptURI(uri); |
− | + | } | |
− | + | ||
− | + | var loadedScripts = {}; // included-scripts tracker | |
− | + | function importScriptURI(url) { | |
− | + | if (loadedScripts[url]) { | |
− | + | return null; | |
− | + | } | |
− | + | loadedScripts[url] = true; | |
− | + | var s = document.createElement('script'); | |
− | + | s.setAttribute('src',url); | |
− | + | s.setAttribute('type','text/javascript'); | |
− | + | document.getElementsByTagName('head')[0].appendChild(s); | |
− | + | return s; | |
− | + | } | |
− | + | // from http://www.quirksmode.org/js/cookies.html | |
− | + | // escape(), unescape() methods added | |
− | + | var Cookie = { | |
− | + | create: function(name, value, days) { | |
− | ' | + | var expires; |
− | + | if (days) { | |
− | + | var date = new Date(); | |
− | + | date.setTime(date.getTime() + (days*24*60*60*1000)); | |
− | + | expires = "; expires=" + date.toGMTString(); | |
− | + | } else { | |
− | + | expires = ""; | |
− | + | } | |
− | + | document.cookie = Cookie.escape(name) + "=" + Cookie.escape(value) | |
− | + | + expires + "; path=/"; | |
− | + | }, | |
− | + | ||
+ | read: function(name) { | ||
+ | var nameEQ = Cookie.escape(name) + "="; | ||
+ | var ca = document.cookie.split(';'); | ||
+ | for (var i = 0; i < ca.length; i++) { | ||
+ | var c = ca[i]; | ||
+ | while (c.charAt(0)==' ') { | ||
+ | c = c.substring(1, c.length); | ||
+ | } | ||
+ | if (c.indexOf(nameEQ) === 0) { | ||
+ | return Cookie.unescape(c.substring(nameEQ.length, c.length)); | ||
+ | } | ||
+ | } | ||
+ | return null; | ||
+ | }, | ||
+ | |||
+ | erase: function(name) { | ||
+ | Cookie.create(name, "", -1); | ||
+ | }, | ||
+ | |||
+ | escape: function(v) { | ||
+ | return encodeURIComponent(v); | ||
+ | }, | ||
+ | unescape: function(v) { | ||
+ | return decodeURIComponent(v); | ||
+ | } | ||
}; | }; | ||
+ | |||
+ | |||
+ | var _lang_messages = {}; | ||
+ | var _debug_lang = false; | ||
+ | |||
+ | function MessageLanguage() { | ||
+ | this.lang = DEFAULT_USER_LANGUAGE; | ||
+ | this.messages = new Object(); | ||
+ | this.prefix = ""; | ||
+ | |||
+ | this.addMessages = function(messages, code, prefix) { | ||
+ | if ( typeof this.messages[code] == "undefined" ) { | ||
+ | this.messages[code] = new Object(); | ||
+ | } | ||
+ | var p = typeof prefix == "string" ? prefix : ""; | ||
+ | for (var key in messages) { | ||
+ | if ( typeof key == "string" ) { | ||
+ | this.messages[code][p + key] = messages[key]; | ||
+ | } | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | this.setLanguage = function(langCode) { | ||
+ | this.lang = langCode; | ||
+ | this.importMessages( this.lang ); | ||
+ | }; | ||
+ | |||
+ | this.setPrefix = function(prefix) { | ||
+ | this.prefix = prefix; | ||
+ | }; | ||
+ | |||
+ | this.msg = function(key) { | ||
+ | key = this.prefix + key; | ||
+ | var msg = this.messages[this.lang] && this.messages[this.lang][key]; | ||
+ | if ( typeof msg == "undefined" ) { | ||
+ | if ( _debug_lang ) alert(key + " го няма на "+this.lang); | ||
+ | msg = this.messages[FALLBACK_USER_LANGUAGE] | ||
+ | && this.messages[FALLBACK_USER_LANGUAGE][key]; | ||
+ | } | ||
+ | if ( typeof msg == "undefined" ) { | ||
+ | return "{"+ key +"}"; | ||
+ | } | ||
+ | for (var i = 1; i < arguments.length; i++) { | ||
+ | msg = msg.replace( new RegExp("\\$"+i, "g"), arguments[i]); | ||
+ | } | ||
+ | return msg; | ||
+ | }; | ||
+ | |||
+ | this.importMessages = function(lang) { | ||
+ | importScript("MediaWiki:Messages/" + lang + ".js"); | ||
+ | }; | ||
+ | } | ||
+ | |||
+ | |||
+ | var gLang = new MessageLanguage(); | ||
+ | |||
+ | // import message files | ||
+ | //gLang.setLanguage( wgUserLanguage ); | ||
+ | |||
+ | var mainLangs = [ DEFAULT_USER_LANGUAGE, FALLBACK_USER_LANGUAGE ]; | ||
+ | |||
+ | //if ( ! inArray( wgUserLanguage, mainLangs ) ) { | ||
+ | // gLang.importMessages( FALLBACK_USER_LANGUAGE ); | ||
+ | //} | ||
+ | |||
+ | // add messages on load | ||
+ | addOnloadHook( function() { | ||
+ | if ( typeof _lang_messages[ wgUserLanguage ] == "object" ) { | ||
+ | gLang.addMessages( _lang_messages[ wgUserLanguage ], wgUserLanguage ); | ||
+ | } | ||
+ | if ( typeof _lang_messages[ FALLBACK_USER_LANGUAGE ] == "object" ) { | ||
+ | if ( ! inArray( wgUserLanguage, mainLangs ) ) { | ||
+ | gLang.addMessages( _lang_messages[ FALLBACK_USER_LANGUAGE ], | ||
+ | FALLBACK_USER_LANGUAGE ); | ||
+ | } | ||
+ | } | ||
+ | }); | ||
Ред 62: | Ред 180: | ||
// ТЕКСТ_ОТЛЯВО ТЕКСТ_ОТДЯСНО ТЕКСТ_ПО_СРЕДАТА ЗАГЛАВИЕ ПОКАЗАН_ТЕКСТ | // ТЕКСТ_ОТЛЯВО ТЕКСТ_ОТДЯСНО ТЕКСТ_ПО_СРЕДАТА ЗАГЛАВИЕ ПОКАЗАН_ТЕКСТ | ||
["#виж ["+"[", "]]", "Страница", "+команда за пренасочване", "вж"], | ["#виж ["+"[", "]]", "Страница", "+команда за пренасочване", "вж"], | ||
+ | ["„", "“", "текст в кавички", "+български кавички", "„“"], | ||
+ | ["̀", "", "", "+ударение за буква (изберете една буква)", "à"], | ||
["<code>", "</code>", "моля, въведете програмен код", "Текст с фиксирана ширина на буквите — обикновено код", "<tt>код</tt>"], | ["<code>", "</code>", "моля, въведете програмен код", "Текст с фиксирана ширина на буквите — обикновено код", "<tt>код</tt>"], | ||
["<sub>", "</sub>", "моля, въведете индекс", "+долен индекс", "a<sub>x</sub>"], | ["<sub>", "</sub>", "моля, въведете индекс", "+долен индекс", "a<sub>x</sub>"], | ||
Ред 71: | Ред 191: | ||
["–", "", "", "+средна чертица — ndash", " – "], | ["–", "", "", "+средна чертица — ndash", " – "], | ||
["<"+"!-- ", " -->", "моля, въведете коментар", "+коментар", "<!--"], | ["<"+"!-- ", " -->", "моля, въведете коментар", "+коментар", "<!--"], | ||
− | ["{"+"{ЗАМЕСТ: | + | ["{"+"{ЗАМЕСТ:)}}", "", "", "+шаблон „Усмивка“", ":-)"], |
["{"+"{ЗАМЕСТ:D}}", "", "", "+шаблон „Ухилено човече“", ":-D"], | ["{"+"{ЗАМЕСТ:D}}", "", "", "+шаблон „Ухилено човече“", ":-D"], | ||
["<ref>", "</ref>", "", "Бележка под линия", "<small><sup>[1]</sup></small>"] | ["<ref>", "</ref>", "", "Бележка под линия", "<small><sup>[1]</sup></small>"] | ||
Ред 80: | Ред 200: | ||
]; | ]; | ||
− | var | + | |
+ | // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Инфокутия…“ | ||
+ | var tpl1 = { | ||
+ | // "ПОКАЗВАН ТЕКСТ" : "ИМЕ НА СТРАНИЦАТА", | ||
+ | "Инфокутия…" : "-", | ||
+ | "Личност" : "Шаблон:Инфокутия личност/празен", | ||
+ | "Произведение" : "Шаблон:Инфокутия произведение/празен", | ||
+ | "Статия" : "Шаблон:Инфокутия статия/празен", | ||
+ | "Рецензия" : "Шаблон:Инфокутия рецензия/празен", | ||
+ | "Интервю" : "Шаблон:Инфокутия интервю/празен", | ||
+ | "Книга" : "Шаблон:Инфокутия книга/празен", | ||
+ | "Филм" : "Шаблон:Инфокутия филм/празен", | ||
+ | "Герой" : "Шаблон:Инфокутия герой/празен", | ||
+ | "Издателство" : "Шаблон:Инфокутия издателство/празен", | ||
+ | "Клуб" : "Шаблон:Инфокутия клуб/празен", | ||
+ | "Списание брой" : "Шаблон:Инфокутия списание брой/празен", | ||
+ | "Вложка писател" : "Шаблон:Инфокутия вложка писател/празен", | ||
+ | "Вложка преводач" : "Шаблон:Инфокутия вложка преводач/празен", | ||
+ | "Вложка критик" : "Шаблон:Инфокутия вложка критик/празен", | ||
+ | "Вложка журналист" : "Шаблон:Инфокутия вложка журналист/празен", | ||
+ | "Вложка рецензент" : "Шаблон:Инфокутия вложка рецензент/празен", | ||
+ | "Вложка фен" : "Шаблон:Инфокутия вложка фен/празен", | ||
+ | "Вложка издател" : "Шаблон:Инфокутия вложка издател/празен", | ||
+ | "Вложка художник" : "Шаблон:Инфокутия вложка художник/празен", | ||
+ | "Вложка музикант" : "Шаблон:Инфокутия вложка музикант/празен" | ||
+ | }; | ||
+ | |||
+ | // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Образец…“ | ||
+ | var tpl2 = { | ||
+ | // "ПОКАЗВАН ТЕКСТ" : "ИМЕ НА СТРАНИЦАТА", | ||
+ | "Образец статия…" : "-", | ||
+ | "Писател" : "БГ-Фантастика:Образец за статия за писател", | ||
+ | "Художник" : "БГ-Фантастика:Образец за статия за художник", | ||
+ | "Музикант" : "БГ-Фантастика:Образец за статия за музикант", | ||
+ | "Преводач" : "БГ-Фантастика:Образец за статия за преводач", | ||
+ | "Режисьор" : "БГ-Фантастика:Образец за статия за режисьор", | ||
+ | "Актьор" : "БГ-Фантастика:Образец за статия за актьор", | ||
+ | "Издател" : "БГ-Фантастика:Образец за статия за издател", | ||
+ | "Редактор" : "БГ-Фантастика:Образец за статия за редактор", | ||
+ | "Фен" : "БГ-Фантастика:Образец за статия за фен", | ||
+ | "Произведение" : "БГ-Фантастика:Образец за статия за литературно произведение", | ||
+ | "Книга" : "БГ-Фантастика:Образец за статия за книга", | ||
+ | "Вестник" : "БГ-Фантастика:Образец за статия за вестник", | ||
+ | "Списание" : "БГ-Фантастика:Образец за статия за списание", | ||
+ | "Поредица" : "БГ-Фантастика:Образец за статия за поредица", | ||
+ | "Вестник брой" : "БГ-Фантастика:Образец за статия за брой на вестник", | ||
+ | "Списание брой" : "БГ-Фантастика:Образец за статия за брой на списание", | ||
+ | "Герой" : "БГ-Фантастика:Образец за статия за герой на произведение", | ||
+ | "Второст. герои" : "БГ-Фантастика:Образец за статия за второстепенни герои в произведение", | ||
+ | "Място" : "БГ-Фантастика:Образец за статия за място в произведение", | ||
+ | "Понятие" : "БГ-Фантастика:Образец за статия за понятие от произведение", | ||
+ | "Издателство" : "БГ-Фантастика:Образец за статия за издателство", | ||
+ | "Фен-клуб" : "БГ-Фантастика:Образец за статия за фен-клуб", | ||
+ | "Събитие" : "БГ-Фантастика:Образец за статия за събитие" | ||
+ | }; | ||
+ | |||
+ | // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Шаблон…“ | ||
+ | var tpl3 = { | ||
+ | // "ПОКАЗВАН ТЕКСТ" : "ИМЕ НА СТРАНИЦАТА", | ||
+ | "Шаблон…" : "-", | ||
+ | "Превод" : "Шаблон:Превод/празен", | ||
+ | "Пояснение" : "Шаблон:Пояснение/празен" | ||
+ | }; | ||
+ | |||
+ | // описания на падащите менюта | ||
+ | var tplDescriptions = { | ||
+ | 1: "празна инфокутия", | ||
+ | 2: "образец за нова статия", | ||
+ | 3: "празен шаблон" | ||
+ | }; | ||
+ | |||
+ | var tplVarBaseName = "tpl"; | ||
// добавя нови бутони и други играчки | // добавя нови бутони и други играчки | ||
Ред 104: | Ред 295: | ||
addCustomButton(tools, {"href":"javascript:"+el[0], "title":el[1], "innerHTML":el[2]}); | addCustomButton(tools, {"href":"javascript:"+el[0], "title":el[1], "innerHTML":el[2]}); | ||
} | } | ||
− | + | addDropDownMenus(toolbar); // падащите менюта | |
− | |||
toolbar.appendChild(tools); | toolbar.appendChild(tools); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
+ | |||
+ | hookEvent("load", setupCustomEditTools); | ||
function addCustomButton(box, item) { | function addCustomButton(box, item) { | ||
Ред 121: | Ред 308: | ||
} | } | ||
+ | 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, tplDescriptions[i]); | ||
+ | } | ||
+ | } | ||
− | // | + | /** генерира падащо меню */ |
− | + | function addDropDownMenu(parent, content, title) { | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
var box = document.createElement("select"); | var box = document.createElement("select"); | ||
− | box.title = "Оттук можете да вмъкнете | + | box.title = "Оттук можете да вмъкнете " + title; |
box.onchange = function() { | box.onchange = function() { | ||
− | if (this.value != "") { | + | if (this.value != "-") { |
− | + | loadPage(this.value); | |
− | this.selectedIndex=0; | + | this.selectedIndex = 0; |
} | } | ||
− | return | + | return; |
}; | }; | ||
− | + | if ( appendOptions(box, content) > 1 ) { | |
− | + | parent.appendChild(box); | |
− | |||
} | } | ||
− | for (var i in | + | } |
− | + | ||
+ | |||
+ | 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 | + | 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; | ||
} | } | ||
Ред 173: | Ред 372: | ||
} | } | ||
+ | |||
+ | /* * * * * * * * * * Ajax functions * * * * * * * * * */ | ||
var prevReq; | var prevReq; | ||
− | var | + | if ( typeof(wgScript) == "undefined" ) { |
− | var | + | var wgScript = "/index.php"; |
+ | } | ||
+ | var pageUrl = wgScript + "?title=$1&action=raw"; | ||
+ | var pageToFetch = ""; | ||
− | function | + | function loadPage(page) { |
− | prevReq = | + | prevReq = sajax_init_object(); |
if( !prevReq ) return false; | if( !prevReq ) return false; | ||
− | + | pageToFetch = page; | |
− | var getUrl = | + | var getUrl = pageUrl.replace(/\$1/, encodeURI(page)); |
− | + | showLoadIndicator(); | |
prevReq.onreadystatechange = insertIntoWikiText; | prevReq.onreadystatechange = insertIntoWikiText; | ||
prevReq.open("GET", getUrl, true); | prevReq.open("GET", getUrl, true); | ||
prevReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); | prevReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); | ||
− | prevReq.send( | + | prevReq.send(null); |
return true; | return true; | ||
} | } | ||
Ред 195: | Ред 399: | ||
return; | return; | ||
} | } | ||
− | if( prevReq.status != 200 ) { | + | hideLoadIndicator(); |
+ | if ( prevReq.status != 200 ) { | ||
window.alert("Неуспешна връзка: " + prevReq.status + | window.alert("Неуспешна връзка: " + prevReq.status + | ||
− | " “" + prevReq.statusText + "”\nСтраница: "+ | + | " “" + prevReq.statusText + "”\nСтраница: "+ pageToFetch); |
return; | 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 | + | function showLoadIndicator() { |
− | if( | + | if ( typeof(loadIndicator) != "undefined" ) { |
− | + | loadIndicator.style.display = "block"; | |
− | + | return; | |
− | + | } | |
− | return | + | var content = document.getElementById("content"); |
− | + | if ( !content ) { // no "content" element | |
− | return | + | return; |
} | } | ||
+ | loadIndicator = document.createElement("div"); | ||
+ | loadIndicator.id = "loadIndicator"; | ||
+ | loadIndicator.appendChild( document.createTextNode("Шаблонът се зарежда…") ); | ||
+ | content.appendChild(loadIndicator); | ||
} | } | ||
− | + | function hideLoadIndicator() { | |
− | + | loadIndicator.style.display = "none"; | |
− | + | } | |
− |
Текуща версия към 13:07, 25 февруари 2012
/** Namespace constants */ var NS_MEDIA = -2, NS_SPECIAL = -1, NS_MAIN = 0, NS_TALK = 1, NS_USER = 2, NS_USER_TALK = 3, NS_PROJECT = 4, NS_PROJECT_TALK = 5, NS_IMAGE = 6, NS_IMAGE_TALK = 7, NS_MEDIAWIKI = 8, NS_MEDIAWIKI_TALK = 9, NS_TEMPLATE = 10, NS_TEMPLATE_TALK = 11, NS_HELP = 12, NS_HELP_TALK = 13, NS_CATEGORY = 14, NS_CATEGORY_TALK = 15; var DEFAULT_USER_LANGUAGE = "bg", FALLBACK_USER_LANGUAGE = "en"; /** Checks if a value exists in an array */ function inArray(val, arr) { var len = arr.length; for (var i = 0 ; i < len ; i++) { if (arr[i] === val) { return true; } } return false; } function importScript(page) { var uri = wgScript + '?title=' + encodeURIComponent(page.replace(/ /g,'_')).replace(/%2F/ig,'/').replace(/%3A/ig,':') + '&action=raw&ctype=text/javascript'; return importScriptURI(uri); } var loadedScripts = {}; // included-scripts tracker function importScriptURI(url) { if (loadedScripts[url]) { return null; } loadedScripts[url] = true; var s = document.createElement('script'); s.setAttribute('src',url); s.setAttribute('type','text/javascript'); document.getElementsByTagName('head')[0].appendChild(s); return s; } // from http://www.quirksmode.org/js/cookies.html // escape(), unescape() methods added var Cookie = { create: function(name, value, days) { var expires; if (days) { var date = new Date(); date.setTime(date.getTime() + (days*24*60*60*1000)); expires = "; expires=" + date.toGMTString(); } else { expires = ""; } document.cookie = Cookie.escape(name) + "=" + Cookie.escape(value) + expires + "; path=/"; }, read: function(name) { var nameEQ = Cookie.escape(name) + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0)==' ') { c = c.substring(1, c.length); } if (c.indexOf(nameEQ) === 0) { return Cookie.unescape(c.substring(nameEQ.length, c.length)); } } return null; }, erase: function(name) { Cookie.create(name, "", -1); }, escape: function(v) { return encodeURIComponent(v); }, unescape: function(v) { return decodeURIComponent(v); } }; var _lang_messages = {}; var _debug_lang = false; function MessageLanguage() { this.lang = DEFAULT_USER_LANGUAGE; this.messages = new Object(); this.prefix = ""; this.addMessages = function(messages, code, prefix) { if ( typeof this.messages[code] == "undefined" ) { this.messages[code] = new Object(); } var p = typeof prefix == "string" ? prefix : ""; for (var key in messages) { if ( typeof key == "string" ) { this.messages[code][p + key] = messages[key]; } } }; this.setLanguage = function(langCode) { this.lang = langCode; this.importMessages( this.lang ); }; this.setPrefix = function(prefix) { this.prefix = prefix; }; this.msg = function(key) { key = this.prefix + key; var msg = this.messages[this.lang] && this.messages[this.lang][key]; if ( typeof msg == "undefined" ) { if ( _debug_lang ) alert(key + " го няма на "+this.lang); msg = this.messages[FALLBACK_USER_LANGUAGE] && this.messages[FALLBACK_USER_LANGUAGE][key]; } if ( typeof msg == "undefined" ) { return "{"+ key +"}"; } for (var i = 1; i < arguments.length; i++) { msg = msg.replace( new RegExp("\\$"+i, "g"), arguments[i]); } return msg; }; this.importMessages = function(lang) { importScript("MediaWiki:Messages/" + lang + ".js"); }; } var gLang = new MessageLanguage(); // import message files //gLang.setLanguage( wgUserLanguage ); var mainLangs = [ DEFAULT_USER_LANGUAGE, FALLBACK_USER_LANGUAGE ]; //if ( ! inArray( wgUserLanguage, mainLangs ) ) { // gLang.importMessages( FALLBACK_USER_LANGUAGE ); //} // add messages on load addOnloadHook( function() { if ( typeof _lang_messages[ wgUserLanguage ] == "object" ) { gLang.addMessages( _lang_messages[ wgUserLanguage ], wgUserLanguage ); } if ( typeof _lang_messages[ FALLBACK_USER_LANGUAGE ] == "object" ) { if ( ! inArray( wgUserLanguage, mainLangs ) ) { gLang.addMessages( _lang_messages[ FALLBACK_USER_LANGUAGE ], FALLBACK_USER_LANGUAGE ); } } }); // от тези данни ще се генерират допълнителни бутони с insertTags() var customInsButtons = [ // ТЕКСТ_ОТЛЯВО ТЕКСТ_ОТДЯСНО ТЕКСТ_ПО_СРЕДАТА ЗАГЛАВИЕ ПОКАЗАН_ТЕКСТ ["#виж ["+"[", "]]", "Страница", "+команда за пренасочване", "вж"], ["„", "“", "текст в кавички", "+български кавички", "„“"], ["̀", "", "", "+ударение за буква (изберете една буква)", "à"], ["<code>", "</code>", "моля, въведете програмен код", "Текст с фиксирана ширина на буквите — обикновено код", "<tt>код</tt>"], ["<sub>", "</sub>", "моля, въведете индекс", "+долен индекс", "a<sub>x</sub>"], ["<sup>", "</sup>", "моля, въведете степен", "+горен индекс", "a<sup>x</sup>"], [" ", "", "", "+несекаем интервал", "nbsp"], ["<del>", "</del>", "зачертан текст", "Отбелязване на текст като изтрит", "<del>del</del>"], ["{"+"{", "}}", "", "+скоби за шаблон", "{{}}"], ["—", "", "", "+дълга чертица — mdash", "—"], ["–", "", "", "+средна чертица — ndash", " – "], ["<"+"!-- ", " -->", "моля, въведете коментар", "+коментар", "<!--"], ["{"+"{ЗАМЕСТ:)}}", "", "", "+шаблон „Усмивка“", ":-)"], ["{"+"{ЗАМЕСТ:D}}", "", "", "+шаблон „Ухилено човече“", ":-D"], ["<ref>", "</ref>", "", "Бележка под линия", "<small><sup>[1]</sup></small>"] ]; // данни за още бутони с код по желание var customMiscButtons = [ // КОД_ЗА_ИЗПЪЛНЕНИЕ ЗАГЛАВИЕ ПОКАЗАН_ТЕКСТ ]; // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Инфокутия…“ var tpl1 = { // "ПОКАЗВАН ТЕКСТ" : "ИМЕ НА СТРАНИЦАТА", "Инфокутия…" : "-", "Личност" : "Шаблон:Инфокутия личност/празен", "Произведение" : "Шаблон:Инфокутия произведение/празен", "Статия" : "Шаблон:Инфокутия статия/празен", "Рецензия" : "Шаблон:Инфокутия рецензия/празен", "Интервю" : "Шаблон:Инфокутия интервю/празен", "Книга" : "Шаблон:Инфокутия книга/празен", "Филм" : "Шаблон:Инфокутия филм/празен", "Герой" : "Шаблон:Инфокутия герой/празен", "Издателство" : "Шаблон:Инфокутия издателство/празен", "Клуб" : "Шаблон:Инфокутия клуб/празен", "Списание брой" : "Шаблон:Инфокутия списание брой/празен", "Вложка писател" : "Шаблон:Инфокутия вложка писател/празен", "Вложка преводач" : "Шаблон:Инфокутия вложка преводач/празен", "Вложка критик" : "Шаблон:Инфокутия вложка критик/празен", "Вложка журналист" : "Шаблон:Инфокутия вложка журналист/празен", "Вложка рецензент" : "Шаблон:Инфокутия вложка рецензент/празен", "Вложка фен" : "Шаблон:Инфокутия вложка фен/празен", "Вложка издател" : "Шаблон:Инфокутия вложка издател/празен", "Вложка художник" : "Шаблон:Инфокутия вложка художник/празен", "Вложка музикант" : "Шаблон:Инфокутия вложка музикант/празен" }; // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Образец…“ var tpl2 = { // "ПОКАЗВАН ТЕКСТ" : "ИМЕ НА СТРАНИЦАТА", "Образец статия…" : "-", "Писател" : "БГ-Фантастика:Образец за статия за писател", "Художник" : "БГ-Фантастика:Образец за статия за художник", "Музикант" : "БГ-Фантастика:Образец за статия за музикант", "Преводач" : "БГ-Фантастика:Образец за статия за преводач", "Режисьор" : "БГ-Фантастика:Образец за статия за режисьор", "Актьор" : "БГ-Фантастика:Образец за статия за актьор", "Издател" : "БГ-Фантастика:Образец за статия за издател", "Редактор" : "БГ-Фантастика:Образец за статия за редактор", "Фен" : "БГ-Фантастика:Образец за статия за фен", "Произведение" : "БГ-Фантастика:Образец за статия за литературно произведение", "Книга" : "БГ-Фантастика:Образец за статия за книга", "Вестник" : "БГ-Фантастика:Образец за статия за вестник", "Списание" : "БГ-Фантастика:Образец за статия за списание", "Поредица" : "БГ-Фантастика:Образец за статия за поредица", "Вестник брой" : "БГ-Фантастика:Образец за статия за брой на вестник", "Списание брой" : "БГ-Фантастика:Образец за статия за брой на списание", "Герой" : "БГ-Фантастика:Образец за статия за герой на произведение", "Второст. герои" : "БГ-Фантастика:Образец за статия за второстепенни герои в произведение", "Място" : "БГ-Фантастика:Образец за статия за място в произведение", "Понятие" : "БГ-Фантастика:Образец за статия за понятие от произведение", "Издателство" : "БГ-Фантастика:Образец за статия за издателство", "Фен-клуб" : "БГ-Фантастика:Образец за статия за фен-клуб", "Събитие" : "БГ-Фантастика:Образец за статия за събитие" }; // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Шаблон…“ var tpl3 = { // "ПОКАЗВАН ТЕКСТ" : "ИМЕ НА СТРАНИЦАТА", "Шаблон…" : "-", "Превод" : "Шаблон:Превод/празен", "Пояснение" : "Шаблон:Пояснение/празен" }; // описания на падащите менюта var tplDescriptions = { 1: "празна инфокутия", 2: "образец за нова статия", 3: "празен шаблон" }; 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); } hookEvent("load", setupCustomEditTools); 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, tplDescriptions[i]); } } /** генерира падащо меню */ function addDropDownMenu(parent, content, title) { var box = document.createElement("select"); box.title = "Оттук можете да вмъкнете " + 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; } /* скрива/показва елемент */ function toggleElemDisplay(elemId) { var elem = document.getElementById(elemId); elem.style.display = elem.style.display == 'none' ? '' : 'none'; } /* * * * * * * * * * Ajax functions * * * * * * * * * */ var prevReq; if ( typeof(wgScript) == "undefined" ) { var wgScript = "/index.php"; } var pageUrl = wgScript + "?title=$1&action=raw"; var pageToFetch = ""; function loadPage(page) { prevReq = sajax_init_object(); if( !prevReq ) return false; pageToFetch = page; var getUrl = pageUrl.replace(/\$1/, encodeURI(page)); 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"; }