|
|
Ред 1: |
Ред 1: |
− | // от тези данни ще се генерират допълнителни бутони с insertTags()
| + | {{МедияУики:Common.js/Core.js}} |
− | var customInsButtons = [
| + | {{МедияУики:Common.js/CoreObjects.js}} |
− | // ТЕКСТ_ОТЛЯВО ТЕКСТ_ОТДЯСНО ТЕКСТ_ПО_СРЕДАТА ЗАГЛАВИЕ ПОКАЗАН_ТЕКСТ
| |
− | ["#виж ["+"[", "]]", "Страница", "+команда за пренасочване", "вж"],
| |
− | ["„", "“", "текст в кавички", "+български кавички", "„“"],
| |
− | ["̀", "", "", "+ударение за гласна буква (изберете една буква)", "à"],
| |
− | ["<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 = [
| |
− | // КОД_ЗА_ИЗПЪЛНЕНИЕ ЗАГЛАВИЕ ПОКАЗАН_ТЕКСТ
| |
− | ];
| |
| | | |
| + | /* * * * * * * * * * Edit tools functions * * * * * * * * * */ |
| | | |
− | // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Инфокутия…“
| + | {{МедияУики:Common.js/Edit tools data.js}} |
− | var tpl1 = {
| |
− | // "ПОКАЗВАН ТЕКСТ" : "ИМЕ НА СТРАНИЦАТА",
| |
− | "Инфокутия…" : "-",
| |
− | "Личност" : "Шаблон:Инфокутия личност/празен",
| |
− | "Произведение" : "Шаблон:Инфокутия произведение/празен",
| |
− | "Статия" : "Шаблон:Инфокутия статия/празен",
| |
− | "Рецензия" : "Шаблон:Инфокутия рецензия/празен",
| |
− | "Интервю" : "Шаблон:Инфокутия интервю/празен",
| |
− | "Книга" : "Шаблон:Инфокутия книга/празен",
| |
− | "Филм" : "Шаблон:Инфокутия филм/празен",
| |
− | "Герой" : "Шаблон:Инфокутия герой/празен",
| |
− | "Издателство" : "Шаблон:Инфокутия издателство/празен",
| |
− | "Клуб" : "Шаблон:Инфокутия клуб/празен",
| |
− | "Списание брой" : "Шаблон:Инфокутия списание брой/празен",
| |
− | "Вложка писател" : "Шаблон:Инфокутия вложка писател/празен",
| |
− | "Вложка преводач" : "Шаблон:Инфокутия вложка преводач/празен",
| |
− | "Вложка критик" : "Шаблон:Инфокутия вложка критик/празен",
| |
− | "Вложка журналист" : "Шаблон:Инфокутия вложка журналист/празен",
| |
− | "Вложка рецензент" : "Шаблон:Инфокутия вложка рецензент/празен",
| |
− | "Вложка фен" : "Шаблон:Инфокутия вложка фен/празен",
| |
− | "Вложка издател" : "Шаблон:Инфокутия вложка издател/празен",
| |
− | "Вложка художник" : "Шаблон:Инфокутия вложка художник/празен"
| |
− | }; | |
| | | |
− | // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Образец…“
| + | {{МедияУики:Common.js/Edit tools.js}} |
− | 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 = openXMLHttpRequest();
| |
− | 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";
| |
− | }
| |
− | | |
− | | |
− | // function copied from {{SERVER}}/skins/common/preview.js
| |
− | function openXMLHttpRequest() {
| |
− | if( window.XMLHttpRequest ) {
| |
− | return new XMLHttpRequest();
| |
− | } else if( window.ActiveXObject && navigator.platform != 'MacPPC' ) {
| |
− | // IE/Mac has an ActiveXObject but it doesn't work.
| |
− | return new ActiveXObject("Microsoft.XMLHTTP");
| |
− | } else {
| |
− | return null;
| |
− | }
| |
− | } | |