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

От БГ-Фантастика
Версия от 15:15, 13 септември 2007 на Intery (беседа | приноси) (разместване в падащото меню "Инфокутия")
Направо към: навигация, търсене
/*
Чрез редактиране на този файл можете да промените някои неща на Джаваскрипт за облика Монобук
<pre>
*/

// от тези данни ще се генерират допълнителни бутони с insertTags()
var customInsButtons = [
	// ТЕКСТ_ОТЛЯВО  ТЕКСТ_ОТДЯСНО  ТЕКСТ_ПО_СРЕДАТА  ЗАГЛАВИЕ  ПОКАЗАН_ТЕКСТ
	["#виж ["+"[", "]]", "Страница", "+команда за пренасочване", "вж"],
	["„", "“", "текст в кавички", "+български кавички", "„“"],
        ["&#768;", "", "", "+ударение за гласна буква (изберете една буква)", "à"],
	["<code>", "</code>", "моля, въведете програмен код", "Текст с фиксирана ширина на буквите — обикновено код", "<tt>код</tt>"],
	["<sub>", "</sub>", "моля, въведете индекс", "+долен индекс", "a<sub>x</sub>"],
	["<sup>", "</sup>", "моля, въведете степен", "+горен индекс", "a<sup>x</sup>"],
	["&nbsp;", "", "", "+несекаем интервал", "nbsp"],
	["<del>", "</del>", "зачертан текст", "Отбелязване на текст като изтрит", "<del>del</del>"],
	["{"+"{", "}}", "", "+скоби за шаблон", "{{}}"],
	["—", "", "", "+дълга чертица — mdash", "—"],
	["–", "", "", "+средна чертица — ndash", "&nbsp;–&nbsp;"],
	["<"+"!-- ", " -->", "моля, въведете коментар", "+коментар", "&lt;!--"],
	["{"+"{ЗАМЕСТ:)}}", "", "", "+шаблон „Усмивка“", ":-)"],
	["{"+"{ЗАМЕСТ: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>*/