MediaWiki:Monobook.js

Klikipedia - klikowa encyklopedia
Skocz do: nawigacji, wyszukiwarki
/*

'''Wyłączenie poszczególnych możliwości/skryptów'''
* Dodanie linka [edytuj] dla sekcji nagłówkowej
 window.addEditTopLinkDone = true;
* Oznaczanie artykułów medalowych (dla interwiki)
 window.LinkFADone = true;
* Dynamiczne szablony nawigacyjne
 window.createNavigationBarToggleButtonDone = true;
* Automatyczne opisy zmian
 window.przyciskiOpisDone = true;
* Menu dla edittools (''obecnie i tak nieaktywne'')
 window.addCharSubsetMenuDone = true;

==== Dodanie linka [edytuj] dla sekcji nagłówkowej ====
* Pomysł: [[:en:User:Pile0nades]]
* Wykonanie: Maciej Jaros [[:pl:User:Nux]]
* Licencja: [http://opensource.org/licenses/gpl-license.php GNU General Public License v2]
<pre>
*/
// Liczba nagłówków drugiego, trzeciegiego i czwartego stopnia
// jakie muszą się pojawić w artykule, żeby pojawił się link
var addEditTopLinkNumHeaders = 2; // dla 2 => dla dwóch i więcej się pojawi
function addEditTopLink() {
	//
	// somehow it gets run twice on some pages - stop that
	if (window.addEditTopLinkDone)
		return
	;
	window.addEditTopLinkDone = true;

	//	
	// if this is preview page or there is no edit tab, stop
	if (!wgIsArticle)
		return
	;

	//	
	// if there are no edit-section links then stop
	var spans = document.getElementById("bodyContent").getElementsByTagName("span");
	var i;
	for (i = 0; i < spans.length; i++) {
		if (spans[i].className == 'editsection')
			break
		;
	}
	if (i>=spans.length)
		return
	;

	//
	// additional checkup to stop
	var test = document.getElementById("bodyContent").getElementsByTagName("h2").length +
		document.getElementById("bodyContent").getElementsByTagName("h3").length +
		document.getElementById("bodyContent").getElementsByTagName("h4").length;
	// note that there is always siteSub (h3)
	if (test<=addEditTopLinkNumHeaders)
		return
	;
	
	//
	// get first header element
	var fst_h1 = document.getElementById("content").getElementsByTagName("h1")[0];

	//
	// Creating elements
	//
	// create div
	var div = document.createElement("DIV");
	div.className = 'editsection';
	// create link
	var link = document.createElement("A");
	link.href = document.getElementById("ca-edit").getElementsByTagName("a")[0].href + '&section=0';
	link.setAttribute('title', 'edytuj sekcję nagłówkową artykułu');
	link.appendChild(document.createTextNode('edytuj'));
	// append link and stuff to div
	div.appendChild(document.createTextNode('['));
	div.appendChild(link);
	div.appendChild(document.createTextNode(']'));

	//
	// Styling
	//
	// font-size:53%; <= 188/100 = 0.53 <= h1 font-size = 188%
	div.style.cssText = 'position:absolute; right:0px; font-size:53%; bottom:-1.5em';
	// IE fix -- text is smaller there (set in CSS) and 
	// relative>absolute just dont work there (is positioned relative to body)
	if (clientPC.indexOf('msie')!=-1 && clientPC.indexOf('opera') == -1)
		div.style.cssText='position:absolute; right:1.5em; font-size:42%; top:3.7em'
	;
	// add an extra margin if there is no content in contentSub
	// (which works pretty much the same if it is there)
	if (document.getElementById("contentSub").innerHTML=='')
		fst_h1.style.cssText = 'position:relative; margin-bottom:0.9em';
	else
		fst_h1.style.cssText = 'position:relative';
	;
	
	//
	// Insert div container into the DOM before the h1
	//
	fst_h1.appendChild(div);
}
addOnloadHook(addEditTopLink);

/*
</pre>

==== Standardowe zakładki ====
<pre>
*/

var ta = new Object();
ta['pt-userpage'] = new Array('.','Moja osobista strona'); 
ta['pt-anonuserpage'] = new Array('.','Strona użytkownika numeru IP spod którego edytujesz'); 
ta['pt-mytalk'] = new Array('n','Moja strona dyskusji'); 
ta['pt-anontalk'] = new Array('n','Dyskusja o edycjach z tego numeru IP'); 
ta['pt-preferences'] = new Array('','Moje preferencje'); 
ta['pt-watchlist'] = new Array('l','Lista stron obserwowanych'); 
ta['pt-mycontris'] = new Array('y','Lista moich edycji'); 
ta['pt-login'] = new Array('o','Zachęcamy do zalogowania się, choć nie jest to obowiązkowe.'); 
ta['pt-anonlogin'] = new Array('o','Zachęcamy do zalogowania się, choć nie jest to obowiązkowe'); 
ta['pt-logout'] = new Array('o','Wylogowanie'); 
ta['ca-talk'] = new Array('t','Dyskusja o zawartości tej strony.'); 
ta['ca-edit'] = new Array('e','Możesz edytować tę stronę. Przed zapisaniem zmian użyj przycisku podgląd.'); 
ta['ca-addsection'] = new Array('+','Dodaj swój komentarz do dyskusji'); 
ta['ca-viewsource'] = new Array('e','Ta strona jest zabezpieczona. Możesz zobaczyć tekst źródłowy.'); 
ta['ca-history'] = new Array('h','Starsze wersje tej strony.'); 
ta['ca-protect'] = new Array('=','Zabezpiecz tę stronę.'); 
ta['ca-delete'] = new Array('d','Usuń tę stronę'); 
ta['ca-undelete'] = new Array('d','Przywróć wersję tej strony sprzed usunięcia'); 
ta['ca-move'] = new Array('m','Przenieś tę stronę.'); 
ta['ca-nomove'] = new Array('','Nie masz wystarczających uprawnień do przeniesienia tej strony'); 
ta['ca-watch'] = new Array('w','Dodaj tę stronę do listy obserwowanych'); 
ta['ca-unwatch'] = new Array('w','Usuń tę stronę z listy obserwowanych'); 
ta['search'] = new Array('f','Szukaj w Wikipedii'); 
ta['p-logo'] = new Array('','Strona główna'); 
ta['n-mainpage'] = new Array('z','Zobacz stronę główną Wikipedii'); 
ta['n-portal'] = new Array('','O projekcie, co możesz zrobić, gdzie możesz znaleźć informacje'); 
ta['n-currentevents'] = new Array('','Informacje o aktualnych wydarzeniach'); 
ta['n-recentchanges'] = new Array('r','Lista ostatnich zmian w artykułach Wikipedii'); 
ta['n-randompage'] = new Array('x','Pokaż losowo wybraną stronę'); 
ta['n-help'] = new Array('','Zapoznaj się z obsługą Wikipedii'); 
ta['n-sitesupport'] = new Array('','Wesprzyj nas'); 
ta['t-whatlinkshere'] = new Array('j','Pokaż listę stron linkujących do tego artykułu'); 
ta['t-recentchangeslinked'] = new Array('k','Ostatnie zmiany w stronach linkujących do tej strony'); 
ta['feed-rss'] = new Array('','Nagłówki RSS z tej strony'); 
ta['feed-atom'] = new Array('','Atom feed dla tej strony'); 
ta['t-contributions'] = new Array('','Pokaż listę edycji tego użytkownika'); 
ta['t-emailuser'] = new Array('','Wyślij e-mail do tego użytkownika'); 
ta['t-upload'] = new Array('u','Wyślij plik na serwer Wikipedii'); 
ta['t-specialpages'] = new Array('q','Lista wszystkich specjalnych stron'); 
ta['ca-nstab-main'] = new Array('c','Zobacz stronę artykułu'); 
ta['ca-nstab-user'] = new Array('c','Zobacz stronę osobistą Wikipedysty'); 
ta['ca-nstab-media'] = new Array('c','Pokaż stronę pliku'); 
ta['ca-nstab-special'] = new Array('','To jest specjalna strona. Nie możesz jej edytować.'); 
ta['ca-nstab-wp'] = new Array('c','Zobacz stronę projektu'); 
ta['ca-nstab-image'] = new Array('c','Zobacz stronę grafiki'); 
ta['ca-nstab-mediawiki'] = new Array('c','Zobacz komunikat systemowy'); 
ta['ca-nstab-template'] = new Array('c','Zobacz szablon'); 
ta['ca-nstab-help'] = new Array('c','Zobacz stronę pomocy'); 
ta['ca-nstab-category'] = new Array('c','Zobacz stronę kategorii');

/*
</pre>
==== Oznaczanie artykułów medalowych ====
<pre>
*/

function LinkFA() 
{
	// stop before starting
	if (window.LinkFADone)
		return;

	// check only if there is any interwiki
	if (document.getElementById('p-lang'))
	{
		// iterate over all <span>-elements
		var sps = document.getElementById('bodyContent').getElementsByTagName('span');
		var langs = document.getElementById('p-lang').getElementsByTagName('li');
		for(var i=0; i<sps.length; i++) {
			// if found a FA span
			if(sps[i].className == 'FA') {
				// iterate over all <li>-elements
				for(var j=0; j<langs.length; j++) {
					// if found a FA link
					if(langs[j].className == "interwiki-" + sps[i].id) {
						langs[j].style.padding = "0 0 0 16px";
						langs[j].style.backgroundImage = "url('http://upload.wikimedia.org/wikipedia/en/6/60/LinkFA-star.png')";
						langs[j].style.backgroundRepeat = "no-repeat";
						langs[j].title = "Ten artykuł to 'Artykuł na medal'";
						// there can be only one ;)
						break;
					}
				}
			}
		}
	}
}
addOnloadHook(LinkFA);

/*
</pre>
==== Dynamiczne szablony nawigacyjne ====
<pre>
*/

// set up the words in your language
var NavigationBarHide = '[ Ukryj ]';
var NavigationBarShow = '[ Pokaż ]';

// set up max count of Navigation Bars on page,
// if there are more, all will be hidden
// NavigationBarShowDefault = 0; // all bars will be hidden
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden
var NavigationBarShowDefault = 0;


// shows and hides content and picture (if available) of navigation bars
// Parameters:
//     indexNavBar: the index of navigation bar to be toggled
function toggleNavigationBar(indexNavBar)
{
	var NavToggle = document.getElementById("NavToggle" + indexNavBar);
	var NavFrame = document.getElementById("NavFrame" + indexNavBar);
	
	if (!NavFrame || !NavToggle)
		return
	;
	
	// values to be set
	var currDisplay;
	var currTitle;
	
	// if shown now
	if (NavToggle.firstChild.data == NavigationBarHide)
	{
		currDisplay = 'none';
		currTitle = NavigationBarShow;
	}
	// if hidden now
	else if (NavToggle.firstChild.data == NavigationBarShow)
	{
		currDisplay = 'block';
		currTitle = NavigationBarHide;
	}
	
	for (var NavChild=NavFrame.firstChild; NavChild!=null; NavChild=NavChild.nextSibling)
	{
		if (NavChild.nodeType==1)	// only if this is an element node
		{
			if (NavChild.className=='NavPic' || NavChild.className=='NavContent')
				NavChild.style.display = currDisplay
			else if (NavChild.className == 'NavToggle')
				NavChild.firstChild.data = currTitle
			;
		}
	}
}

// adds show/hide-button to navigation bars
function createNavigationBarToggleButton()
{
	// stop before starting
	if (window.createNavigationBarToggleButtonDone)
		return;

	var i;
	var indexNavBar = 0;
	var divs = document.getElementById('bodyContent').getElementsByTagName("div");
	// iterate over all < div >-elements
	for (i=0; i<divs.length; i++)
	{
		// if found a navigation bar
		if (divs[i].className == "NavFrame")
		{
			var NavFrame = divs[i];
			indexNavBar++;
			var NavToggle = document.createElement("a");
			NavToggle.className = 'NavToggle';
			NavToggle.setAttribute('id', 'NavToggle' + indexNavBar);
			NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavBar + ');');
			
			var NavToggleText = document.createTextNode(NavigationBarHide);
			NavToggle.appendChild(NavToggleText);
			
			// add NavToggle-Button as first div-element 
			// in < div class="NavFrame" >
			NavFrame.insertBefore(NavToggle, NavFrame.firstChild);
			NavFrame.setAttribute('id', 'NavFrame' + indexNavBar);
		}
	}
	// if more Navigation Bars found than Default then hide all
	if (NavigationBarShowDefault < indexNavBar)
	{
		for(i=1; i<=indexNavBar; i++)
			toggleNavigationBar(i)
		;
	}

}

addOnloadHook(createNavigationBarToggleButton);

/*
</pre>
==== Importowanie funkcji działających podczas edycji ====
* '''Zobacz:''' [[MediaWiki:Onlyifediting.js]]
<pre>
*/
if (document.URL.indexOf("action=edit") > 0 || document.URL.indexOf("action=submit") > 0)
{
	if (wgCanonicalNamespace != "Special")
	{
		document.write('<script type="text/javascript" src="/w/index.php?title=MediaWiki:Onlyifediting.js&action=raw&ctype=text/javascript&dontcountme=s"></script>');
	}
}

/*
</pre>
==== Dodatkowe zakładki ====
* Używane m.in. do dostarczenia linków do narzędzi dla obrazków Duesentrieba.
* Tutaj tylko ustawienia, pełny skrypt: [[MediaWiki:Extra-tabs.js]]
<pre>
*/

//
// skrypt niepotrzebny dla stron specjalnych
if (wgNamespaceNumber != -1)
{
	// Interface strings
	var tab_check_usage = 'Wykorzystanie';
	var tab_categorize = 'Kategoryzacja';
	var tab_log = 'Log';
	var tab_gallery = 'Galeria';
	// var tab_orphans = 'Nieużywane';
	var tab_untagged = 'Bez licencji';
	var tab_tree = 'Drzewo';
	var tab_catscan = 'CatScan';
	var tab_blocklog = 'Blocklog';

	// embeds the global script
	document.write('<script type="text/javascript" src="/w/index.php?title=MediaWiki:Extra-tabs.js&amp;action=raw&amp;ctype=text/javascript"><\/script>');
}
/*
</pre>

==== Wikicharts ====
* Author: [[:de:User:LeonWeber]]
* Nie należy tu nic zmieniać bez konsultacji z autorem.
<pre>
*/
// this should be adjusted to a good value.
// BE CAREFULL, you will break zedler if it's too low!
// And then DaB. will kill Leon :-(
var disable_counter = 0;
var counter_factor = 300;

function pgcounter_setup()
{
	if(disable_counter == 0)
	{
		var url = window.location.href;
		if(Math.floor(Math.random()*counter_factor)==42)  // the probability thing
		{
			if(wgIsArticle==true) // do not count history pages etc.
			{
				var pgcountNs = wgCanonicalNamespace;
				if(wgCanonicalNamespace=="")
				{
					pgcountNs = "0";
				}
				var cnt_url = "http://pgcount.wikimedia.de/index.png?ns=" + pgcountNs + "&title=" + encodeURI(wgTitle) + "&factor=" + counter_factor + "&wiki=plwiki";
				var img = new Image(); 
				img.src = cnt_url;
			}
		}
	}
}
// Do not use aOnloadFunctions[aOnloadFunctions.length] = pgcounter_setup;, some browsers don't like that.
pgcounter_setup();

/*
</pre>
==== sidebarProceduraAwaryjna ====
* Author: Maciej Jaros [[:pl:User:Nux]]
* Licence: CC-BY or GPL
* A temporary solution to the sidebar problem. Delete as soon as it will be solved.
* See bug 5092 for details: http://bugzilla.wikimedia.org/show_bug.cgi?id=5092
<pre>
*/
function sidebarProceduraAwaryjna()
{
	//
	// 'p-techniczne' is the id of the element
	// that is available when sidebar is available
	var element = document.getElementById('p-techniczne');
	if (element)
		return	//fixing is not needed
	;

	// fixing our main nav-bar
	var element = document.getElementById('p-navigation');
	
	element.innerHTML = '<h5>nawigacja</h5> \
	<div class="pBody"> \
		<ul> \
				<li id="n-mainpage"><a href="/wiki/Strona_g%C5%82%C3%B3wna">Strona główna</a></li> \
				<li id="n-Kategorie"><a href="/wiki/Wikipedia:Kategorie_G%C5%82%C3%B3wne">Kategorie artykułów</a></li> \
				<li id="n-recentchanges"><a href="/wiki/Specjalna:Recentchanges">Ostatnie zmiany</a></li> \
				<li id="n-randompage"><a href="/wiki/Specjalna:Random">Losuj stronę</a></li> \
				<li id="n-help"><a href="/wiki/Wikipedia:Pomoc">Pomoc</a></li> \
				<li id="n-sitesupport"><a href="http://wikimediafoundation.org/wiki/Dary_pieni%C4%99%C5%BCne">Dary pieniężne</a></li> \
		</ul> \
	</div>';
	
	//
	// adding extra nav-bars (1)
	var element = document.getElementById('p-search');
	var newEl = document.createElement('div');
	newEl.className = 'portlet';
	newEl.id = 'p-techniczne';
	newEl.innerHTML = '<h5>techniczne</h5> \
	<div class="pBody"> \
		<ul> \
				<li id="n-portal"><a href="/wiki/Wikipedia:Portal_wikipedyst%C3%B3w">Portal wikipedystów</a></li> \
				<li id="n-contact"><a href="/wiki/Wikipedia:Kontakt">Kontakt z Wikipedią</a></li> \
				<li id="n-bug_in_article"><a href="http://adamdziura.9g.pl/wikipedia/wikibug.php">Zgłoś błąd</a></li> \
				<li id="n-bad-image"><a href="http://adamdziura.9g.pl/wikipedia/badimage.php">Zgłoś złą grafikę</a></li> \
		</ul> \
	</div>';
	element.parentNode.insertBefore(newEl, element);
	
	//
	// adding extra nav-bars (2)
	var newEl = document.createElement('div');
	newEl.className = 'portlet';
	newEl.id = 'p-zmiany';
	newEl.innerHTML = '<h5>zmiany</h5> \
	<div class="pBody"> \
		<ul> \
				<li id="n-recentchanges"><a href="/wiki/Specjalna:Recentchanges">Ostatnie zmiany</a></li> \
				<li id="n-recentchanges_in_category"><a href="/wiki/Wikipedia:Ostatnie_zmiany_tematyczne">Zmiany tematyczne</a></li> \
				<li id="n-changes-in-category"><a href="http://adamdziura.9g.pl/wikipedia/changes-in-category.php">Zmiany w kategorii</a></li> \
		</ul> \
	</div>';
	element.parentNode.insertBefore(newEl, element);
}

addOnloadHook(sidebarProceduraAwaryjna);

/*
</pre>
==== Small search keyboard ====
* Author: Maciej Jaros [[:pl:User:Nux]]
* Licence: CC-BY or [http://opensource.org/licenses/gpl-license.php GNU General Public License v2]
<pre>
*/
if (wgNamespaceNumber == -1 && wgPageName=="Specjalna:Search")
{
	addOnloadHook(addSearchKeyboard);
}

function addSearchKeyboard() {
	var subEl = document.getElementById('results');
	var newEl = document.createElement('div');
	newEl.className = 'search_keyboard';
	newEl.innerHTML = "\
<b>Klawiaturka:\
&nbsp;<a onclick=\"insertTagsTo_('ą','','','lsearchbox');return false\" href=\"#\">ą</a>\
<a onclick=\"insertTagsTo_('ć','','','lsearchbox');return false\" href=\"#\">ć</a>\
<a onclick=\"insertTagsTo_('ę','','','lsearchbox');return false\" href=\"#\">ę</a>\
<a onclick=\"insertTagsTo_('ł','','','lsearchbox');return false\" href=\"#\">ł</a>\
<a onclick=\"insertTagsTo_('ń','','','lsearchbox');return false\" href=\"#\">ń</a>\
<a onclick=\"insertTagsTo_('ó','','','lsearchbox');return false\" href=\"#\">ó</a>\
<a onclick=\"insertTagsTo_('ś','','','lsearchbox');return false\" href=\"#\">ś</a>\
<a onclick=\"insertTagsTo_('ź','','','lsearchbox');return false\" href=\"#\">ź</a>\
<a onclick=\"insertTagsTo_('ż','','','lsearchbox');return false\" href=\"#\">ż</a></b>\
";
	newEl.style.cssText = 'margin-left:25%; width:50%; font-size:small;';
	subEl.parentNode.insertBefore(newEl, subEl);
}

/*
</pre>

==== funkcja insertTagsTo_ ====
* Author: phpBB Team, WikiMedia, Maciej Jaros [[:pl:User:Nux]]
* Licence: [http://opensource.org/licenses/gpl-license.php GNU General Public License v2]
<pre>
*/
//
// Apply tagOpen/tagClose to selection in given textarea/input,
// use sampleText instead of selection if there is none.
// Copied and adapted from phpBB
// outputid = 'some_id_of_a_textarea_or_a_text_input'
function insertTagsTo_(tagOpen, tagClose, sampleText, outputid) {
	var txtarea = document.getElementById(outputid);
	if (!txtarea)
		return
	;

	// IE
	if (document.selection  && !is_gecko) {
		var theSelection = document.selection.createRange().text;
		if (!theSelection)
			theSelection=sampleText;
		txtarea.focus();
		if (theSelection.charAt(theSelection.length - 1) == " ") { // exclude ending space char, if any
			theSelection = theSelection.substring(0, theSelection.length - 1);
			document.selection.createRange().text = tagOpen + theSelection + tagClose + " ";
		} else {
			document.selection.createRange().text = tagOpen + theSelection + tagClose;
		}

	// Mozilla
	} else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
		var replaced = false;
		var startPos = txtarea.selectionStart;
		var endPos = txtarea.selectionEnd;
		if (endPos-startPos)
			replaced = true;
		var scrollTop = txtarea.scrollTop;
		var myText = (txtarea.value).substring(startPos, endPos);
		if (!myText)
			myText=sampleText;
		if (myText.charAt(myText.length - 1) == " ") { // exclude ending space char, if any
			subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " ";
		} else {
			subst = tagOpen + myText + tagClose;
		}
		txtarea.value = txtarea.value.substring(0, startPos) + subst +
			txtarea.value.substring(endPos, txtarea.value.length);
		txtarea.focus();
		//set new selection
		if (replaced) {
			var cPos = startPos+(tagOpen.length+myText.length+tagClose.length);
			txtarea.selectionStart = cPos;
			txtarea.selectionEnd = cPos;
		} else {
			txtarea.selectionStart = startPos+tagOpen.length;
			txtarea.selectionEnd = startPos+tagOpen.length+myText.length;
		}
		txtarea.scrollTop = scrollTop;

	// All other browsers get no toolbar.
	// There was previously support for a crippled "help"
	// bar, but that caused more problems than it solved.
	}
	// reposition cursor if possible
	if (txtarea.createTextRange)
		txtarea.caretPos = document.selection.createRange().duplicate();
}

// END OF MediaWiki:Monobook.js
// </pre>