MediaWiki:Common.js

De Lescatpat

Note : après avoir publié vos modifications, il se peut que vous deviez 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 appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
  • Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
  • Internet Explorer / Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
  • Opera : appuyez sur Ctrl + F5.
/* Tout JavaScript ici sera chargé avec chaque page accédée par n’importe quel utilisateur. */
/* Penser à aligner Mobile.js et Common.js pour la version bureau */

	//alert("common.js");


//---------------------------------------------------------------------------
//	Javascript nécessaire à la page de création d'une nouvelle recette
//	A Tester sous connexion Daniel pour mise au point du script dans la
//			page Utilisateur:Daniel/common.js
// Version en exploitation : ce script doit être dans les deux pages
//	Mediawiki:Common.js et Mediawiki:Mobile.js qui sont mutuellement exclusive
//---------------------------------------------------------------------------


if(mw.config.get("wgTitle") == "Créer une nouvelle recette"){

	//document.getElementById("dsg_NonEditeur").style.display = 'none';
	
	if($.inArray('Editeur', mw.config.get("wgUserGroups")) !== -1){
		document.getElementById("dsg_OuiEditeur").style.display = 'inline-block';
	}else{
		document.getElementById("dsg_NonEditeur").style.display = 'inline-block';
	}
	
	mw.loader.using('mediawiki.widgets').then( function (){
	
		// See documentation at: 
		// https://doc.wikimedia.org/oojs-ui/master/js/#!/api/OO.ui.ActionFieldLayout
		// https://doc.wikimedia.org/oojs-ui/master/js/#!/api/OO.ui.TextInputWidget
		// https://doc.wikimedia.org/oojs-ui/master/js/#!/api/OO.ui.ButtonWidget
		
			var inputTitreRecette = new OO.ui.TextInputWidget( {
			    placeholder: 'Le titre de la recette'
			} );
	
			var buttonValiderTitre = new OO.ui.ButtonWidget( {
				label: 'Validez le titre',
			} );
	
			var fieldtitre = new OO.ui.ActionFieldLayout(
				inputTitreRecette,
				buttonValiderTitre,
			    {
			        label: 'Entrez le titre de la recette puis validez le',
			        align: 'top',
			        help: 'Si une recette existe déjà sous ce titre, elle sera présentée pour modification'
			    }
			);
	
				
			var buttonCreerRecette = new OO.ui.ButtonWidget( {
				label: 'Créer la recette',
				href: 'https://doc.wikimedia.org',
				disabled: true
			} );
			
			// A ButtonSelectWidget that contains three ButtonOptionWidgets.
			// Note dsg : title est le nom du modèle de page qui est appelé pour créer la recette. Se limiter à 1 mot,
			// l'espace étant mal interpreté par mediawiki quand il décode l'URI. Ainsi j'ai corrigé
			// "plat principal" en le remplaçant par "plat".
			// C'est dans le Modèle:plat que référence sera faite à la Catégorie:plt principal
			
			var option1 = new OO.ui.ButtonOptionWidget( {
			        data: "1",
			        label: 'Entrée',
			        title: 'Entrée',
			    } ),
			    option2 = new OO.ui.ButtonOptionWidget( {
			        data: 2,
			        label: 'Plat',
			        title: 'Plat'
			    } ),
			    option3 = new OO.ui.ButtonOptionWidget( {
			        data: 3,
			        label: 'Dessert',
			        title: 'Dessert'
			    } ),
			    buttonSelect = new OO.ui.ButtonSelectWidget( {
			        items: [ option1, option2, option3 ]
			    } );
	
			$( '.dsg_TitreNouvellePage' ).append(fieldtitre.$element );
			$( '.dsg_creationRecette' ).append(buttonCreerRecette.$element );
			$( '.dsg_ButtonChoixCategorie' ).append(buttonSelect.$element );
	
			feuVertTitre = false;
			feuVertCategorie = false;
	
			buttonValiderTitre.on( 'click', function () {
				titreProposed = inputTitreRecette.getValue();
				
				if ( !inputTitreRecette.value) {
			        //alert("input vide" );
			        feuVertTitre = false;
			        buttonCreerRecette.setDisabled(true);
			    } else {
			        //alert("titre recu "+titreProposed );
			       feuVertTitre = true;
			       if(feuVertTitre && feuVertCategorie)
			        	buttonCreerRecette.setDisabled(false);
			        else buttonCreerRecette.setDisabled(true);
			    }
	
			});
	
			buttonSelect.on("choose", function () {
				categorieChoisie = buttonSelect.findSelectedItem( ).getTitle();
				//alert (categorieChoisie);
				//alert("titre recu "+titreProposed );
				feuVertCategorie = true;
			    if(feuVertTitre && feuVertCategorie)
			        buttonCreerRecette.setDisabled(false);
			    else buttonCreerRecette.setDisabled(true);	
			  });
	
			
			buttonCreerRecette.on( 'click', function () {
				//alert("FV categ "+feuVertCategorie);
				//alert("feuVertTitre "+feuVertTitre);
				
				if(feuVertTitre && feuVertCategorie) {
	
					// On prévoit ici les deux modes d'appel des pages des mediawikis.
					// Voir la documentation mediawiki sur les URL des sites qui dépendent
					// du type de serveur et de procédure de chaque site
	
					if(window.location.pathname == '/index.php'){
						//alert('On est chez ovh');
						lienAppelCreation = window.location.pathname + '?title=';
						lienAppelCreation = lienAppelCreation + 
							encodeURI (titreProposed + "&action=edit&section=new&preload=Modèle:" + categorieChoisie);
					}else{
						//alert('On est en local');
						lienAppelCreation = '/index.php/';
						lienAppelCreation = lienAppelCreation + titreProposed +
							encodeURI (  "?action=edit&section=new&preload=Modèle:" + categorieChoisie);
	
					}
	
				// Réinitialisation au cas où on utiliserait le bouton retour du navigateur
				buttonCreerRecette.setDisabled(true);
				inputTitreRecette.setValue(null);
				
				// Création de la nouvelle page
				window.location.href = 	lienAppelCreation;
				}
	
			});
	
	});	
}

/*******************************************************************************/
/* Javascript pour afficher le statut de l'utilisateur actuel					*/
/* sur la page "lescatpat:Utilisateurs" ou d'autres à définir																				*/
/********************************************************************************/

dsg_wgTitle = mw.config.get("wgTitle");
dsg_wgCanonicalNamespace = mw.config.get("wgCanonicalNamespace");
dsg_wgUserGroups = mw.config.get("wgUserGroups");

if(dsg_wgTitle == "Utilisateurs" & dsg_wgCanonicalNamespace == "Project"){
	if($.inArray('sysop', dsg_wgUserGroups) !== -1){
		statut = 'administrateur';	
	}else if($.inArray('Editeur', dsg_wgUserGroups) !== -1){
		statut = 'éditeur';	
	}else if($.inArray('user', dsg_wgUserGroups) !== -1){
		statut = 'utilisateur connecté';	
	}else{
		statut = 'utilisateur non connecté';	
	}
	//alert(statut);
	$(".monstatut").text(statut);	
}
//alert("22");

/*******************************************************************************/
/* Javascript applicable à la catégorie des recettes (voir if... plus bas)
/* Javascript pour modifier la navigation Outils								*/
/*																				*/
/* http://www.mediawiki.org/w/index.php?title=Manual:Interface/Sidebar			*/
/********************************************************************************/

function ModifySidebar( action, section, name, link ) {
	try {
		switch ( section ) {
			case 'languages':
				var target = 'p-lang';
				break;
			case 'toolbox':
				var target = 'p-tb';
				break;
			case 'navigation':
				var target = 'p-navigation';
				break;
			default:
				var target = 'p-' + section;
				break;
		}
 
		if ( action == 'add' ) {
			var node = document.getElementById( target )
							   .getElementsByTagName( 'div' )[0]
							   .getElementsByTagName( 'ul' )[0];
 
			var aNode = document.createElement( 'a' );
			var liNode = document.createElement( 'li' );
 
			aNode.appendChild( document.createTextNode( name ) );
			aNode.setAttribute( 'href', link );
			liNode.appendChild( aNode );
			liNode.className = 'plainlinks';
			node.appendChild( liNode );
		}
 
		if ( action == 'remove' ) {
			var list = document.getElementById( target )
							   .getElementsByTagName( 'div' )[0]
							   .getElementsByTagName( 'ul' )[0];
 
			var listelements = list.getElementsByTagName( 'li' );
 
			for ( var i = 0; i < listelements.length; i++ ) {
				if (
					listelements[i].getElementsByTagName( 'a' )[0].innerHTML == name ||
					listelements[i].getElementsByTagName( 'a' )[0].href == link
				)
				{
					list.removeChild( listelements[i] );
				}
			}
		}
 
	} catch( e ) {
		// let's just ignore what's happened
		return;
	}
}
 
function CustomizeModificationsOfSidebar() {
	ModifySidebar( 'remove', 'toolbox', 'Pages liées', '' );
	ModifySidebar( 'remove', 'toolbox', 'Suivi des pages liées', '' );
	ModifySidebar( 'remove', 'toolbox', 'Importer un fichier', 'Spécial:Téléverser' );
	ModifySidebar( 'remove', 'toolbox', 'Pages spéciales', 'Spécial:Pages spéciales' );
	ModifySidebar( 'remove', 'toolbox', 'Adresse de cette version', '' );
	//ModifySidebar( 'remove', 'toolbox', 'Information sur la page', '' );
	ModifySidebar( 'add', 'toolbox', 'Importer une image', 'Spécial:Téléverser' );
	
	
}

dsg_wgCategories = mw.config.get("wgCategories");
if($.inArray('Recettes', dsg_wgCategories) !== -1){ 
	//alert("105");
	//	addOnloadHook( CustomizeModificationsOfSidebar ); deprecated
	jQuery( CustomizeModificationsOfSidebar );
}

/*******************************************************************************/
/* Javascript applicable à la catégorie des recettes							*/
/*																				*/
/* Calcul des quantités d'ingrédients selon le nombre de parts					*/
/********************************************************************************/
// pour tester les éléments sélectionnés, utiliser .css({"color":"red","border":"2px solid red"});


//if($.inArray('Recettes', wgCategories) !== -1){

	/*
	Ancienne méthode : le nombre de parts était supposé par défaut à 4 et
	les quantités d'ingrédients étaient données pour 1 part. C'est le cas
	des recettes de Catherine.
	Nouvelle méthode : on définit le nombre de parts x dans la page à l'aide
	du modèle {{pour|x}} et les quantités d'ingrédients sont alors données
	pour x parts.
	D'où la nécessité de 2 cas de calcul selon que l'on part des données
	pour 1 part ou des données pour x parts. La distinction se fait en repérant
	la balise class="recette_pour" dans le html.
	*/
	
	/* length = 0 correspond à absence de la class recette_pour 
	ce qui correspond au format du tableau ingrédients initial
	donc à toutes les recettes de Catherine */
	if($(".recette_pour").length === 0){
		//alert("catherine");
		ancien_format = true;
		nbpers = 4;
	}else{
		//alert($(".recette_pour").text());
		nbpers = $(".recette_pour").text();
		ancien_format = false;
	} 
	
	$(".ingredients-nbpersonnes").text(nbpers);

	var calcul_quantites = function(qu,nba){
		if(qu === '')return;
		qu2 = qu.replace(',','.');
		resultat = (qu2 / nba).toFixed(2).replace('.00','');
		if(resultat === 0)return;
		return resultat;
	}

	var calcul_quantites2 = function(qu,nba){
		if(qu === '')return;
		qu2 = qu.replace(',','.');
		resultat = (qu2 * nba).toFixed(2).replace('.00','');
		if(resultat === 0)return;
		return resultat;
	}

	$("tr.ligne-ingredient").each(function(){

		if(ancien_format === true){
			
			q_unitaire = $(this).find(".recette-qt").text();
			$(this).find(".recette-q").text(q_unitaire);
			q_totale = calcul_quantites2(q_unitaire,nbpers);
			$(this).find(".recette-qt").text(q_totale);
			
		}else{
			//alert ("new");
			q_totale = $(this).find(".recette-qt").text();
			q_unitaire = calcul_quantites(q_totale,nbpers);
			$(this).find(".recette-q").text(q_unitaire);
		}

	});

	$(".table-ingredients-bouton-moins").click(function(){
		nbpers--;
		$(".ingredients-nbpersonnes").text(nbpers);

		$("tr.ligne-ingredient").each(function(){
			q_unitaire = $(this).find(".recette-q").text();
			q_totale = calcul_quantites2(q_unitaire,nbpers);
			$(this).find(".recette-qt").text(q_totale);
		});

		if(nbpers == 1)$(".table-ingredients-bouton-moins").hide();

	});

	$(".table-ingredients-bouton-plus").click(function(){
		nbpers++;
		$(".ingredients-nbpersonnes").text(nbpers);

		$("tr.ligne-ingredient").each(function(){
			q_unitaire = $(this).find(".recette-q").text();
			q_totale = calcul_quantites2(q_unitaire,nbpers);
			$(this).find(".recette-qt").text(q_totale);
		});

		if(nbpers > 1)$(".table-ingredients-bouton-moins").show();


	});

//}


/******************************************************************************/
/* préparation de la barre d'édition                                          */
/* https://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization  */
/******************************************************************************/

/**
 * préparation de la barre d'édition 
 * https://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization 
 */
  
var d_dsg = new Date();
var curr_date_dsg = d_dsg.getDate();
var curr_month_dsg = d_dsg.getMonth() + 1;
var curr_year_dsg = d_dsg.getFullYear();


var customizeToolbar = function() {
	/* Your code goes here */

/* Remove le bouton reference 
$( '#wpTextbox1' ).wikiEditor( 'removeFromToolbar', {
	'section': 'main',
	'group': 'insert',
	'tool': 'reference'
});
*/

//if($.inArray('Recettes', wgCategories) !== -1){
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
	'sections': {
		'recettes': {
			'type': 'booklet',
			'deferLoad': true,
			'label': 'Ingrédients',
			'pages': {
				'format': {
					'layout': 'table',
					'label' : 'Table des ingrédients',
					'headings': [
						{ 'textMsg': 'wikieditor-toolbar-help-heading-description' },
						{ 'textMsg': 'wikieditor-toolbar-help-heading-syntax' },
						{ 'textMsg': 'wikieditor-toolbar-help-heading-result' }
					],
					'rows': [
						{
						'description': { 'html':'Taper une ligne par ingrédient<br>sans omettre les séparateurs<br>|... /... /...' },
						'syntax': { 'html': '{{Ingrédients<br>|nom ingrédient/quantité par personne/unité<br>}}' },
						'result': { 'html': 'Un tableau des ingrédients mis en page' }
						}
					]
				}
			}
		}
	}
} );
//}

$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
	'sections': {
		'autres': {
			'type': 'toolbar', // Can also be 'booklet'
			'label': 'Autres'
			// or 'labelMsg': 'section-emoticons-label' for a localized label
		}
	}
} );

$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
	'section': 'autres',
	'groups': {
		'commandes_dsg': {
		}
	}
} );

$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
	'section': 'autres',
	'group': 'commandes_dsg',
	'tools': {
		
		'a1': {
			'labelMsg': 'A1',
			'type': 'button',
			'icon': 'resources/assets/button_head_A1.png',
			'action': {
				'type': 'encapsulate',
				'options': {
					pre: "\n== ",
					'peri': 'xxx',
					post: " ==\n"
				}
			}
		},
		'a2': {
			'labelMsg': 'A2',
			'type': 'button',
			'icon': 'resources/assets/button_head_A2.png',
			'action': {
				'type': 'encapsulate',
				'options': {
					pre: "\n=== ",
					'peri': 'xxx',
					post: " ===\n"
				}
			}
		},
		'galerie': {
			'labelMsg': 'Galerie',
			'type': 'button',
			'icon': 'resources/assets/btn_toolbar_gallery.png',
			'action': {
				'type': 'encapsulate',
				'options': {
					pre: "<gallery>\n",
					'peri': 'image:exemple1.png|aaa\nimage:exemple2.png\n',
					post: "</gallery>\n"
				}
			}
		},
		'date': {
			'labelMsg': 'Date',
			'type': 'button',
			'icon': 'resources/assets/button_date.png',
			'action': {
				'type': 'encapsulate',
				'options': {
					'peri': curr_date_dsg + "/" +curr_month_dsg + "/" +curr_year_dsg
				}
			}
		},
		'attention': {
			'labelMsg': 'Attention',
			'type': 'button',
			'icon': 'resources/assets/button_aviso.png',
			'action': {
				'type': 'encapsulate',
				'options': {
					pre: "{{Attention}}",
					'peri': 'xxx'
				}
			}
		},
		'retour_ligne': {
			'labelMsg': 'Retour ligne',
			'type': 'button',
			'icon': 'resources/assets/button_br.png',
			'action': {
				'type': 'encapsulate',
				'options': {
					pre: "<br>\n"
				}
			}
		},
		'liens': {
			label: 'Liens vers',
			type: 'button',
			icon: 'resources/assets/button_liens.png',
			action: {
				type: 'encapsulate',
				options: {
					pre: "{{liens|",
					peri: "Page liée",
					post: "}}"
				}
			}
		},
		'categorie': {
			label: 'Catégorie',
			type: 'button',
			icon: 'resources/assets/button_categorie.png',
			action: {
				type: 'encapsulate',
				options: {
					pre: "[[Catégorie:",
					peri: "A remplir",
					post: "]]"
				}
			}
		},'box': {
			label: 'Box',
			type: 'button',
			icon: 'resources/assets/button_box.png',
			action: {
				type: 'encapsulate',
				options: {
					pre: "<blockquote style=\"background: white; border: 1px solid black; padding: 1em;\">\n",
					peri: "Texte",
					post: "\n</blockquote>\n"
				}
			}
		},
		'code': {
			label: 'Code',
			type: 'button',
			icon: 'resources/assets/button_code.png',
			action: {
				type: 'encapsulate',
				options: {
					pre: "<pre>\n",
					peri: "Code",
					post: "\n</pre>\n"
				}
			}
		}
	}
} );


};

/* A del en version > 1.33  
/* Check if view is in edit mode and that the required modules are available. Then, customize the toolbar . . . * /
if ( $.inArray( mw.config.get( 'wgAction' ), [ 'edit', 'submit' ] ) !== -1 ) {
	mw.loader.using( 'user.options', function () {
		// This can be the string "0" if the user disabled the preference ([[bugzilla:52542#c3]])
		if ( mw.user.options.get( 'usebetatoolbar' ) == 1 && mw.user.options.get( 'showtoolbar' ) == 1 ) {
			$.when(
				mw.loader.using( 'ext.wikiEditor.toolbar' ),
				$.ready
			).then( customizeToolbar );
		}
	} );
}
*/

/* Check if view is in edit mode and that the required modules are available. Then, customize the toolbar … */
if ( [ 'edit', 'submit' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 ) {
	mw.loader.using( 'user.options' ).then( function () {
		// This can be the string "0" if the user disabled the preference ([[phab:T54542#555387]])
		if ( mw.user.options.get( 'usebetatoolbar' ) == 1 ) {
			$.when(
				mw.loader.using( 'ext.wikiEditor' ), $.ready
			).then( customizeToolbar );
		}
	} );
}


// Add the customizations to LiquidThreads' edit toolbar, if available
mw.hook( 'ext.lqt.textareaCreated' ).add( customizeToolbar );