Разлика между версии на „МедияУики:Common.js“
От БГ-Фантастика
(още няколко шаблони в падащото меню; изнасяне на масива малко по-горе в кода) |
(целия код тук) |
||
| (Не са показани 40 междинни версии от трима потребители) | |||
| Ред 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>"] | ||
| Ред 81: | Ред 201: | ||
| − | // тук посочвайте какви шаблони да се вмъкват чрез падащото меню | + | // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Инфокутия…“ |
| − | var | + | var tpl1 = { |
| − | // | + | // "ПОКАЗВАН ТЕКСТ" : "ИМЕ НА СТРАНИЦАТА", |
| − | // | + | "Инфокутия…" : "-", |
| + | "Личност" : "Шаблон:Инфокутия личност/празен", | ||
| + | "Произведение" : "Шаблон:Инфокутия произведение/празен", | ||
| + | "Статия" : "Шаблон:Инфокутия статия/празен", | ||
| + | "Рецензия" : "Шаблон:Инфокутия рецензия/празен", | ||
| + | "Интервю" : "Шаблон:Инфокутия интервю/празен", | ||
| + | "Книга" : "Шаблон:Инфокутия книга/празен", | ||
| + | "Филм" : "Шаблон:Инфокутия филм/празен", | ||
| + | "Герой" : "Шаблон:Инфокутия герой/празен", | ||
| + | "Издателство" : "Шаблон:Инфокутия издателство/празен", | ||
| + | "Клуб" : "Шаблон:Инфокутия клуб/празен", | ||
| + | "Списание брой" : "Шаблон:Инфокутия списание брой/празен", | ||
| + | "Вложка писател" : "Шаблон:Инфокутия вложка писател/празен", | ||
| + | "Вложка преводач" : "Шаблон:Инфокутия вложка преводач/празен", | ||
| + | "Вложка критик" : "Шаблон:Инфокутия вложка критик/празен", | ||
| + | "Вложка журналист" : "Шаблон:Инфокутия вложка журналист/празен", | ||
| + | "Вложка рецензент" : "Шаблон:Инфокутия вложка рецензент/празен", | ||
| + | "Вложка фен" : "Шаблон:Инфокутия вложка фен/празен", | ||
| + | "Вложка издател" : "Шаблон:Инфокутия вложка издател/празен", | ||
| + | "Вложка художник" : "Шаблон:Инфокутия вложка художник/празен", | ||
| + | "Вложка музикант" : "Шаблон:Инфокутия вложка музикант/празен" | ||
| + | }; | ||
| − | // "ИМЕ НА СТРАНИЦАТА" : " | + | // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Образец…“ |
| + | var tpl2 = { | ||
| + | // "ПОКАЗВАН ТЕКСТ" : "ИМЕ НА СТРАНИЦАТА", | ||
| + | "Образец статия…" : "-", | ||
| + | "Писател" : "БГ-Фантастика:Образец за статия за писател", | ||
| + | "Художник" : "БГ-Фантастика:Образец за статия за художник", | ||
| + | "Музикант" : "БГ-Фантастика:Образец за статия за музикант", | ||
| + | "Преводач" : "БГ-Фантастика:Образец за статия за преводач", | ||
| + | "Режисьор" : "БГ-Фантастика:Образец за статия за режисьор", | ||
| + | "Актьор" : "БГ-Фантастика:Образец за статия за актьор", | ||
| + | "Издател" : "БГ-Фантастика:Образец за статия за издател", | ||
| + | "Редактор" : "БГ-Фантастика:Образец за статия за редактор", | ||
| + | "Фен" : "БГ-Фантастика:Образец за статия за фен", | ||
| + | "Произведение" : "БГ-Фантастика:Образец за статия за литературно произведение", | ||
| + | "Книга" : "БГ-Фантастика:Образец за статия за книга", | ||
| + | "Вестник" : "БГ-Фантастика:Образец за статия за вестник", | ||
| + | "Списание" : "БГ-Фантастика:Образец за статия за списание", | ||
| + | "Поредица" : "БГ-Фантастика:Образец за статия за поредица", | ||
| + | "Вестник брой" : "БГ-Фантастика:Образец за статия за брой на вестник", | ||
| + | "Списание брой" : "БГ-Фантастика:Образец за статия за брой на списание", | ||
| + | "Герой" : "БГ-Фантастика:Образец за статия за герой на произведение", | ||
| + | "Второст. герои" : "БГ-Фантастика:Образец за статия за второстепенни герои в произведение", | ||
| + | "Място" : "БГ-Фантастика:Образец за статия за място в произведение", | ||
| + | "Понятие" : "БГ-Фантастика:Образец за статия за понятие от произведение", | ||
| + | "Издателство" : "БГ-Фантастика:Образец за статия за издателство", | ||
| + | "Фен-клуб" : "БГ-Фантастика:Образец за статия за фен-клуб", | ||
| + | "Събитие" : "БГ-Фантастика:Образец за статия за събитие" | ||
| + | }; | ||
| − | + | // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Шаблон…“ | |
| − | + | var tpl3 = { | |
| − | + | // "ПОКАЗВАН ТЕКСТ" : "ИМЕ НА СТРАНИЦАТА", | |
| − | + | "Шаблон…" : "-", | |
| − | + | "Превод" : "Шаблон:Превод/празен", | |
| − | + | "Пояснение" : "Шаблон:Пояснение/празен" | |
| − | " | ||
| − | " | ||
| − | "Шаблон: | ||
| − | " | ||
| − | "Шаблон: | ||
}; | }; | ||
| + | // описания на падащите менюта | ||
| + | var tplDescriptions = { | ||
| + | 1: "празна инфокутия", | ||
| + | 2: "образец за нова статия", | ||
| + | 3: "празен шаблон" | ||
| + | }; | ||
| − | + | var tplVarBaseName = "tpl"; | |
| − | var | ||
| − | |||
| − | |||
| − | |||
// добавя нови бутони и други играчки | // добавя нови бутони и други играчки | ||
| Ред 130: | Ред 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) { | ||
| Ред 147: | Ред 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 | + | 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; | ||
} | } | ||
| Ред 183: | Ред 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; | ||
} | } | ||
| Ред 205: | Ред 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";
}