Poznámka: Po uložení musíte vyprázdnit mezipaměť vašeho prohlížeče, jinak změny neuvidíte.

/***************************************************************************
****************************************************************************
**                                                                        **
** Dokumentaci si můžete přečíst na [[Wikipedista:Dvorapa/tools.js/doc]]. **
**                                                                        **
****************************************************************************
****************************************************************************
<onlyinclude> __NOEDITSECTION__
'''Mikroudělátka''' na této stránce mohou být použita ke zjednodušení editace Wikipedie a k ulehčení práce s Wikipedií.

Pokud chcete některé z mikroudělátek použít, přečtěte si '''[[#Instalace|návod k instalaci]]''' níže.

Pokud chcete sledovat změny v mikroudělátcích, neklikejte na hvězdičku nahoře na této stránce, ale klikněte '''[https://cs.wikipedia.org/w/index.php?title=Wikipedista:Dvorapa/tools.js&action=watch sem]'''.

Některá mikroudělátka byla převzata z původních [[Wikipedista:Mormegil/tools.js.help|funkcí]] od wikipedisty [[Wikipedista:Mormegil|Mormegila]].

== Instalace ==
Do zvoleného [[Nápověda:Uživatelské skripty|uživatelského skriptu]], čili např. do souboru '''[[Speciální:Moje stránka/common.js|common.js]]''' vložte tento kód:
 jQuery.getScript("/w/index.php?title=Wikipedista:Dvorapa/tools.js&action=raw&ctype=text/javascript").done(function() {
 	// sem vložte řádky pro zvolená mikroudělátka
 });
Mezi složené závorky '''{}''' poté vložte řádky pro zvolená mikroudělátka. Mikroudělátka je možné použít vícekrát (avšak u většiny z nich to není k ničemu dobré). Pokud má mikroudělátko parametry, vkládají se dovnitř kulaté závorky a oddělují se čárkou. Parametry se ještě dále uzavírají do uvozovek, pokud jsou jednodušší, nebo do hranatých závorek, pokud jsou složitější.

__TOC__

== Tlačítka shrnutí ==
; Funkce
: Pod editační okno přidá panel s tlačítky pro vložení často používaných shrnutí editace (převzato částečně z udělátka na [[:sk:MediaWiki:Gadget-edit-summaries.js|skwiki]] a převážně z udělátka na [[:he:מדיה_ויקי:Gadget-Summarieslist.js|hewiki]]).
; Použití
: Základní:
 addSummaryToolbar();
: Vlastní:
 addSummaryToolbar(
 	["vlastní", {"text": "ahoj", "title": "Vloží ahoj"}, {"text": "svět", "title": "Vloží svět"},
 	"další", {"text": "ahoj světe", "title": "Vloží ahoj světe"}],
 	["diskuse", {"text": "re", "title": "Vloží re"}],
 	["ahoj", "re"]
 );
; Parametry
:* První parametr obsahuje nadpisy a seznamy dvojic {"text": "shrnutí", "title": "popisek"} oddělené čárkou.
:* Druhý parametr může být buď prázdný řetězec, nebo nadpisy a seznamy dvojic pro diskusní stránky.
:* Třetí parametr může být buď prázdný řetězec, nebo seznam shrnutí, při jejichž vložení se automaticky zaškrtne tlačítko malé editace. Při vložení jiného než zde uvedeného shrnutí se znovu samo odškrtne.
</onlyinclude><syntaxhighlight lang=javascript> */
function addSummaryToolbar(main, talk, minor) {

	function installSummary($summaryBox, $insertBefore, visualEditor) {
		var notFirstSet = false;

		function addSummary() {
			var summary = $(this).data('summary');
			var text = summary.text;
			var sum = $summaryBox,
				curr = sum.val();
			var comma = curr.length > 0 && curr.charAt(curr.length - 2) != "/";
			sum.val(curr + (comma ? ', ' : '') + text).trigger('input');
			if (visualEditor){
				$(".ve-ui-mwSaveDialog-checkboxes input:first").prop('checked', summary.minor || $.inArray(text, minorSummaries) + 1);
			} else {
				$("#wpMinoredit").prop('checked', summary.minor || $.inArray(text, minorSummaries) + 1);
			}
		}

		var summaries = window.summaries || [];
		if (!main) {
			summaries = summaries.concat([ // button sets
				"malé",
				{"text": "překlepy", "title": "Oprava překlepů"},
				{"text": "odkazy", "title": "Úprava odkazů na jiné články Wikipedie"},
				{"text": "kategorie", "title": "Úprava kategorií"},
				{"text": "externí odkazy", "title": "Úprava externích odkazů"},
				"běžné",
				{"text": "pravopis", "title": "Oprava pravopisu"},
				{"text": "gramatika", "title": "Oprava gramatiky"},
				{"text": "typografie", "title": "Oprava typografie"},
				{"text": "formulace", "title": "Úprava formulace"},
				{"text": "aktualizace", "title": "Aktualizace údajů"},
				{"text": "rozšíření", "title": "Rozšíření článku"},
				"technické",
				{"text": "obrázek", "title": "Přidání, změna, smazání obrázku"},
				{"text": "infobox", "title": "Vložení/úprava infoboxu"},
				{"text": "šablona", "title": "Vložení šablony"}
			]);
		} else {
			summaries = summaries.concat(main);
		}
		if (mw.config.get('wgNamespaceNumber') % 2 == 1 || mw.config.get('wgNamespaceNumber') == 4) {
			if (!talk) {
				summaries = summaries.concat([ // button sets for talk pages
					"diskuse",
					{"text": "odpověď", "title": "Odpověď"},
					{"text": "návrh", "title": "Návrh"},
					{"text": "dotaz", "title": "Dotaz"}
				]);
			} else {
				summaries = summaries.concat(talk);
			}
		}
		var minorSummaries = [];
		if (!minor) {
			minorSummaries = ["překlepy", "odkazy", "kategorie", "externí odkazy"]; // buttons automatically checking minor editation checkbox
		} else {
			minorSummaries = minor;
		}
		var div = $("<div>", {
				id: "summariesList"
			})
			.css({ // gadget appearance
				width: (visualEditor ? "" : "80%"),
				marginBottom: (visualEditor ? "" : "1em"),
				padding: (visualEditor ? ".7em .7em 0 .7em" : ""),
				marginRight: (visualEditor ? "3.25em" : ""),
				fontSize: "85%",
				lineHeight: "18px"
			});

		for (var i = 0; i < summaries.length; i++) {
			var summary = summaries[i];
			var summaryButton = $('<span>').css({
				marginLeft: '0.4em',
				whiteSpace: 'nowrap'
			}).data({
				summary: summary
			});
			if (typeof summary == "string") {
				if (notFirstSet){
					div.append(visualEditor ? '<br>' : ' '); // allow text wrap here
				}
				notFirstSet = true;
				summaryButton.text(summary + ':');
			} else {
				summaryButton.html('&nbsp;' + summary.text + '&nbsp;')
					.addClass('clickable-edit-summary')
					.attr('title', summary.title || '')
					.css({ // buttons appearance
						'background-color': '#f9f9f9',
						border: 'dotted 1px #708090',
						cursor: 'pointer'
					})
					.click(addSummary);
				if (visualEditor) div.append(' ');
			}
			div.append(summaryButton);
		}

		$insertBefore.before(div);
	}

	jQuery.getScript("https://cs.wikipedia.org/w/index.php?title=MediaWiki:Arrive.js&action=raw&ctype=text/javascript").done(function() {
		$(document).arrive(".wikiEditor-ui", {onceOnly: true}, function(){ // for source editor
			if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) + 1) {
				installSummary($('.editOptions #wpSummary'), $('.editOptions #wpSummaryLabel ~ .editCheckboxes'), false);
			}
		});

		$(document).arrive(".ve-init-target", {onceOnly: true}, function(){ // for VisualEditor
			var firstRun = true;
			mw.hook('ve.saveDialog.stateChanged').add(function() {
				if (firstRun){
					var target = ve.init.target;
					var $summaryBox = target.saveDialog.$body.find('.ve-ui-mwSaveDialog-summary textarea');
					installSummary($summaryBox, $('.ve-ui-mwSaveDialog-checkboxes'), true);
				}
				firstRun = false;
			});
		});
	});

}
/* </syntaxhighlight><onlyinclude>
== Odkazy na oblíbené stránky ==
; Funkce
: Do horní lišty přidá odkazy na oblíbené stránky.
; Použití
: Základní:
 addLinktoolbar([["Portál:Historie", "Portál"], ["Wikipedie:Pod lípou", "Pod lípou"]]);
: Pokročilé:
 addLinktoolbar([["Wikipedie:Žádost o práva správce", "RfA"], ["Wikipedie:Hlasování o smazání", "VfD"]], "Speciální:Poslední změny", "Pracovní", "p-tb", "t-upload");
; Parametry
:* První parametr obsahuje seznam dvojic ["odkaz na stránku", "zobrazený text odkazu"] oddělených čárkou. Pokud je místo dvojice prázdná položka "", vloží se na její místo oddělovač.
:* Druhý parametr může být buď prázdný řetězec, nebo název stránky, na které se pouze mají tyto odkazy zobrazit.
:* Třetí parametr může být buď prázdný řetězec, nebo nadpis lišty
:* Čtvrtý parametr může být buď prázdný řetězec, nebo ID jiného prvku, na začátek kterého se mají odkazy vložit. Seznam možných ID pro tento parametr je na [[:en:Help:Customizing toolbars|této stránce]] pod ''portletId''.
:* Pátý parametr může být buď prázdný řetězec, nebo ID jiného prvku, před který se mají odkazy vložit.
</onlyinclude><syntaxhighlight lang=javascript> */
function addLinktoolbar(items, page, caption, parent, next) {
	mw.loader.using(['mediawiki.util'], function() {
		if (!parent) parent = 'p-personal';
		if (!next) next = 'pt-preferences';
		if ((!page) || (page.replace(' ', '_') === mw.config.get('wgPageName'))) {
			if (!caption) {
				mw.util.addPortletLink(
					parent,
					null,
					caption,
					next + '-caption',
					null,
					null,
					'#' + next
				);
				$('#' + next + '-caption').css('font-weight', 'bold');
			}
			for (var i = 0; i < items.length; i++) {
				if (!items[i]) {
					mw.util.addPortletLink(
						parent,
						null,
						'|',
						next + '-spacer',
						null,
						null,
						'#' + next
					);
				} else {
					mw.util.addPortletLink(
						parent,
						'/wiki/' + items[i][0],
						items[i][1],
						next + '-' + items[i][1],
						items[i][0],
						null,
						'#' + next
					);
				}
			}
		}
	});
}
/* </syntaxhighlight><onlyinclude>
== Oblíbená interwiki ==
; Funkce
: Přeuspořádá interwiki odkazy tak, aby vybrané jazyky byly navrchu a případně buď ještě zvýrazní vybrané jazyky nebo skryje odkazy na ostatní jazyky.
; Použití
 reorderInterwiki(['en', 'de', 'sk'], false);
; Parametry
:* První parametr obsahuje seznam jazykových kódů cizojazyčných Wikipedií oddělených čárkou.
:* Druhý parametr obsahuje <code>true</code> pokud se mají zobrazovat ''pouze'' vybrané jazyky nebo <code>false</code> pokud se mají zobrazovat i ostatní a vybrané se mají jen zobrazovat navrchu a tučně.
</onlyinclude><syntaxhighlight lang=javascript> */
function reorderInterwiki(priorityLanguages, removeOthers) {
	var langBox = document.getElementById('p-lang');
	if (!langBox) return;
	var langList = langBox.getElementsByTagName('ul');
	if (!langList) return;
	langList = langList[0];
	var langItems = langList.getElementsByTagName('li');
	var priorityList = [];
	for (var l = 0; l < priorityLanguages.length; l++) {
		var reLanguageMatch = new RegExp('(^|\\s)interwiki-' + priorityLanguages[l] + '(\\s|$)');
		for (var i = 0; i < langItems.length; i++) {
			var item = langItems[i];
			if (reLanguageMatch.test(item.className)) {
				langList.removeChild(item);
				priorityList.push(item);
				break;
			}
		}
	}
	if (removeOthers) {
		while (langList.hasChildNodes()) {
			langList.removeChild(langList.childNodes[0]);
		}
	}
	if (langList.hasChildNodes()) {
		var firstNode = langList.childNodes[0];
		for (var j = 0; j < priorityList.length; j++) {
			langList.insertBefore(priorityList[j], firstNode);
			priorityList[j].style.fontWeight = 'bold';
		}
	} else {
		for (var k = 0; k < priorityList.length; k++) {
			langList.appendChild(priorityList[k]);
		}
	}
}
/* </syntaxhighlight><onlyinclude>
== Odkazy na jiné Wikipedie při chybějícím interwiki ==
; Funkce
: U stránky bez interwiki zobrazí odkazy na stejně pojmenované stránky na vybraných cizojazyčných Wikipediích.
; Použití
 showDefaultInterwiki(['cs', 'en', 'sk']);
; Parametry
: Buď seznam jazykových kódů cizojazyčných Wikipedií oddělených čárkou, nebo <code>null</code> pro nějaké výchozí
</onlyinclude><syntaxhighlight lang=javascript> */
function showDefaultInterwiki(langs) {
	if (!langs || langs.length === 0) {
		langs = ['cs', 'en', 'de', 'sk', 'pl', 'fr'];
	}
	// stránky, které už interwiki mají
	var langBox = document.getElementById('p-lang');
	if (!langBox || document.getElementById('wbc-linkToItem-link')) return;
	// bez editací, historie atd., s výjimkou situace, kdy stránka dosud ani neexistuje (a ošetřit NS MediaWiki)
	if (!document.getElementById('t-cite') && document.getElementById('ca-history') && mw.config.get('wgNamespaceNumber') !== 8) return;
	if (!langBox) {
		langBox = document.createElement('div');
		langBox.id = 'p-lang';
		langBox.className = mw.config.get('skin') === 'vector' ? 'portal' : 'portlet';
		var caption = document.createElement('h5');
		caption.appendChild(document.createTextNode('totéž jinde'));
		langBox.appendChild(caption);
	}
	var langBody = document.createElement('div');
	langBody.className = mw.config.get('skin') === 'vector' ? 'body' : 'pBody';
	langBox.appendChild(langBody);
	var langList = document.createElement('ul');
	langBody.appendChild(langList);
	var ns = mw.config.get('wgCanonicalNamespace');
	if (ns.length > 0) ns += ':';
	var title = mw.config.get('wgTitle');
	if (ns === 'Special:') title = mw.config.get('wgCanonicalSpecialPageName');
	for (var i = 0; i < langs.length; ++i) {
		var lang = langs[i];
		if (lang == mw.config.get('wgContentLanguage')) continue;
		var item = document.createElement('li');
		item.className = 'interwiki-' + lang;
		langList.appendChild(item);
		var link = document.createElement('a');
		link.href = '//' + lang + '.wikipedia.org/wiki/' + ns + title;
		link.appendChild(document.createTextNode(lang));
		item.appendChild(link);
	}
	var columnOne = document.getElementById(mw.config.get('skin') === 'vector' ? 'mw-panel' : 'column-one');
	columnOne.appendChild(langBox);
}
/* </syntaxhighlight><onlyinclude>
== Odkazy na sekce u jejich nadpisů ==
; Funkce
: Do článků přidá před každý nadpis odkaz, který vede na nadpis. Užitečné, pokud chcete někoho odkázat přímo na určitou sekci a nechce se vám ji hledat v (třeba příliš dlouhém) obsahu.
; Použití
 addLinksBeforeHeadings();
</onlyinclude><syntaxhighlight lang=javascript> */
function addLinksBeforeHeadings() {
	$('.mw-headline').each(function() {
		var small = document.createElement('small');
		var link = document.createElement('a');
		var headline = $(this);
		$(link).attr('href', function() {
			return '#' + headline.attr('id');
		});
		$(link).text('#');
		$(small).append(link);
		$(small).append('&nbsp;');
		headline.before(small);
	});
}
/* </syntaxhighlight><onlyinclude>
== Vyhledávat tabulátorem ==
; Funkce
: Stisk tabulátoru na libovolné stránce přenese kurzor do vyhledávacího pole.
; Použití
 tabToSearch();
</onlyinclude><syntaxhighlight lang=javascript> */
function tabToSearch() {
	if ( !mw.config.get( 'wgIsMainPage' ) && mw.config.get('wgAction') != 'submit' && mw.config.get('wgAction') != 'edit' ) {
		$( '#searchInput' ).attr( 'tabindex', '999' );
	}
}
/* </syntaxhighlight><onlyinclude>
== Důvod smazání souboru ==
; Funkce
: Červené odkazy na smazané soubory budou odkazovat na stránku souboru, nikoliv na Special:UploadWizard.
; Použití
 directRedFileLinks();
</onlyinclude><syntaxhighlight lang=javascript> */
function directRedFileLinks() {
	$('a[href^="//commons.wikimedia.org/wiki/Special:UploadWizard?uselang=cs&wpDestFile="]').each(function() {
		this.href = this.href.replace('Special:UploadWizard?uselang=cs&wpDestFile=', 'File:');
	});
}
/* </syntaxhighlight> */