MediaWiki:Catpat.js
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§ion=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(); });