Разлика между версии на „МедияУики:Common.js“
От БГ-Фантастика
(показване на индикатор на зареждането - да не се чудим защо го няма още шаблона) |
(разделяне на падащото меню на три: инфокутии, образци и обикновени шаблони) |
||
Ред 81: | Ред 81: | ||
− | // тук посочвайте какви шаблони да се вмъкват чрез падащото меню | + | // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Инфокутия…“ |
+ | var infoboxPages = { | ||
+ | // завършвайте всеки ред (с изключение на последния) със запетая, иначе НЯМА ДА РАБОТИ | ||
+ | |||
+ | // "ИМЕ НА СТРАНИЦАТА" : "ПОКАЗВАН ТЕКСТ", | ||
+ | "Шаблон:Инфокутия личност/празен": "Личност", | ||
+ | "Шаблон:Инфокутия произведение/празен" : "Произведение", | ||
+ | "Шаблон:Инфокутия книга/празен": "Книга", | ||
+ | "Шаблон:Инфокутия филм/празен" : "Филм", | ||
+ | "Шаблон:Инфокутия издателство/празен" : "Издателство", | ||
+ | "Шаблон:Инфокутия вложка писател/празен" : "Вложка писател", | ||
+ | "Шаблон:Инфокутия вложка преводач/празен" : "Вложка преводач", | ||
+ | "Шаблон:Инфокутия вложка фен/празен" : "Вложка фен", | ||
+ | "Шаблон:Инфокутия вложка издател/празен" : "Вложка издател", | ||
+ | "Шаблон:Инфокутия вложка художник/празен" : "Вложка художник", | ||
+ | "Шаблон:Инфокутия списание брой/празен" : "Списание брой" | ||
+ | }; | ||
+ | |||
+ | // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Образец…“ | ||
+ | var modelPages = { | ||
+ | // завършвайте всеки ред (с изключение на последния) със запетая, иначе НЯМА ДА РАБОТИ | ||
+ | |||
+ | // "ИМЕ НА СТРАНИЦАТА" : "ПОКАЗВАН ТЕКСТ", | ||
+ | "БГ-Фантастика:Образец за статия за писател": "Писател", | ||
+ | "БГ-Фантастика:Образец за статия за художник": "Художник", | ||
+ | "БГ-Фантастика:Образец за статия за музикант": "Музикант", | ||
+ | "БГ-Фантастика:Образец за статия за преводач": "Преводач", | ||
+ | "БГ-Фантастика:Образец за статия за режисьор": "Режисьор", | ||
+ | "БГ-Фантастика:Образец за статия за актьор": "Актьор", | ||
+ | "БГ-Фантастика:Образец за статия за издател": "Издател", | ||
+ | "БГ-Фантастика:Образец за статия за редактор": "Редактор", | ||
+ | "БГ-Фантастика:Образец за статия за фен": "Фен", | ||
+ | "БГ-Фантастика:Образец за статия за литературно произведение": "Произведение", | ||
+ | "БГ-Фантастика:Образец за статия за книга": "Книга", | ||
+ | "БГ-Фантастика:Образец за статия за вестник": "Вестник", | ||
+ | "БГ-Фантастика:Образец за статия за списание": "Списание", | ||
+ | "БГ-Фантастика:Образец за статия за поредица": "Поредица", | ||
+ | "БГ-Фантастика:Образец за статия за брой на вестник": "Вестник брой", | ||
+ | "БГ-Фантастика:Образец за статия за брой на списание": "Списание брой", | ||
+ | "БГ-Фантастика:Образец за статия за герой на произведение": "Герой", | ||
+ | "БГ-Фантастика:Образец за статия за второстепенни герои в произведение": "Второст. герои", | ||
+ | "БГ-Фантастика:Образец за статия за място в произведение": "Място", | ||
+ | "БГ-Фантастика:Образец за статия за понятие от произведение": "Понятие", | ||
+ | "БГ-Фантастика:Образец за статия за издателство": "Издателство", | ||
+ | "БГ-Фантастика:Образец за статия за фен-клуб": "Фен/клуб", | ||
+ | "БГ-Фантастика:Образец за статия за събитие": "Събитие" | ||
+ | }; | ||
+ | |||
+ | // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Шаблон…“ | ||
var tplPages = { | var tplPages = { | ||
− | // завършвайте всеки ред (с изключение на последния) със запетая | + | // завършвайте всеки ред (с изключение на последния) със запетая, иначе НЯМА ДА РАБОТИ |
− | |||
// "ИМЕ НА СТРАНИЦАТА" : "ПОКАЗВАН ТЕКСТ", | // "ИМЕ НА СТРАНИЦАТА" : "ПОКАЗВАН ТЕКСТ", | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
"Шаблон:Превод/празен": "Превод" | "Шаблон:Превод/празен": "Превод" | ||
}; | }; | ||
− | // | + | // тези масиви ще се попълват от потребителите на личните им js страници |
+ | var myInfoboxPages = new Array(); | ||
+ | var myModelPages = new Array(); | ||
var myTplPages = new Array(); | var myTplPages = new Array(); | ||
Ред 131: | Ред 168: | ||
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); | ||
// елемент за допълнителните знаци | // елемент за допълнителните знаци | ||
Ред 148: | Ред 184: | ||
} | } | ||
+ | function addDropDownMenus(parent) { | ||
+ | addDropDownMenu(parent, "Инфокутия…", "празна инфокутия", infoboxPages, myInfoboxPages); | ||
+ | addDropDownMenu(parent, "Образец…", "образец за нова статия", modelPages, myModelPages); | ||
+ | addDropDownMenu(parent, "Шаблон…", "празен шаблон", tplPages, myTplPages); | ||
+ | } | ||
− | // генерира | + | // генерира падащо меню |
− | function | + | function addDropDownMenu(parent, emptyOpt, title, defContent, userContent) { |
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; |
}; | }; | ||
− | box.appendChild( newOption("", | + | box.appendChild( newOption("", emptyOpt) ); |
− | + | appendOptions(box, defContent); | |
− | + | appendOptions(box, userContent); | |
− | + | parent.appendChild(box); | |
− | for (var i in | + | } |
− | box.appendChild( newOption(i, | + | |
+ | function appendOptions(box, opts) { | ||
+ | for (var i in opts) { | ||
+ | box.appendChild( newOption(i, opts[i]) ); | ||
} | } | ||
− | |||
} | } | ||
Ред 187: | Ред 230: | ||
var prevReq; | var prevReq; | ||
var tplUrl = "{{fullurl:TEMPLATE|action=raw}}"; | var tplUrl = "{{fullurl:TEMPLATE|action=raw}}"; | ||
− | var | + | var pageToFetch = ""; |
− | |||
− | function | + | function loadPage(page) { |
prevReq = new XMLHttpRequest(); | prevReq = new XMLHttpRequest(); | ||
if( !prevReq ) return false; | if( !prevReq ) return false; | ||
− | + | pageToFetch = page; | |
− | var getUrl = tplUrl.replace(/TEMPLATE/, encodeURI( | + | var getUrl = tplUrl.replace(/TEMPLATE/, encodeURI(page)); |
− | //alert("Страница: "+ | + | //alert("Страница: "+page+"\nАдрес: "+getUrl); |
− | + | showLoadIndicator(); | |
prevReq.onreadystatechange = insertIntoWikiText; | prevReq.onreadystatechange = insertIntoWikiText; | ||
prevReq.open("GET", getUrl, true); | prevReq.open("GET", getUrl, true); | ||
Ред 204: | Ред 246: | ||
} | } | ||
− | function | + | 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, ""); | ||
+ | insertTags(content, "", ""); | ||
+ | } | ||
+ | |||
+ | var loadIndicator; | ||
+ | function showLoadIndicator() { | ||
if ( typeof(loadIndicator) != "undefined" ) { | if ( typeof(loadIndicator) != "undefined" ) { | ||
loadIndicator.style.display = "block"; | loadIndicator.style.display = "block"; | ||
Ред 222: | Ред 281: | ||
} | } | ||
− | function | + | function hideLoadIndicator() { |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
loadIndicator.style.display = "none"; | loadIndicator.style.display = "none"; | ||
} | } |
Версия от 08:18, 5 април 2007
/* Чрез редактиране на този файл можете да промените някои неща на Джаваскрипт за облика Монобук <pre> */ /* tooltips and access keys */ var ta = { 'pt-userpage' : ['.','Вашата потребителска страница'], 'pt-anonuserpage' : ['.','Потребителската страница за адреса, от който редактирате'], 'pt-mytalk' : ['n','Вашата дискусионна страница'], 'pt-anontalk' : ['n','Дискусия относно редакциите от този адрес'], 'pt-preferences' : ['','Вашите настройки'], 'pt-watchlist' : ['l','Списък на страници, чиито промени сте избрали да наблюдавате'], 'pt-mycontris' : ['y','Списък на Вашите приноси'], 'pt-login' : ['o','В момента не сте влезли. Насърчаваме Ви да влезете, въпреки че не е задължително.'], 'pt-anonlogin' : ['o','Насърчаваме Ви да влезете, въпреки че не е задължително.'], 'pt-logout' : ['o','Излизане от {{SITENAME}}'], 'ca-talk' : ['t','Беседа относно страницата'], 'ca-edit' : ['e','Можете да редактирате страницата. Моля, използвайте бутона за предварителен преглед преди да съхраните.'], 'ca-addsection' : ['+','Добавяне на коментар към страницата'], 'ca-viewsource' : ['e','Страницата е защитена. Може да разгледате изходния й код.'], 'ca-history' : ['h','Предишни версии на страницата'], 'ca-protect' : ['=','Защитаване на страницата'], 'ca-delete' : ['d','Изтриване на страницата'], 'ca-undelete' : ['d','Възстановяване на изтрити редакции на страницата'], 'ca-move' : ['m','Преместване на страницата'], 'ca-nomove' : ['','Нямате разрешение за преместване на страницата'], 'ca-watch' : ['w','Добавяне на страницата към списъка Ви за наблюдение'], 'ca-unwatch' : ['w','Премахване на страницата от списъка Ви за наблюдение'], 'search' : ['f','Претърсване на {{SITENAME}}'], 'p-logo' : ['','Началната страница'], 'n-mainpage' : ['z','Началната страница'], 'n-portal' : ['','Информация за проекта'], 'n-currentevents' : ['','Списък на основните категории в {{SITENAME}}'], 'n-recentchanges' : ['r','Списък на последните промени в цялото уики'], 'n-randompage' : ['x','Случайна страница'], 'n-help' : ['','Помощната страница'], 'n-sitesupport' : ['','Подкрепете {{SITENAME}}'], 't-whatlinkshere' : ['j','Списък на всички страници, сочещи насам'], 't-recentchangeslinked' : ['k','Последните промени на страници, сочещи към тази страница'], 'feed-rss' : ['','RSS feed за страницата'], 'feed-atom' : ['','Atom feed за страницата'], 't-contributions' : ['','Показване на приносите на потребителя'], 't-emailuser' : ['','Изпращане на писмо на потребителя'], 't-upload' : ['u','Качване на файлове'], 't-specialpages' : ['q','Списък на всички специални страници'], 'ca-nstab-main' : ['c','Преглед на основната страница'], 'ca-nstab-user' : ['c','Преглед на потребителската страница'], 'ca-nstab-media' : ['c','Преглед на медийната страница'], 'ca-nstab-special' : ['','Това е специална страница, която не може да се редактира.'], 'ca-nstab-wp' : ['c','Преглед на проектната страница'], 'ca-nstab-image' : ['c','Преглед на страницата на картинката'], 'ca-nstab-mediawiki' : ['c','Преглед на системното съобщение'], 'ca-nstab-template' : ['c','Преглед на шаблона'], 'ca-nstab-help' : ['c','Преглед на помощната страница'], 'ca-nstab-category' : ['c','Преглед на категорийната страница'] }; // от тези данни ще се генерират допълнителни бутони с 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 infoboxPages = { // завършвайте всеки ред (с изключение на последния) със запетая, иначе НЯМА ДА РАБОТИ // "ИМЕ НА СТРАНИЦАТА" : "ПОКАЗВАН ТЕКСТ", "Шаблон:Инфокутия личност/празен": "Личност", "Шаблон:Инфокутия произведение/празен" : "Произведение", "Шаблон:Инфокутия книга/празен": "Книга", "Шаблон:Инфокутия филм/празен" : "Филм", "Шаблон:Инфокутия издателство/празен" : "Издателство", "Шаблон:Инфокутия вложка писател/празен" : "Вложка писател", "Шаблон:Инфокутия вложка преводач/празен" : "Вложка преводач", "Шаблон:Инфокутия вложка фен/празен" : "Вложка фен", "Шаблон:Инфокутия вложка издател/празен" : "Вложка издател", "Шаблон:Инфокутия вложка художник/празен" : "Вложка художник", "Шаблон:Инфокутия списание брой/празен" : "Списание брой" }; // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Образец…“ var modelPages = { // завършвайте всеки ред (с изключение на последния) със запетая, иначе НЯМА ДА РАБОТИ // "ИМЕ НА СТРАНИЦАТА" : "ПОКАЗВАН ТЕКСТ", "БГ-Фантастика:Образец за статия за писател": "Писател", "БГ-Фантастика:Образец за статия за художник": "Художник", "БГ-Фантастика:Образец за статия за музикант": "Музикант", "БГ-Фантастика:Образец за статия за преводач": "Преводач", "БГ-Фантастика:Образец за статия за режисьор": "Режисьор", "БГ-Фантастика:Образец за статия за актьор": "Актьор", "БГ-Фантастика:Образец за статия за издател": "Издател", "БГ-Фантастика:Образец за статия за редактор": "Редактор", "БГ-Фантастика:Образец за статия за фен": "Фен", "БГ-Фантастика:Образец за статия за литературно произведение": "Произведение", "БГ-Фантастика:Образец за статия за книга": "Книга", "БГ-Фантастика:Образец за статия за вестник": "Вестник", "БГ-Фантастика:Образец за статия за списание": "Списание", "БГ-Фантастика:Образец за статия за поредица": "Поредица", "БГ-Фантастика:Образец за статия за брой на вестник": "Вестник брой", "БГ-Фантастика:Образец за статия за брой на списание": "Списание брой", "БГ-Фантастика:Образец за статия за герой на произведение": "Герой", "БГ-Фантастика:Образец за статия за второстепенни герои в произведение": "Второст. герои", "БГ-Фантастика:Образец за статия за място в произведение": "Място", "БГ-Фантастика:Образец за статия за понятие от произведение": "Понятие", "БГ-Фантастика:Образец за статия за издателство": "Издателство", "БГ-Фантастика:Образец за статия за фен-клуб": "Фен/клуб", "БГ-Фантастика:Образец за статия за събитие": "Събитие" }; // тук посочвайте какви шаблони да се вмъкват чрез падащото меню „Шаблон…“ var tplPages = { // завършвайте всеки ред (с изключение на последния) със запетая, иначе НЯМА ДА РАБОТИ // "ИМЕ НА СТРАНИЦАТА" : "ПОКАЗВАН ТЕКСТ", "Шаблон:Превод/празен": "Превод" }; // тези масиви ще се попълват от потребителите на личните им js страници var myInfoboxPages = new Array(); var myModelPages = new Array(); var myTplPages = new Array(); var charsElemId = "extraChars"; // добавя нови бутони и други играчки 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); // елемент за допълнителните знаци /*var chbox = document.createElement("div"); chbox.id = charsElemId; chbox.style.display = "none"; toolbar.appendChild(chbox);*/ } 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) { addDropDownMenu(parent, "Инфокутия…", "празна инфокутия", infoboxPages, myInfoboxPages); addDropDownMenu(parent, "Образец…", "образец за нова статия", modelPages, myModelPages); addDropDownMenu(parent, "Шаблон…", "празен шаблон", tplPages, myTplPages); } // генерира падащо меню function addDropDownMenu(parent, emptyOpt, title, defContent, userContent) { var box = document.createElement("select"); box.title = "Оттук можете да вмъкнете " + title; box.onchange = function() { if (this.value != "") { loadPage(this.value); this.selectedIndex=0; } return; }; box.appendChild( newOption("", emptyOpt) ); appendOptions(box, defContent); appendOptions(box, userContent); parent.appendChild(box); } function appendOptions(box, opts) { for (var i in opts) { box.appendChild( newOption(i, opts[i]) ); } } 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'; } var prevReq; var tplUrl = "{{fullurl:TEMPLATE|action=raw}}"; var pageToFetch = ""; function loadPage(page) { prevReq = new XMLHttpRequest(); if( !prevReq ) return false; pageToFetch = page; var getUrl = tplUrl.replace(/TEMPLATE/, 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(""); 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, ""); insertTags(content, "", ""); } 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 = "loadIndicatorWrapper"; var txt = document.createElement("div"); txt.id = "loadIndicator"; txt.appendChild( document.createTextNode("Шаблонът се зарежда…") ); loadIndicator.appendChild(txt); 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; } } hookEvent("load", setupCustomEditTools); /*</pre>*/