cInput.ftl

 1   <#-- Macro: cInput
 2   
 3   Description: permet de définir un champs de formulaire.
 4   
 5   Parameters:
 6   
 7   @param - id - string - optional - l'ID du champs de formulaire
 8   @param - class - string - optional - ajoute une classe CSS au champs de formulaire (par défaut: 'form-control')
 9   @param - name - string - required - permet de définir la valeur de l'attribut 'name' du champs du formulaire
 10   @param - type - string - optional - permet de définir la valeur de l'attribut 'type' du champs du formulaire
 11   @param - size - string - optional - permet d'ajouter un suffixe à la classe CSS 'form-control', valeur possible 'lg' ou 'sm'
 12   @param - value - string - optional - permet de définir la valeur par défaut du champs du formulaire
 13   @param - placeholder - string - optional - permet de définir la valeur de l'attribut 'placeholder' du champs du formulaire
 14   @param - phoneCountry - string - optional - En complément de l'attribut type à la valeur 'tel', permet de formatter le numéro de téléphone entré au format du pays. Actuellement, seul le format français est pris en charge (+33 X XX XX XX XX). (par défaut: 'FR')
 15   @param - required - boolean - optional - permet d'indiquer si le champs est obligatoire (par défaut: false)
 16   @param - html5Required - boolean - optional - permet d'indiquer si le champs doit utliser l'attribut html5 required (par défaut: true)
 17   @param - disabled - boolean - optional - permet d'indiquer si le champs est desactivé (par défaut: false)
 18   @param - readonly - boolean - optional - permet d'indiquer si le champs est lecture seule (par défaut: false)
 19   @param - pattern - string - optional - permet de saisir une expression réguliére pour contrôler le champs
 20   @param - accept - string - optional - permet de définir l'attribut 'accept' pour les types de fichiers du champs
 21   @param - autocomplete- string - Default '' , autocomplete pour l'input https://developer.mozilla.org/fr/docs/Web/HTML/Attributes/autocomplete 
 22   @param - title - string - optional - permet de définir l'attribut 'title' du champs
 23   @param - maxlength - number - optional - permet de saisir une limitation de taille de valeur saisie (par défaut: 0)
 24   @param - min - number - optional - permet de saisir une valeur minimale pour les champs de type number (par défaut: 0)
 25   @param - max - number - optional - permet de saisir une valeur maximale pour les champs de type number (par défaut: 0)
 26   @param - title - string - optional - permet de définir l'attribut 'list' du champs
 27   @param - datalistId - string - optional - permet de définir l'attribut 'list' du champs
 28   @param - datalist - string - optional - permet de définir la balise 'datalist' du champs
 29   @param - helpMsg - string - optional - permet de définir le message d'aide du champs
 30   @param - errorMsg - string - optional - permet de définir le message d'erreur du champs
 31   @param - params - string - optional - permet d'ajouter des parametres HTML au champs de formulaire
 32   -->
 33   <#macro cInput name class='form-control' id='' type='text' size='' value='' placeholder='' phoneCountry='FR' required=false html5Required=true disabled=false readonly=false pattern='' autocomplete='' accept='' title='' maxlength=0 min=0 max=0 datalistId='' datalist='' helpMsg='' errorMsg='' params='' deprecated...>
 34   <@deprecatedWarning args=deprecated />
 35   <#local hasError = (errorMsg != '')>
 36   <#assign idMsg><#if id!=''>${id}<#else>${name!}</#if></#assign>
 37   <#if helpMsg !=''><@cFormHelp idMsg helpMsg /></#if>
 38   <input type="${type!}" class="<#if class!=''> ${class!}</#if><#if size!=''> form-control-${size!}</#if><#if errorMsg!=''> is-invalid</#if><#if type == 'tel' && phoneCountry == 'FR'> fr-number</#if>" name="${name!}" id="<#if id!=''>${id}<#else>${name!}</#if>" value="${value!}"<#if placeholder!=''> placeholder="${placeholder!}" aria-label="${placeholder!}"</#if><#if autocomplete!=''> autocomplete="${autocomplete!}"</#if><#if title!=''> title="${title}"</#if><#if maxlength &gt; 0> maxlength="${maxlength}"</#if><#if disabled> disabled</#if><#if readonly> readonly</#if><#if params!=''> ${params}</#if><#if pattern!=''> pattern="${pattern}"</#if><#if accept !=''> accept="${accept}"</#if><#if min!=0> min="${min}"</#if><#if max!=0> max="${max}"</#if><#if required><#if html5Required> required</#if> aria-required="true"</#if><#if datalistId!=''> list="${datalistId!}"</#if><#if hasError> aria-invalid="true" aria-describedby="error_${idMsg!}"<#elseif helpMsg!=''> aria-describedby="help_${idMsg!}"</#if>>
 39   <#if errorMsg !='' && errorMsg !='_error'><@cFormError idMsg errorMsg /></#if>
 40   <#nested>
 41   <#if datalistId !=''>
 42   <datalist id="${datalistId}">
 43   <#if datalist !=''><#list datalist as dl><option value="${dl.id}">${dl.label}</option></#list></#if>
 44   </datalist>
 45   </#if>
 46   <#if type == 'tel' && phoneCountry == 'FR'>
 47   <script>
 48   document.addEventListener('DOMContentLoaded', function() {
 49     document.querySelectorAll('.fr-number').forEach(function(element) {
 50       element.addEventListener('blur', function() {
 51         var num = element.value;
 52         var numFormatte = num
 53           .replace(/^0(\d)(\s?)(\d{2})(\s?)(\d{2})(\s?)(\d{2})(\s?)(\d{2})$/, '+33 $1 $3 $5 $7 $9')
 54           .replace(/^\+33(\d{9})$/, function(match, p1) {
 55             return '+33 ' + p1.replace(/(\d)(\d{2})(\d{2})(\d{2})(\d{2})/, '$1 $2 $3 $4 $5');
 56           });
 57         element.value = numFormatte;
 58       });
 59     });
 60   });
 61   </script>
 62   </#if>
 63   </#macro>