Uzanto:Tlustulimu/butonetoj.js

El Vikipedio, la libera enciklopedio

Notu:Post publikigo forviŝu la kaŝmemoron de via foliumilo por vidi la ŝanĝojn.

  • Firefox / Safari: Premu majuskligan klavon klakante Reŝarĝi, aŭ premu aŭ Stir-F5Stir-R (⌘-R kun Makintoŝo)
  • Google Chrome: Premu Stir-majuskligklavon-R (⌘-Majuskligklavo-R kun Makintoŝo)
  • Interreta Esplorilo / Edge: Premu Stir klakante Refreŝu, aŭ premu Stir-F5
  • Opera: Premu Stir-F5.
/* eslint-disable indent */
/*
</pre>

== Automatyczne opisy zmian ==
; Autor (Author): [[:pl:User:Adziura|Adam Dziura]]
; Poprawki (Fixes): [[:pl:User:Nux|Maciej Jaros]]
; Esperantigita de [[:eo:Uzanto:Tlustulimu]]
<pre>
*/
/* global ve, mw, jQuery */
(function($) {

var isVe = false;
var opisBtns = null;

/** Funkcje pomocnicze do dodawania przycisków. */
var przyciski = {
	/**
	 * Uproszczona forma przyciskiDodaj.
	 * 
	 * @example Przykład własnego opisu zmian (tekst przycisku i opis zmian te same):
	 * <pre>
		przyciski.zmiana({tekst:'archiwizacja'})
	* </pre>
	* 
	* @example Przykład krótkiego opisu (porównanie starego i nowego formatu):
	* <pre>
		przyciskiDodaj(opisBtns, 'int.', 'dodajOpis("int.")', kl, 'Poprawiono interpunkcję');
		przyciski.zmiana({tekst:'int.', dlugie:'Poprawiono interpunkcję'})
	* </pre>
	* 
	* @example Pełne, typowe wywołanie:
	* <pre>
		przyciskiDodaj(opisBtns, 'linki-zew', 'dodajOpis("linki zewnętrzne")', kl, 'Poprawiono/dodano linki zewnętrzne');
		przyciski.zmiana({tekst:'linki-zew', zmiana:'linki zewnętrzne', dlugie:'Poprawiono/dodano linki zewnętrzne'})
	* <pre>
	* 
	* @param {Object} opcje Opcje.
	*/
	zmiana: function(opcje)
	{
		var defaults = {
			tekst: '',
			zmiana: '',
			dlugie: '',
			klasa: '',
		};
		var params = $.extend({}, defaults, opcje);
		if (params.zmiana.length < 1) {
			params.zmiana = params.tekst;
		}
		if (params.dlugie.length < 1) {
			params.dlugie = params.tekst;
		}
		var pAkcja = function () {
			dodajOpis(params.zmiana);
		};

		przyciskiDodaj(opisBtns, params.tekst, pAkcja, params.klasa, params.dlugie);
	}
};

/**
 * Inicjowanie przycisków.
 * 
 * @param {Boolean} useVe Jeśli prawda to przyjmujemy, że używany jest VE.
 */
function initBtns(useVe)
{
	opisBtns = document.createElement('span');
	opisBtns.id = 'userSummaryButtons';

	// export
	// zgodność z [[Wikipedysta:Skalee/dodatkowe przyciski opisu edycji.js]]
	window.przyciskiOpisBtns = opisBtns;

	if(useVe === true) {
		opisBtns.style.cssText = 'border: solid 1px #ccc; border-top: none; border-bottom: 0; display: block; overflow: hidden; z-index: 1; padding: 0.25em 0.5em;';
		isVe = true;
		// evil…
		var realInitialize = ve.ui.MWSaveDialog.prototype.initialize;
		ve.ui.MWSaveDialog.prototype.initialize = function () {
			realInitialize.call( this );
			this.editSummaryInput.$element.after( opisBtns );
		};
	} else {
		//
		// sprawdzenie, czy to jest pole edycji z opisem zmian (nie jest takie jako nagłówek)
		var el_label = document.getElementById('wpSummaryLabel');
		if (el_label)
		{
			if (el_label.innerHTML.indexOf('Resumo')==-1)
				return;	// stop
		}
		else
		{
			return;	// stop
		}

		//
		// dodanie elementu okalającego przyciski bezpośrednio za opisem zmian
		// Wstawiamy po 'wpSummaryWidget' dla wersji z OOUI, po 'wpSummary' dla wersji bez
		var el_summary_wrapper;
		el_summary_wrapper = document.getElementById('wpSummaryWidget');
		if (!el_summary_wrapper) el_summary_wrapper = document.getElementById('wpSummary');
		$(el_summary_wrapper).after(opisBtns);
	}

	//
	// dodanie przycisku specjalnego - do rozwijania skrótów
	var btn = przyciskiDodaj(opisBtns, '+rozwiń skróty', rozwinSkrotyOpisowZm, '',
		'Rozwiń skróty opisów zmian');
	//btn.style.cssText = 'position:absolute; top:0; right:0;';
	btn.style.cssText = 'float:right;border-color:#dd0;background-color:#dea';
	btn.id = 'btn_opisy_zm_waxon_off';
	btn.wax_on = false;

	//
	// dodawanie przycisków
	addBtns();

	mw.hook('userjs.przyciskiOpis.gotowe').fire(przyciski, opisBtns);
}

function addBtns() {
	var kl = '';	// klasa jest niepotrzebna (wszystkie <a> w #userSummaryButtons ustawione poprzez CSS)
	if (opisBtns)
	{

// drobne różne
                przyciskiDodaj(opisBtns, 'vik.', 'dodajOpis("vikiigo")', kl,
'Mi vikiigis iomete');
przyciskiDodaj(opisBtns, 'format.', 'dodajOpis("formatigo")', kl,
'Plibonigita formatigo');
przyciskiDodaj(opisBtns, 'stil', 'dodajOpis("stilaj plibonigoj")', kl,
'Plibonigita stilo de la klarigoj');
przyciskiDodaj(opisBtns, 'orto.', 'dodajOpis("ortografio")', kl,
'Plibonigitaj ortografio kaj interpunktado');

opisBtns.appendChild(document.createTextNode(' ')); // interspaco

przyciskiDodaj(opisBtns, 'ilig', 'dodajOpis("interna ligilo")', kl,
'Aldono de internaj ligiloj (links)');
przyciskiDodaj(opisBtns, 'iwiki', 'dodajOpis("interwiki")', kl,
'Aldono de interlingvaj ligiloj (interwiki)');
przyciskiDodaj(opisBtns, 'kor-iwiki', 'dodajOpis("korekto interwiki")', kl,
'Plibonigo de la interlingvaj ligiloj (interwiki)');
przyciskiDodaj(opisBtns, 'kat.', 'dodajOpis("kategorio")', kl,
'Plibonigita kategoriigo');

opisBtns.appendChild(document.createTextNode(' ')); // interspaco

// teĥnikaĵoj
przyciskiDodaj(opisBtns, 'ŝabl.', 'dodajOpis("ŝablono")', kl,
'Aldono / ŝanĝo de ŝablono');
przyciskiDodaj(opisBtns, 'mod.', 'dodajOpis("modulo")', kl,
'Aldono / ŝanĝo de modulo');
przyciskiDodaj(opisBtns, 't.for.', 'dodajOpis("tuja forigo")', kl,
'Paĝo estas proponata por tuja forigo');
przyciskiDodaj(opisBtns, 'for.', 'dodajOpis("forigu")', kl,
'Paĝo estas proponata por forigo post diskuto');
przyciskiDodaj(opisBtns, 'bild.', 'dodajOpis("bildo")', kl,
'Nova bildo');
przyciskiDodaj(opisBtns, 'info.', 'dodajOpis("informkesto")', kl,
'Nova informkesto');
przyciskiDodaj(opisBtns, 'navi.', 'dodajOpis("navigada listelo")', kl,
'Nova navigada listelo');
przyciskiDodaj(opisBtns, 'ĝerm.', 'dodajOpis("ĝermo")', kl,
'Markigo kiel ĝermo');
przyciskiDodaj(opisBtns, 'alid.', 'dodajOpis("alidirektilo (redirect)")', kl,
'Aldono/ŝanĝo de alidirektilo');
przyciskiDodaj(opisBtns, 'bonv.', 'dodajOpis("bonvenon")', kl,
'Aldono de la ŝablono Bonvenon');

//opisBtns.appendChild(document.createTextNode(' ')); // interspaco
opisBtns.appendChild(document.createElement('br')); // nova linio

// redigado
przyciskiDodaj(opisBtns, 'ald.', 'dodajOpis("aldono")', kl,
'Aldonitaj novaj faktoj');
przyciskiDodaj(opisBtns, 'kor.', 'dodajOpis("korekto")', kl,
'Mi iomete korektis');
przyciskiDodaj(opisBtns, 'trad.', 'dodajOpis("traduko")', kl,
'Mi iomete tradukis');
przyciskiDodaj(opisBtns, 'pol.', 'dodajOpis("poluro")', kl,
'Mi iomete poluris');

przyciskiDodaj(opisBtns, 'nov.', 'dodajOpis("novigo de datenoj")', kl,
'Novigo de malnoviĝintaj datenoj');
przyciskiDodaj(opisBtns, 'rev.', 'dodajOpis("reverto")', kl,
'Antaŭa ŝanĝo estis forigita (rewert)');

//diskutoj
przyciskiDodaj(opisBtns, 'resp.', 'dodajOpis("respondo")', kl,
'Mi respondis al demando');
przyciskiDodaj(opisBtns, 'at.', 'dodajOpis("atentigo")', kl,
'Mi atentigis pri io');

opisBtns.appendChild(document.createTextNode(' ')); // interspaco

//korektoj kaj aldonoj de ŝablonuzo
przyciskiDodaj(opisBtns, 'ŝab.-uz.', 'dodajOpis("korekto de ŝablonuzo")', kl,
'Mi korektis fuŝan ŝablonuzon');
przyciskiDodaj(opisBtns, 'ald. ŝ.', 'dodajOpis("aldono al ŝablonuzo")', kl,
'Mi aldonis ion al ŝablonuzo');
przyciskiDodaj(opisBtns, 'for. p.', 'dodajOpis("forpreno de duobla parametro")', kl,
'Mi forprenis duoblan parametron');
przyciskiDodaj(opisBtns, 'for. i.', 'dodajOpis("forpreno de duobla informkesto")', kl,
'Mi forprenis duoblan informkeston');
przyciskiDodaj(opisBtns, 'reg.-iso.', 'dodajOpis("aldono de regiono-ISO")', kl,
'Mi aldonis mankintan regiono-IOSO-valoron');
przyciskiDodaj(opisBtns, 'zom.', 'dodajOpis("aldono de zomo")', kl,
'Mi aldonis zomon');
przyciskiDodaj(opisBtns, 'ŝ. zom.', 'dodajOpis("ŝanĝo de zomo")', kl,
'Mi ŝanĝis zomon');

opisBtns.appendChild(document.createTextNode(' ')); // interspaco
// substituo de malnova HTML kaj vikia rubo
przyciskiDodaj(opisBtns, 'ŝ. etik.', 'dodajOpis("ŝanĝo de malnova HTML-etikedo per io alia")', kl,
'Mi ŝanĝis malnovajn HTML-etikedojn');
przyciskiDodaj(opisBtns, 'ŝ. vik.', 'dodajOpis("ŝanĝo de malnova vikia kodaĵo per io alia")', kl,
'Mi ŝanĝis malnovan vikian kodon');
}
}

/**
 * Dodaj przycisk zmian.
 * 
 * @param {Element} elUserBtns Element okalający, do którego dodać przycisk (zwykle: opisBtns).
 * @param {String} pTekst Tekst w środku przycisku.
 * @param {String|Function} pAkcja Akcja jaką wykonać przy naciśnięciu; może być ciągiem poleceń.
 * @param {String} pKlasa Dodatkowa klasa przycisku jeśli konieczna.
 * @param {String} pOpis Dłuższy/rozwinięty opis akcji.
 * @returns {Element} Zwraca dodany element.
 */
function przyciskiDodaj(elUserBtns, pTekst, pAkcja, pKlasa, pOpis)
{
	var nowyBtn = document.createElement('a');

	// atrybuty
	nowyBtn.appendChild(document.createTextNode(pTekst));
	nowyBtn.title = pOpis;
	if (pKlasa !== '') {
		nowyBtn.className = pKlasa;
	}
	nowyBtn.onclick = (typeof pAkcja === 'function') ? pAkcja : new Function(pAkcja);

	// dodanie przycisku
	elUserBtns.appendChild(nowyBtn);

	return nowyBtn;
}

/**
 * Funkcja do dodania opisu zmian.
 * 
 * @param {String} opis Opis zmian.
 */
function dodajOpis(opis)
{
	var wpS = (isVe) ? $( '.ve-ui-mwSaveDialog-summary textarea' )[0] : wpS = document.editform.wpSummary;
	
	if (wpS.value.indexOf(opis) == -1)
	{
		if (wpS.value !== '' && wpS.value.charAt(wpS.value.length-2) != '/')
		{
			wpS.value += ', ' + opis;
		}
		else
		{
			wpS.value += opis;
		}
		$(wpS).trigger('change');
	}
}

var editActions = [
	"edit", "submit", "parsermigration-edit"
];
if (editActions.indexOf(mw.config.get('wgAction')) >= 0)
{
	if (mw.config.get('wgNamespaceNumber') > -1)
	{
		jQuery(document).ready(initBtns);
	}
}

// broken on mobile, desktop only
if (mw.config.get('skin') !== 'minerva') {
mw.loader.using( 'ext.visualEditor.desktopArticleTarget.init' ).done( function () {
	mw.libs.ve.addPlugin( function () {
		return mw.loader.using( 'ext.visualEditor.mwcore' )
			.done( function () {
				initBtns(true);
			} );
	} );
} );
}

//
// rozwiajanie skrótów do pełnych opisów i z powrotem
function rozwinSkrotyOpisowZm()
{
	var els = opisBtns.getElementsByTagName('a');
	for (var i=0; i<els.length; i++)
	{
		var tit = els[i].title;
		els[i].title = els[i].innerHTML;
		els[i].innerHTML = tit;
	}
	var btn = document.getElementById('btn_opisy_zm_waxon_off');
	btn.innerHTML = (btn.wax_on === false) ? '&nbsp; -zwiń skróty' : '+rozwiń skróty';
	btn.wax_on = !btn.wax_on;
}

// ~export
window.przyciskiDodaj = przyciskiDodaj;
window.dodajOpis = dodajOpis;

})(jQuery);