Разлика между версии на „МедияУики:Common.js“

От БГ-Фантастика
Направо към: навигация, търсене
м (нещо се скапа - включване на alert)
(ползване на wgScript)
Ред 197: Ред 197:
  
 
var prevReq;
 
var prevReq;
var pageUrl = "{{fullurl:$1|action=raw}}";
+
if ( typeof(wgScript) == "undefined" ) {
 +
var wgScript = "/index.php";
 +
}
 +
var pageUrl = wgScript + "?title=$1&action=raw";
 
var pageToFetch = "";
 
var pageToFetch = "";
  
Ред 205: Ред 208:
 
pageToFetch = page;
 
pageToFetch = page;
 
var getUrl = pageUrl.replace(/\$1/, encodeURI(page));
 
var getUrl = pageUrl.replace(/\$1/, encodeURI(page));
alert("Страница: "+page+"\nАдрес: "+getUrl);
+
//alert("Страница: "+page+"\nАдрес: "+getUrl);
 
showLoadIndicator();
 
showLoadIndicator();
 
prevReq.onreadystatechange = insertIntoWikiText;
 
prevReq.onreadystatechange = insertIntoWikiText;

Версия от 19:36, 28 ноември 2007

// от тези данни ще се генерират допълнителни бутони с insertTags()
var customInsButtons = [
	// ТЕКСТ_ОТЛЯВО  ТЕКСТ_ОТДЯСНО  ТЕКСТ_ПО_СРЕДАТА  ЗАГЛАВИЕ  ПОКАЗАН_ТЕКСТ
	["#виж ["+"[", "]]", "Страница", "+команда за пренасочване", "вж"],
	["„", "“", "текст в кавички", "+български кавички", "„“"],
        ["̀", "", "", "+ударение за гласна буква (изберете една буква)", "à"],
	["<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 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 = 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;
	}
}