MediaWiki:Gadget-lib-beau.js

Un livre de Wikilivres.

Attention : Depuis MediaWiki 1.18 les pages se terminant avec l'extension .js ou .css sont interprétées comme des pages wiki ! En particulier les modèles (subst ou non) et les liens. Vous devez donc migrer le code source et effectuer vos changements en évitant ces éléments de syntaxe wiki (peu importe leurs emplacements dans le code source : commentaire, chaine) :

  • Double accolades ouvrantes (en particulier avec subst:) : séparer les deux accolades "{"+"{" du reste de la chaine
  • Double crochets ouvrants : même technique de séparation.
  • Signature (tildes ~ multiples) : même technique de séparation.

Note : après avoir enregistré vos préférences, vous devrez attendre que le serveur mette à jour la feuille de style globale avant de forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : Maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac) ;
  • Google Chrome : Appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac) ;
  • Internet Explorer : Maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ;
  • Konqueror : Cliquez sur Actualiser ou pressez F5 ;
  • Opera : Videz le cache dans Outils → Préférences.
wgfrwikibooks_Gadget_lib_beauJsVersion = "20150117001";
//[[Catégorie:MediaWiki:Fonction Monobook en JavaScript|lib-beau]]

var beau$userGroups = {};

var gr = mw.config.get('wgUserGroups')
if (gr) {
	for (var i = 0; i < gr.length; i++) {
		beau$userGroups[ gr[i] ] = true;
	}
}

function beau$callAPI(query) {
	var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?';
	for (var field in query) {
		var value = query[field];
		url += '&' + field + '=' + encodeURIComponent(value);
	}
	url += '&format=json';
	mw.loader.load(url);
}

function importScriptFromWikipedia(page) {
	mw.loader.load('//pl.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=' + encodeURIComponent(page));
}

function importStylesheetFromWikipedia(page) {
	mw.loader.load('//pl.wikipedia.org/w/index.php?action=raw&ctype=text/css&title=' + encodeURIComponent(page), 'text/css');
}

var toolbarGadget = {};

/**
 * Status strony, true - strona załadowana.
 */
toolbarGadget.pageLoaded = false;

/**
 * Tablica przycisków, które zostały dodane za wcześnie.
 */
toolbarGadget.buttons = new Array();

/**
 * Dodaje przycisk na pasek narzędziowy.
 * @param button Obiekt opisujący przycisk, jego parametry to
 * title - tytuł przycisku
 * alt - tekst alternatywny
 * id - identyfikator przycisku (obiektu img)
 * href - link
 * onclick - funkcja wywoływana po naciśnięciu
 * icon - ikona przycisku
 * oldIcon - ikona przycisku dla starego paska (domyślnie icon)
 * newIcon - ikona przycisku dla nowego paska (domyślnie icon)
 * section - nazwa sekcji, do której przycisk ma zostać dodany
 * group- nazwa grupy, do której przycisk ma zostać dodany (jeśli takiej nie ma, zostanie stworzona)
 */

toolbarGadget.addButton = function (button) {
	if (!this.pageLoaded) {
		this.buttons.push(button);
		return;
	}
	//console.log("Wstawianie przycisku");
	//console.log(button);
	var title = button.title ? button.title : "";

	// Nowy pasek narzędzi
	// FIXME: zrobić to lepiej, jak będzie istniała dokumentacja do API...
	var toolbar = document.getElementById('wikiEditor-ui-toolbar');
	if (toolbar) {
		//console.log("Wykryto nowy pasek narzędzi");
		var image = document.createElement('img');
		image.alt = button.alt ? button.alt : title;
		image.title = title;
		image.className = "tool tool-button";
		image.style.cssText = "width: 22px; height: 18px; padding-top:4px";

		if (button.id)
			image.id = button.id;

		if (button.newIcon)
			image.src = button.newIcon;
		else if (button.icon)
			image.src = button.icon;

		var link = document.createElement('a');
		if (button.href)
			link.href = button.href;
		if (button.onclick)
			link.onclick = button.onclick;

		link.appendChild(image);

		// Sekcja nowego przycisku
		var section;
		if (button.section) {
			var sections = $.makeArray( $(toolbar).find('div.section-'+button.section) );
			if (sections.length) {
				section = sections[0];
				//console.log("Znaleziono sekcję");
			}
		}

		// Grupa nowego przycisku
		var group;
		var groupName = button.group ? button.group : 'custom';
		if (!group) {
			var groups = $.makeArray( $((section ? section : toolbar)).find('div.group-'+groupName) );
			if (groups.length) {
				group = groups[0];
				//console.log("Znaleziono grupę");
			}
		}
		if (!group) {
			// Jeśli sekcja nie istnieje, umieść grupę w głównej
			if (!section) {
				var sections = $.makeArray( $(toolbar).find('div.section-main') );
				if (sections.length) {
					section = sections[0];
				}
			}
			group = document.createElement('div');
			group.className = 'group group-' + groupName;
			group.rel = groupName;

			section.appendChild(group);
		}
		group.appendChild(link);
		return;
	}
	// Stary pasek narzędzi
	toolbar = document.getElementById('toolbar');
	if (toolbar) {
		//console.log("Wykryto stary pasek narzędzi");
		var image = document.createElement('img');
		image.alt = button.alt ? button.alt : title;
		image.title = title;
		image.className = 'mw-toolbar-editbutton';
		if (button.id)
			image.id = button.id;

		if (button.oldIcon)
			image.src = button.oldIcon;
		else if (button.icon)
			image.src = button.icon;
		image.style.cursor = 'pointer';

		if (button.onclick)
			image.onclick = button.onclick;

		if (button.href) {
			var link = document.createElement('a');
			link.href = button.href;
			link.appendChild(image);
			toolbar.appendChild(link);
		}
		else {
			toolbar.appendChild(image);
		}
		return;
	}
	//console.log("Nie wykryto paska narzędzi");
}

toolbarGadget.addButtons = function() {
	for (var i = 0; i < this.buttons.length; i++) {
		this.addButton(this.buttons[i]);
	}
	this.buttons = null;
}

$( function() {
	if (toolbarGadget.pageLoaded) return;
	toolbarGadget.pageLoaded = true;
	//console.log("Strona została załadowania");
	toolbarGadget.addButtons();
});