MediaWiki:Catpat.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.

/*******************************************************************************
	 Javascript ...	Scripts spécifiques du wiki lescatpat en exploitation.
	 Ces scripts sont appelés par instruction importScript('MediaWiki:Catpat.js')
	 dans les deux pages MediaWiki:common.js et MediWiki:Mobile.js
	 
	 https://www.mediawiki.org/wiki/How_to_enhance_wiki_content_with_JavaScript
 ********************************************************************************/

	//alert ("catpat.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 exclusives
//---------------------------------------------------------------------------


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

	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
	
		//---------------------------------------------------------------------------
		//	Préparation du formulaire présenté dans la page "Créer une nouvelle recette"
		//	On utilise ici des widgets mediawiki. Voir
		//	https://www.mediawiki.org/wiki/OOUI/Widgets/Selects_and_Options
		//	https://www.mediawiki.org/wiki/OOUI/Using_OOUI_in_MediaWiki
		//	https://doc.wikimedia.org/oojs-ui/master/demos/
		//		?page=widgets&theme=wikimediaui&direction=ltr&platform=mobile#ButtonWidget-normal
		//---------------------------------------------------------------------------

		//	Zone titre de la page à créer (nom de la recette)
	
		var inputTitreRecette = new OO.ui.TextInputWidget( {
		    placeholder: 'Le titre de la recette'
		} );
	
		var buttonValiderTitre = new OO.ui.ButtonWidget( {
			label: 'Valider 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'
		    }
		);

		//	Zone choix de la catégorie 
		// A ButtonSelectWidget that contains three ButtonOptionWidgets.

		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 principal'
		    } ),
		    option3 = new OO.ui.ButtonOptionWidget( {
		        data: 3,
		        label: 'Dessert',
		        title: 'Dessert'
		    } ),
		    buttonSelect = new OO.ui.ButtonSelectWidget( {
		        items: [ option1, option2, option3 ]
		    } );

		//	Zone confirmer tableau ingrédients 
		
		var avecIngredients = new OO.ui.CheckboxInputWidget( {
			selected: true
		} );
	
		fieldIngredients = new OO.ui.FieldLayout( 
			avecIngredients, {
			align: 'inline',
			label: 'Décocher si vous ne voulez pas le tableau des ingrédients',
			help: 'Vous pourrez toujours l\'ajouter ultérieurement'
		} );
		

		//	Zone finale : préparer et préremplir la nouvelle page 
			
		var buttonCreerRecette = new OO.ui.ButtonWidget( {
			label: 'Créer la recette',
			href: 'https://doc.wikimedia.org',
			disabled: true
		} );


		//---------------------------------------------------------------------------
		//	Installation des zones widget dans la page "Créer une nouvelle recette"
		//---------------------------------------------------------------------------

		$( '.dsg_TitreNouvellePage' ).append(fieldtitre.$element );
		$( '.dsg_creationRecette' ).append(buttonCreerRecette.$element );
		$( '.dsg_ButtonChoixCategorie' ).append(buttonSelect.$element );
		$( '.dsg_Demande_TableauIngredients' ).append(fieldIngredients.$element );

		//---------------------------------------------------------------------------
		//	Mise en oeuvre sur le poste client des actions à lancer
		//	pour la présentation de la fiche d'édition de la nouvelle recette
		//	avec préchargement selon Modèle:Recette
		//---------------------------------------------------------------------------

		feuVertTitre = false;
		feuVertCategorie = false;
		// A priori le tableau des ingredients est demandé par défaut
		// (voir ci-dessus le paramètre selected de avecIngredients)
		mettreTableau = "in-line";

		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);	
		  });

		avecIngredients.on( 'change', function () {
				if(avecIngredients.isSelected()){
					mettreTableau = "inline-block";
					//alert("selected") ;
					}
				else {
					//alert("non selected");
					mettreTableau = "none";
					}
			});
		
		buttonCreerRecette.on( 'click', function () {
			//alert("FV categ "+feuVertCategorie);
			//alert("feuVertTitre "+feuVertTitre);
			
			if(feuVertTitre && feuVertCategorie) {

				suiteDuLien = "action=edit&section=new&preload=Modèle:Recette";
				suiteDuLien = suiteDuLien + "&preloadtitle=Introduction";
				suiteDuLien = suiteDuLien + "&preloadparams[]=" + categorieChoisie;
				suiteDuLien = suiteDuLien + "&preloadparams[]=" + mettreTableau;
				
				// 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 + titreProposed + "&";
					lienAppelCreation = lienAppelCreation + encodeURI(suiteDuLien);
					
				}else{
					//alert('On est en local');
					lienAppelCreation = '/index.php/';
					lienAppelCreation = lienAppelCreation + titreProposed + "?";
					lienAppelCreation = lienAppelCreation + encodeURI(suiteDuLien);
				}

			// 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							*/
/*																				*/
/* 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();


	});