1 2$(document).ready(function() { 3 4 /* Détecter s'il y a un formulaire powermail et obtenir son ID */ 5 var targetNode = ""; 6 if($("form.powermail_form").length){ 7 var idForm = $("form.powermail_form").first().attr("id"); 8 targetNode = document.getElementById(idForm); 9 } 10 11 /* Détecter un ajout HTML dans le formulaire de bas de page et ajouter l'alerte sur la première erreur */ 12 if(targetNode!=""){ 13 var config = { attributes: true, childList: true, subtree: true, characterData: true }; 14 var callback = function(mutationsList, observer) { 15 mutationsList.forEach(function(mutation) { 16 //for(var mutation of mutationsList) { 17 // Ãléments enfants du formulaire de bas de page 18 if (mutation.type == 'childList') { 19 // Faire le tour des éléments ajoutés simultanément. 20 // Vérifier si c'est un ajout sur un input différent du submit et de ne pas l'ajouter une seconde fois sur le même champ ou dans le formulaire. 21 for (var i = 0; i < mutation.addedNodes.length; i++) { 22 if(mutation.target.id != "" && mutation.target.id != undefined){ 23 if($('#'+mutation.target.id+' input[type="submit"]').length == 0){ 24 if($('#'+mutation.target.id+'li:not([role])') && $('.powermail_form ul li[role="alert"]').length == 0 ){ 25 $("#"+mutation.target.id+" li").attr("role", "alert"); 26 } 27 $("#"+mutation.target.id+" li").first().attr("id", mutation.target.id+"_li"); 28 } 29 } 30 } 31 // Faire le tour des éléments supprimés simultanément. 32 // Si l'erreur a été corrigée, enlever l'alerte et la transposer sur une autre erreur 33 for (var i = 0; i < mutation.removedNodes.length; i++) { 34 if(mutation.target.id != "" && mutation.target.id != undefined){ 35 if($('#'+mutation.target.id+' input[type="submit"]').length == 0){ 36 $("#"+mutation.target.id).removeAttr("role"); 37 // Une fois supprimée, l'alerte est ajoutée à une autre erreur, s'il en reste. 38 if($('.powermail_form ul[class^="parsley-errors"]').length >0){ 39 if($('.powermail_form ul[class^="parsley-errors"]:first li').attr("id")==mutation.target.id){ 40 $('.powermail_form ul[class^="parsley-errors"]:nth-child(2) li').attr("role", "alert"); 41 }else{ 42 $('.powermail_form ul[class^="parsley-errors"]:first li').attr("role", "alert"); 43 } 44 } 45 } 46 } 47 } 48 } 49 }); 50 }; 51 52 // Créer l'objeet MutationObserver pour écouter les changements (ajouts/suppressions) dans le DOM. 53 var observer = new MutationObserver(callback); 54 observer.observe(targetNode, config); 55 } 56}); 57 58 59/* Parsley : librairie JS pour valider les champs d'un formulaire 60 Ãvénement sur le succès d'un seul champ (à l'envoi ou lorsqu'on corrige) 61 Effacer les aria-describedby au moment qu'il y a un "success" 62*/ 63window.Parsley && window.Parsley.on('field:success', function() { 64 var idField = this.$element[0].id; 65 var errorId; 66 var radioBtnCheckBox=0; 67 var valeurAttribut; 68 var arrayAriaDescribedby; 69 70 if($("#"+idField).attr("id").length > 0){ 71 $("#"+idField).removeAttr("aria-invalid"); 72 73 errorId = getErrorId(idField); 74 radioBtnCheckBox = getBtnRadioCheckBox(idField); 75 76 // Supprimer les waiarias pour chaque choix d'un groupe de boutons radio [checkbox???] 77 if(radioBtnCheckBox >0){ 78 radioExistant = true; 79 nomIdBase = idField.substring(0,idField.length-1); 80 for(i=1; radioExistant==true; i++){ 81 if($('#'+nomIdBase+i).length){ 82 boolAttrExiste = attributeExiste(nomIdBase+i, "aria-describedby"); 83 if(boolAttrExiste==true){ 84 $("#"+ nomIdBase+i).removeAttr("aria-describedby"); 85 }; 86 }else{ 87 radioExistant=false; 88 }; 89 }; 90 }else{ 91 // Supprimer les waiarias du input. S'il y a plus d'une valeur dans le aria-describedby, on conserve ceux qui ne sont pas liés à l'erreur. 92 boolAttrExiste = attributeExiste(idField, "aria-describedby"); 93 if(boolAttrExiste==true){ 94 valeurAttribut = $("#"+idField).attr('aria-describedby'); 95 if(valeurAttribut != undefined && valeurAttribut != errorId){ 96 arrayAriaDescribedby = valeurAttribut.split(" "); 97 nouvelleValeur="";
98 $.each(arrayAriaDescribedby, function(index, value){ 99 if(value != errorId+"_li"){ 100 nouvelleValeur = nouvelleValeur!="" ? nouvelleValeur+" "+value : value; 101 } 102 }); 103 $("#"+idField).attr("aria-describedby",nouvelleValeur); 104 }else{ 105 $("#"+idField).removeAttr("aria-describedby"); 106 } 107 }; 108 }; 109 }; 110 // Enlever le ul vide lorsqu'il n'y a plus d'erreur 111 if(errorId != undefined){ 112 $( "#"+errorId ).remove(); 113 } 114}); 115 116 117/* Parsley : librairie JS pour valider les champs d'un formulaire 118 Ãvénement sur le l'échec d'un seul champ (à l'envoi ou lorsqu'on modifie suite à un premier envoi) 119 Ajouter en texte caché le mot erreur à tous les messages d'erreurs et ajouter du aria-describedby aux champs en erreur 120*/ 121 122window.Parsley && window.Parsley.on('field:error', function() { 123 var idField = this.$element[0].id; 124 var errorContainer = $("#"+idField).attr("data-parsley-errors-container"); 125 var idParsley = $("#"+idField).attr("data-parsley-id"); 126 var textLang = "Erreur"; 127 var errorId; 128 var radioBtnCheckBox=0; 129 var radioExistant=true; 130 131 if($("#loader")){ 132 $("#loader").addClass("d-none"); 133 } 134 135 errorId = getErrorId(idField); 136 radioBtnCheckBox = getBtnRadioCheckBox(idField); 137 errorIdLi = errorId+"_li" 138 139 if (this.$element[0].validationResult !== true) { 140 // Ajouter les waiarias pour chaque choix d'un groupe de boutons radio/checkbox 141 if(radioBtnCheckBox >0){ 142 radioExistant = true; 143 premierRadio = $("#"+idField).attr('id'); 144 nomIdBase = premierRadio.substring(0,premierRadio.length-1); 145 for(i=1; radioExistant==true; i++){ 146 if($('#'+nomIdBase+i).length){ 147 $('#'+nomIdBase+i).attr('aria-describedby',errorIdLi); 148 }else{ 149 radioExistant=false; 150 }; 151 }; 152 // Supprimer les waiarias pour le input. S'il y a plus d'une valeur dans le aria-describedby, on conserve ceux qui ne sont pas liés à l'erreur. 153 }else{ 154 if($("#"+idField).attr('aria-describedby') != undefined && $("#"+idField).attr('aria-describedby') != errorIdLi){ 155 ancienneValeur = $("#"+idField).attr('aria-describedby')+" "+errorIdLi; 156 if($("#"+idField).attr('aria-describedby').indexOf(errorIdLi) == -1){ 157 $("#"+idField).attr('aria-describedby', ancienneValeur); 158 } 159 }else{ 160 $("#"+idField).attr('aria-describedby',errorIdLi); 161 } 162 }; 163 }; 164 $("#"+idField).attr("aria-invalid","true"); 165 166 // Ajouter le texte caché Erreur/Error pour l'accessibilité 167 if(document.documentElement.lang=="en"){ 168 textLang = "Error"; 169 } 170 if(errorContainer != undefined){ 171 $(errorContainer+" ul li").prepend("<span class='visuallyHidden'>"+textLang+"</span> "); 172 }else{ 173 $("#parsley-id-"+idParsley+" li").prepend("<span class='visuallyHidden'>"+textLang+"</span> "); 174 } 175}); 176 177 178// validation JS du poids de tous les fichiers pour un attribut multiple 179if($("input[multiple='multiple'][type='file']").length){ 180 181 $("input[multiple='multiple'][type='file']").each(function( index ) { 182 valeurFileMax = $( this ).attr("data-powermail-powermailfilesize"); 183 $( this ).attr("data-parsley-multiplefilesize",valeurFileMax); 184 185 /* Si la variable a été ajouté à la page par un tt_content TS */ 186 if (typeof multiFichierMessage !== 'undefined') { 187 valeurFileMaxErreur = multiFichierMessage; 188 }else{ 189 valeurFileMaxErreur = $( this ).attr("data-powermail-powermailfilesize-message"); 190 } 191 $( this ).attr("data-parsley-multiplefilesize-message",valeurFileMaxErreur); 192 }); 193 194 var getMaxFileSizeMultiple = function($field, maxUploadSize) { 195 var field = $field.get(0); 196 var totalSize =0; 197 for (var i = 0; i < field.files.length; i++) { 198 var file = field.files[i]; 199 if(file.size > maxUploadSize){ 200 // Si un seul fichier est plus lourd que le maximum, c'est l'autre listener qui affichera le même message d'erreur 201 return 0; 202 }else{ 203 totalSize = totalSize + file.size; 204 } 205 206 } 207 return parseInt(totalSize); 208 } 209 window.Parsley && window.Parsley 210 .addValidator('multiplefilesize', function(value, requirement) { 211 if (requirement.indexOf(',') !== -1) { 212 var requirements = requirement.split(','); 213 var maxUploadSize = parseInt(requirements[0]); 214 var $this = $('*[name="tx_powermail_pi1[field][' + requirements[1] + '][]"]'); 215 if ($this.length) { 216 if (getMaxFileSizeMultiple($this,maxUploadSize) > maxUploadSize) { 217 return false;
218 } 219 } 220 } 221 222 // pass test if problems 223 return true; 224 }, 32) 225 .addMessage('en', 'multiplefilesize', 'Error'); 226} 227 228/** 229 * Corriger un bug IOS : 230 * Ã l'envoi d'un formulaire powermail, pas de focus sur les champs en erreur et pas de scroll vers le champ 231 **/ 232window.Parsley && window.Parsley.on('form:validate', function (form) { 233 if (!form.isValid()) { 234 for (var n = 0; n < form.fields.length; n++) { 235 if (form.fields[n].validationResult !== true) { 236 if (window.navigator.userAgent.match(/iphone|ipad|Mac|iPod/i)) { 237 window.setTimeout(function () { 238 $("html,body").animate({ 239 scrollTop: $(form.fields[n].$element[0]).offset().top - 300 240 }); 241 }, 0); 242 } 243 break; 244 } 245 } 246 } 247}); 248
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.