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 > 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>