Subversion Repositories eFlore/Applications.cel

Rev

Rev 3168 | Rev 3173 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3168 Rev 3171
Line 1... Line 1...
1
"use strict";
1
"use strict";
Line 2... Line 2...
2
 
2
 
3
// déclaration du tableau d'envoi des données?
3
// déclaration du tableau d'envoi des données?
-
 
4
var datasToSubmit = new Array();
Line 4... Line 5...
4
// var datasToSubmit = new Array();
5
var listvalue = new Array();
5
 
6
 
6
/***************************
7
/***************************
Line 7... Line 8...
7
 *  Lancement des scripts  *
8
 *  Lancement des scripts  *
Line -... Line 9...
-
 
9
 ***************************/
-
 
10
 
-
 
11
jQuery( document ).ready( function() {
Line 8... Line -...
8
 ***************************/
-
 
9
 
-
 
10
jQuery( document ).ready( function() {
12
 
11
 
13
  // Identifiant de champ
Line 12... Line 14...
12
 
14
  var fieldIndex = 0;
13
  // Initialisation d'un identifiant de champ
15
 
Line 14... Line 16...
14
  var fieldId = 0;
16
 
Line 23... Line 25...
23
/***********************************************************
25
/***********************************************************
24
 *  Fonctions pour la création des champs supplémentaires  *
26
 *  Fonctions pour la création des champs supplémentaires  *
25
 ***********************************************************/
27
 ***********************************************************/
Line 26... Line 28...
26
 
28
 
27
// Logique globale pour l'ajout de nouveaux champs
29
// Logique globale pour l'ajout de nouveaux champs
-
 
30
function onClickAddNewFields( fieldIndex ) {
-
 
31
 
-
 
32
  // Drapeaux d'activation du bouton valider
-
 
33
  var nameFlag = false,
Line 28... Line 34...
28
function onClickAddNewFields( fieldId ) {
34
      keyFlag = false;
Line 29... Line -...
29
 
-
 
30
  $( '#add-fields' ).click( function() {
-
 
31
 
-
 
32
    // TODO : La création du tableau ci-dessous est à revoir mais les données sont les bonnes
-
 
33
    // datasToSubmit[fieldId] = {
-
 
34
    //   key:'',
35
 
35
    //   name:'',
-
 
36
    //   element:'',
36
  $( '#add-fields' ).click( function() {
37
    //   // un objet contenant les renseignements en fonction de l'élément
-
 
38
    //   // + contiendrait aussi un tableau des différentes valeus dans le cas où l'élément est une liste :
-
 
39
    //   value:'',
37
 
40
    //   description:'',
-
 
Line 41... Line 38...
41
    //   unit:'',
38
    // Réactiver le bouton valider les champs supplémentaires :
42
    //   help:''
39
    nameFlag = false;
Line 43... Line 40...
43
    // };
40
    keyFlag = false;
44
 
41
 
Line 45... Line 42...
45
    // Ajout d'un nouveau champ
42
    // Ajout d'un nouveau champ
46
    displayNewField( fieldId );
43
    displayNewField( fieldIndex );
Line 47... Line 44...
47
 
44
 
Line -... Line 45...
-
 
45
    // Désactivation du bouton valider
-
 
46
    onflagEnableValidateNewFieldsButton( keyFlag , nameFlag );
-
 
47
 
48
    // Nom du champ affichage titre du champ
48
    // Test lorsque le nom du nouveau champ est renseigné
-
 
49
    $('.new-field .field-name').change( function() {
-
 
50
 
-
 
51
      nameFlag = true;
-
 
52
 
-
 
53
      // Vérification de name pour tous les nouveaux champs
-
 
54
      nameFlag = filledFieldFlag( $('.new-field .field-name') , nameFlag );
-
 
55
 
49
    onChangeDisplayFieldLabel( fieldId );
56
      // Activation du bouton valider
-
 
57
      onflagEnableValidateNewFieldsButton( keyFlag , nameFlag );
-
 
58
 
-
 
59
    });
-
 
60
 
-
 
61
    // Test lorsque la clé du nouveau champ est renseignée
-
 
62
    $('.new-field .field-key').change( function() {
-
 
63
 
-
 
64
      keyFlag = true;
-
 
65
 
-
 
66
      // Vérification de key pour tous les nouveaux champs
-
 
67
      keyFlag = filledFieldFlag( $('.new-field .field-key') , keyFlag );
Line 50... Line 68...
50
 
68
 
51
    // En fonction du type de champ choisi on demande les informations correspondantes
69
      // Activation du bouton valider
52
    onChangeFieldTypeCollectDetails( fieldId );
70
      onflagEnableValidateNewFieldsButton( keyFlag , nameFlag );
Line -... Line 71...
-
 
71
 
-
 
72
    });
-
 
73
 
-
 
74
    // Nom du champ affichage titre du champ
-
 
75
    onChangeDisplayFieldLabel( fieldIndex );
-
 
76
 
53
 
77
    // Les images ou les nom des documents importés doivent aussi
54
    // TODO : recueillir les données et renseigner le tableau de'envoi
78
    // s'afficher dans les champs ajoutés
55
 
79
    inputFile( fieldIndex );
Line 56... Line 80...
56
    // Suppression d'un champ
80
 
57
    onClickRemoveField();
81
    // En fonction du type de champ choisi on demande les informations correspondantes
58
 
82
    onChangeFieldTypeCollectDetails( fieldIndex );
Line 59... Line 83...
59
    // Les images ou les nom des documents importés doivent aussi
83
 
60
    // s'afficher dans les champs ajoutés
84
    // Suppression d'un champ
61
    inputFile();
85
    onClickRemoveField();
62
 
86
 
Line 63... Line 87...
63
    fieldId++;
87
    fieldIndex++;
64
  });
88
  });
65
}
89
}
Line 86... Line 110...
86
      '<input type="text" name="field-key" class="field-key" placeholder="Clé du champ" required title="Clé du champ (son nom dans la base de données)">'+
110
      '<input type="text" name="field-key" class="field-key" placeholder="Clé du champ" required title="Clé du champ (son nom dans la base de données)">'+
Line 87... Line 111...
87
 
111
 
88
      // Type de champ
112
      // Type de champ
89
      '<label for="field-element" title="Quel type de champ">Type de champ</label>'+
113
      '<label for="field-element" title="Quel type de champ">Type de champ</label>'+
90
      '<div class="select-wrapper add-field-select">'+
114
      '<div class="select-wrapper add-field-select">'+
91
        '<select name="field-element" class="field-element" required>'+
115
        '<select name="field-element" class="field-element">'+
92
          '<option value="text" selected="selected">Champ texte</option>'+
116
          '<option value="text" selected="selected">Champ texte</option>'+
93
          '<option value="email">Champ email</option>'+
117
          '<option value="email">Champ email</option>'+
94
          '<option value="textarea">Champ rédaction</option>'+
118
          '<option value="textarea">Champ rédaction</option>'+
95
          '<option value="select">Menu déroulant</option>'+
119
          '<option value="select">Menu déroulant</option>'+
Line 115... Line 139...
115
      '<label for="field-description" title="Ajoutez une info-bulle">Info-bulle</label>'+
139
      '<label for="field-description" title="Ajoutez une info-bulle">Info-bulle</label>'+
116
      '<input type="text" name="field-description" class="field-description" placeholder="Quelques mots">'+
140
      '<input type="text" name="field-description" class="field-description" placeholder="Quelques mots">'+
Line 117... Line 141...
117
 
141
 
118
      // Import d'une image ou d'un pdf d'aide à afficher en popup
142
      // Import d'une image ou d'un pdf d'aide à afficher en popup
119
      '<div class="input-file-container">'+
143
      '<div class="input-file-container">'+
120
        '<input type="file" class="input-file field-help" name="field-help" accept="application/pdf, image/*, video/*">'+
144
        '<input type="file" class="input-file field-help" name="field-help" id="help-doc-' + fieldIndex + '" accept="application/pdf, image/*, video/*">'+
121
        '<label for="field-help" class="label-file"><i class="fas fa-download"></i>Image ou pdf d\'aide (popup)</label>'+
145
        '<label for="field-help" class="label-file"><i class="fas fa-download"></i>Image ou pdf d\'aide (popup)</label>'+
122
      '</div>'+
146
      '</div>'+
Line 123... Line 147...
123
      '<div class="file-return help"></div>'+
147
      '<div class="file-return help-doc-' + fieldIndex + '"></div>'+
124
 
148
 
Line 125... Line 149...
125
      '<label for="remove-field">Supprimer ce champ</label>'+
149
      '<label for="remove-field">Supprimer ce champ</label>'+
Line 126... Line 150...
126
      '<div class="remove-field button" name="remove-field" data-id="' + fieldId + '" title="Supprimer un champ"><i class="fa fa-times" aria-hidden="true"></i></div>'+
150
      '<div class="remove-field button" name="remove-field" data-id="' + fieldIndex + '" title="Supprimer un champ"><i class="fa fa-times" aria-hidden="true"></i></div>'+
127
 
151
 
Line 128... Line 152...
128
      '</div>'+
152
      '</div>'+
129
 
153
 
130
    '</div>'
154
    '</div>'
Line 131... Line 155...
131
  );
155
  );
132
 
156
 
133
  // Animation de l'affichage
-
 
134
  $( '.new-field[data-id="' + fieldId + '"]').hide().removeClass( 'hidden' ).show( 200 );
-
 
Line 135... Line 157...
135
}
157
  // Animation de l'affichage
136
 
-
 
137
// Affichage du nom du champ dès qu'il est renseigné
158
  $( '.new-field[data-id="' + fieldIndex + '"]').hide().removeClass( 'hidden' ).show( 200 );
138
function onChangeDisplayFieldLabel( fieldId ) {
159
}
139
 
160
 
Line 140... Line 161...
140
  $('.new-field[data-id="' + fieldId + '"] .field-name').change( function() {
161
// Affichage du nom du champ dès qu'il est renseigné
141
 
162
function onChangeDisplayFieldLabel( fieldIndex ) {
Line 142... Line 163...
142
    $( '.new-field[data-id="' + fieldId + '"] .field-title' ).text( $( this ).val() );
163
 
Line -... Line 164...
-
 
164
  $('.new-field[data-id="' + fieldIndex + '"] .field-name').change( function() {
-
 
165
    $( '.new-field[data-id="' + fieldIndex + '"] .field-title' ).text( $( this ).val() );
-
 
166
  });
143
 
167
}
Line -... Line 168...
-
 
168
 
-
 
169
// Supprimer tout un champ
-
 
170
function onClickRemoveField (keyFlag , nameFlag) {
144
    // TODO : Renseigner le nom du champs dans le tableau à envoyer
171
 
-
 
172
  $( '.remove-field.button' ).click( function() {
-
 
173
 
-
 
174
    keyFlag = true ,
-
 
175
    nameFlag = true ;
-
 
176
 
-
 
177
    $( '.new-field[data-id="' + $( this ).attr( 'data-id' ) + '"]' ).remove();
-
 
178
 
-
 
179
    // Vérification de name pour tous les nouveaux champs
-
 
180
    nameFlag = filledFieldFlag( $('.new-field .field-name') , nameFlag );
-
 
181
 
-
 
182
    // Vérification de name pour tous les nouveaux champs
-
 
183
    keyFlag = filledFieldFlag( $('.new-field .field-key') , keyFlag );
-
 
184
 
-
 
185
    // Activation du bouton valider
-
 
186
    onflagEnableValidateNewFieldsButton( keyFlag , nameFlag );
-
 
187
  });
-
 
188
}
-
 
189
 
-
 
190
// Vérification de key ou name pour tous les nouveaux champs
145
  });
191
function filledFieldFlag( $field , flag) {
-
 
192
 
-
 
193
  if( $field.length === 0 ) {
-
 
194
    return flag = false;
-
 
195
  }
-
 
196
 
-
 
197
  // Vérification de name pour tous les nouveaux champs
-
 
198
  $field.each( function() {
-
 
199
    if( $( this ).val() === ''  ) {
-
 
200
      flag = false;
-
 
201
    }
-
 
202
  });
-
 
203
  return flag;
-
 
204
}
146
}
205
 
Line 147... Line 206...
147
 
206
// Activation du bouton valider les champs supplémentaires
Line 148... Line 207...
148
// Supprimer tout un champ
207
function onflagEnableValidateNewFieldsButton( keyFlag , nameFlag ) {
149
function onClickRemoveField() {
208
 
150
 
-
 
151
  $( '.remove-field.button' ).click( function() {
-
 
Line 152... Line 209...
152
 
209
    // Activation du bouton valider
153
    $( '.new-field[data-id="' + $( this ).attr( 'data-id' ) + '"]').fadeOut( 200 , this.remove() );
210
    if( keyFlag && keyFlag ) {
154
 
211
      onClickStoreNewFields();
155
    // TODO : supprimer un champ du tableau à envoyer
212
      $( '#validate-new-fields' ).removeClass('disabled');
156
  });
213
    } else {
157
}
214
      $( '#validate-new-fields' ).off( 'click' ).addClass('disabled');
Line -... Line 215...
-
 
215
    }
158
 
216
}
Line 159... Line 217...
159
/**** Recueil des informations et détails qui dépendent du type de champ choisi ****/
217
 
160
 
218
/**** Recueil des informations et détails qui dépendent du type de champ choisi ****/
Line 161... Line 219...
161
// Logique de recueil d'informations en fonction du type de champ choisi
219
 
162
function onChangeFieldTypeCollectDetails( fieldId ) {
220
// Logique de recueil d'informations en fonction du type de champ choisi
163
 
221
function onChangeFieldTypeCollectDetails( fieldIndex ) {
164
  // var validateRegexp = '';
-
 
165
 
-
 
166
  var fieldDetails =
-
 
Line 167... Line 222...
167
    // Placeholder (champ type text par défaut)
222
 
168
    '<label for="aide-saisie" title="Aidez les utilisateurs en deux ou 3 mots ou chiffres à comprendre ce que doit contenir le champ">Texte d\'aide à la saisie</label>'+
223
  var fieldDetails =
Line -... Line 224...
-
 
224
    // Placeholder (champ type text par défaut)
-
 
225
    '<label for="aide-saisie" title="Aidez les utilisateurs en deux ou 3 mots ou chiffres à comprendre ce que doit contenir le champ">Texte d\'aide à la saisie</label>'+
-
 
226
    '<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">';
-
 
227
  // On insère les champs par défaut de recueil d'informations
169
    '<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">';
228
  displayFieldDetailsCollect( fieldIndex , fieldDetails );
170
  // On insère les champs par défaut de recueil d'informations
229
 
171
  displayFieldDetailsCollect( fieldId , fieldDetails );
-
 
172
 
230
  // Sinon :
173
  $( '.new-field[data-id="' + fieldId + '"] .field-element' ).change( function() {
231
  $( '.new-field[data-id="' + fieldIndex + '"] .field-element' ).change( function() {
174
 
232
 
175
    // on intialise L'id pour les listes la variable qui contiendra un id pour chaque option
233
    // On intialise l'index pour les listes la variable qui contiendra un id pour chaque option
Line 176... Line 234...
176
    var valueId = 1;
234
    var valueIndex = 0;
177
 
235
 
178
    // Si on hésite on qu'on se trompe dans la liste :
236
    // Si on hésite on qu'on se trompe dans la liste :
Line 179... Line 237...
179
    // les champs de détails de l'option précédente doivent être supprimés
237
    // les champs de détails de l'option précédente doivent être supprimés
180
    $( '.new-field[data-id="' + fieldId + '"] .field-details' ).remove();
238
    $( '.new-field[data-id="' + fieldIndex + '"] .field-details' ).remove();
181
 
239
 
Line 182... Line 240...
182
    // Remise à 0 des infos à soumettre dans l'input type hiddes .field-value-submit
240
    // $( this ).val() = le type de champ choisi dans select ".field-element"
183
    $( '.field-value-submit[data-id="' + fieldId + '"]' ).val('');
241
    switch( $( this ).val() ) {
184
 
242
 
Line 185... Line 243...
185
    // $( this ).val() = le type de champ choisi dans select ".field-element"
243
      case 'file':
186
    switch( $( this ).val() ) {
244
        fieldDetails = '';
187
 
245
        break;
188
      case 'number':
246
 
-
 
247
      case 'number':
189
      case 'range':
248
      case 'range':
Line 190... Line 249...
190
        // validateRegexp = '^\d+([\.|,]\d+)?$';
249
        fieldDetails =
191
        fieldDetails =
-
 
192
          // Placeholder
250
          // Placeholder
193
          '<label for="aide-saisie" title="Deux ou 3 mots ou chiffres pour comprendre ce que doit contenir le champ (ex: min 20, 10 par 10, etc.)">Texte d\'aide à la saisie</label>'+
-
 
194
          '<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">'+
-
 
195
 
251
          '<label for="aide-saisie" title="Deux ou 3 mots ou chiffres pour comprendre ce que doit contenir le champ (ex: min 20, 10 par 10, etc.)">Texte d\'aide à la saisie</label>'+
196
          // Valeur par défaut
252
          '<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">'+
197
          '<label for="default" title="Valeur par défaut">Valeur par défaut</label>'+
253
 
198
          '<input type="number" name="default" class="default" step="0.01" value="0">'+
254
          // Valeur par défaut
Line 199... Line 255...
199
 
255
          '<label for="default" title="Valeur par défaut">Valeur par défaut</label>'+
200
          // Incrémentation ( attribut step="" )
256
          '<input type="number" name="default" class="default" step="0.01">'+
201
          '<label for="step" title="De 10 en 10, de 0.5 en 0.5, etc.">Le "pas" d\'incrémentation (step).<br>Pour l\'utilisateur, par defaut step = 1</label>'+
257
 
-
 
258
          // Incrémentation ( attribut step="" )
202
          '<input type="number" name="step" class="step" step="0.01" value="1">'+
259
          '<label for="step" title="De 10 en 10, de 0.5 en 0.5, etc.">Le "pas" d\'incrémentation (step).<br>Pour l\'utilisateur, par defaut step = 1</label>'+
Line 203... Line 260...
203
 
260
          '<input type="number" name="step" class="step" step="0.01">'+
204
          // Min
261
 
205
          '<label for="min" title="valeur min">Valeur minimale</label>'+
262
          // Min
206
          '<input type="number" name="min" class="min" step="0.01" value="0">'+
263
          '<label for="min" title="valeur min">Valeur minimale</label>'+
207
 
-
 
-
 
264
          '<input type="number" name="min" class="min" step="0.01">'+
208
          // Max
265
 
209
          '<label for="max" title="valeur max">Valeur maximale</label>'+
266
          // Max
Line 210... Line 267...
210
          '<input type="number" name="max" class="max" step="0.01" value="1">'+
267
          '<label for="max" title="valeur max">Valeur maximale</label>'+
211
          '<p class="message"><i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i> Ne pas oublier de changer la valeur max, fixée à 1 par defaut</p>';
268
          '<input type="number" name="max" class="max" step="0.01">'+
212
        break;
269
          '<p class="message"><i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i> Ne pas oublier de changer la valeur max, fixée à 1 par defaut</p>';
Line 213... Line 270...
213
 
270
 
214
      case 'date':
271
        break;
215
        // regex : fevrier à terminer (années non bisextiles inachevé)
272
 
216
        // validateRegexp = '^(?:(?:(?:(?:[0-2][1-9]|[1-3]0|31)\/(?:0[13578]|10|12))|(?:(?:[0-2][1-9]|[1-3]0)\/(?:0[469]|11)))\/(?:[12][0-9]{3}))|(?:(?:[0-2][1-9]|[12]0)\/02\/(?:(?:[12][26]00)|(?:2000)|(?:[12][0-9]0[48])|(?:[12][0-9][2468][048])|(?:[12][0-9][13579][26]))|(?:(?:[0-2][1-8]|[12]0)\/02\/(?:1000|[12][1345789]00|[12][1-9]0[1235679]|)))$'
-
 
Line 217... Line -...
217
        var today = new Date();
-
 
218
        today = today.getDate() + '/' + ( today.getMonth() + 1 ) + '/' + today.getFullYear();
-
 
219
        fieldDetails =
273
      case 'date':
Line -... Line 274...
-
 
274
 
220
          // Date min
275
        fieldDetails =
221
          '<label for="min" title="valeur min">Valeur minimale</label>'+
276
          // Date min
222
          '<input type="date" name="min" class="min" value="' + today +'">'+
277
          '<label for="min" title="valeur min">Valeur minimale</label>'+
223
 
278
          '<input type="date" name="min" class="min">'+
-
 
279
 
224
          // Date max
280
          // Date max
225
          '<label for="max" title="valeur max">Valeur maximale</label>'+
281
          '<label for="max" title="valeur max">Valeur maximale</label>'+
226
          '<input type="date" name="max" class="max" value="31/12/2999">';
282
          '<input type="date" name="max" class="max">';
227
        break;
283
 
-
 
284
        break;
228
 
285
 
229
      case 'select':
286
      case 'select':
Line 230... Line -...
230
      case 'checkbox':
-
 
231
      case 'list-checkbox':
-
 
232
      case 'radio':
-
 
233
        // validateRegexp = '';
287
      case 'checkbox':
234
        fieldDetails =
288
      case 'list-checkbox':
235
          '<p class="message">Ajoutez les valeurs de \"' + $( this ).children( 'option:selected' ).text() + '\"</p>'+
289
      case 'radio':
236
 
290
 
Line 237... Line 291...
237
          // Bouton ajout d'une valeur à la liste
291
        fieldDetails =
238
          '<label for="add-value" class="add-value" title="Ajouter une valeur à la liste">Ajouter une valeur</label>'+
292
          '<p class="message">Ajoutez les valeurs de \"' + $( this ).children( 'option:selected' ).text() + '\"</p>'+
239
          '<div class="button add-value-button" name="add-value" title="Ajouter une valeur à la liste"><i class="fa fa-plus" aria-hidden="true"></i></div>'+
293
 
240
 
-
 
241
          // checkbox ajouter une valeur "Autre:"
-
 
242
          '<label for="option-other-value" title="Ajouter une option \'Autre:\' à la fin">Valeur "Autre"</label>'+
-
 
243
          '<input type="checkbox" class="option-other-value" name="option-other-value" title="Ajouter une option \'Autre\' à la fin">';
-
 
244
        break;
-
 
Line 245... Line 294...
245
 
294
          // Bouton ajout d'une valeur à la liste
246
      case 'file':
295
          '<label for="add-value" class="add-value" title="Ajouter une valeur à la liste">Ajouter une valeur</label>'+
Line 247... Line 296...
247
        fieldDetails = '';
296
          '<div class="button add-value-button" name="add-value" title="Ajouter une valeur à la liste"><i class="fa fa-plus" aria-hidden="true"></i></div>'+
248
        break;
297
 
249
 
-
 
250
      case 'email':
298
          // checkbox ajouter une valeur "Autre:"
251
      case 'text':
299
          '<label for="option-other-value" title="Ajouter une option \'Autre:\' à la fin">Valeur "Autre"</label>'+
Line 252... Line 300...
252
      case 'textarea':
300
          '<input type="checkbox" class="option-other-value" name="option-other-value" title="Ajouter une option \'Autre\' à la fin">';
Line 253... Line 301...
253
      default:
301
 
254
        fieldDetails =
302
        break;
Line 255... Line 303...
255
        // Placeholder
303
 
Line 256... Line 304...
256
        '<label for="aide-saisie" title="Aidez les utilisateurs en deux ou 3 mots ou chiffres à comprendre ce que doit contenir le champ">Texte d\'aide à la saisie</label>'+
304
 
257
        '<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">';
305
      case 'email':
Line 258... Line 306...
258
        break;
306
      case 'text':
259
    }
307
      case 'textarea':
260
 
308
      default:
Line 261... Line 309...
261
    // Changement du type d'élément à envoyer
309
 
Line 262... Line 310...
262
    $( '.field-element-submit[data-id="' + fieldId + '"]' ).val( $( this ).val() );
310
        fieldDetails =
Line 263... Line 311...
263
 
311
        // Placeholder
264
    if( fieldDetails.length > 0 ) {
312
        '<label for="aide-saisie" title="Aidez les utilisateurs en deux ou 3 mots ou chiffres à comprendre ce que doit contenir le champ">Texte d\'aide à la saisie</label>'+
265
      //ne pas ajouer une div vide s'il n'y pas d'informations à demander
313
        '<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">';
266
      displayFieldDetailsCollect( fieldId , fieldDetails );
-
 
267
    }
314
 
Line 268... Line 315...
268
 
315
        break;
Line 269... Line 316...
269
    // Ajout des valeurs possibles
316
    }
270
    // lorsque le champ est une liste ou case à cocher
317
 
271
    onClickAddNewValueToList( fieldId , valueId );
318
    if( fieldDetails.length > 0 ) {
Line 272... Line 319...
272
 
319
      //ne pas ajouer une div vide s'il n'y pas d'informations à demander
Line 273... Line 320...
273
    // TODO : fonction ci-dessous est déclarée plus bas
320
      displayFieldDetailsCollect( fieldIndex , fieldDetails );
274
    // et servait à envoyer les données collectées
321
    }
275
    // mais pas faite pour un tableau
322
 
-
 
323
    // Ajout des valeurs possibles
-
 
324
    // lorsque le champ est une liste ou case à cocher
-
 
325
    onClickAddNewValueToList( fieldIndex , valueIndex );
-
 
326
 
276
    // onCollectDataValuesToSubmit( fieldId , $( this ).val() );
327
  });
277
 
328
}
278
  });
329
 
Line 279... Line 330...
279
}
330
// Insertion dans le dom des champs de recueil d'informations
280
 
331
function displayFieldDetailsCollect( fieldIndex , fieldDetails ) {
-
 
332
  $( '.new-field[data-id="' + fieldIndex + '"] .add-field-select' ).after( '<div class="field-details">' + fieldDetails + '</div>' );
-
 
333
}
-
 
334
 
-
 
335
/**** Ajout des valeurs (options) des "champs de listes" (select, checkbox, radio, etc.) ****/
Line -... Line 336...
-
 
336
 
-
 
337
// Logique d'ajout des options des listes (deroulantes, cases à cocher etc.)
-
 
338
function onClickAddNewValueToList( fieldIndex , valueIndex ) {
-
 
339
 
-
 
340
  $( '.new-field[data-id="' + fieldIndex + '"] .add-value-button' ).click( function() {
-
 
341
 
-
 
342
    $( '.new-field[data-id="' + fieldIndex + '"] .add-value' ).before(
-
 
343
      '<div class="new-value" data-list-value-id="' + valueIndex +'">'+
281
// Insertion dans le dom des champs de recueil d'informations
344
 
282
function displayFieldDetailsCollect( fieldId , fieldDetails ) {
345
        // Recueil d'une valeur de la liste
-
 
346
        '<label for="list-value">Valeur:</label>'+
-
 
347
        '<input type="text" name="list-value" class="list-value"  data-list-value-id="' + valueIndex +'" placeholder="Une des valeurs de la liste">'+
-
 
348
 
-
 
349
        '<div class="row">'+
-
 
350
 
-
 
351
          '<div class="col-md-5">'+
Line 283... Line -...
283
 
-
 
284
  $( '.new-field[data-id="' + fieldId + '"] .add-field-select' ).after( '<div class="field-details">' + fieldDetails + '</div>' );
352
 
285
}
353
            // Checkbox "valeur par défaut" de la liste
Line 286... Line 354...
286
 
354
            '<label for="is-defaut-value" title="Ceci est la valeur par défaut">Valeur par défaut</label>'+
287
/**** Ajout des valeurs (options) des "champs de listes" (select, checkbox, radio, etc.) ****/
355
            '<input type="checkbox" name="is-defaut-value" class="is-defaut-value" title="entrez une valeur pour activer cette case" data-list-value-id="' + valueIndex +'" disabled >'+
-
 
356
          '</div>'+
-
 
357
 
-
 
358
          '<div class="col-md-5">'+
-
 
359
 
-
 
360
            // Bouton "supprimer la valeur" de la liste
-
 
361
            '<label for="remove-value">Supprimer valeur</label>'+
-
 
362
            '<div class="remove-value button" name="remove-value" data-list-value-id="' + valueIndex + '" title="Supprimer une valeur"><i class="fa fa-times" aria-hidden="true"></i></div>'+
-
 
363
 
-
 
364
          '</div>'+
-
 
365
 
-
 
366
        '</div>'+
-
 
367
      '</div>'
-
 
368
    );
-
 
369
 
-
 
370
    // Activer la checkbox de valeur par default uniquement si une valeur est entrée
-
 
371
    onInputListValueLabelEnableDefaultCheckbox( fieldIndex , valueIndex );
-
 
372
 
-
 
373
    // attribuer la valeur par défaut d'un liste
-
 
374
    // et retirer l'ancienne s'il y en avait une
-
 
375
    onClickDefaultValueRemoveOthers( fieldIndex );
-
 
376
 
-
 
377
    // Pouvoir supprimer une valeur
-
 
378
    onClickRemoveListValue( fieldIndex );
-
 
379
 
-
 
380
    valueIndex++;
-
 
381
  });
-
 
382
}
-
 
383
 
-
 
384
// Activer la checkbox de valeur par default uniquement si une valeur est entrée
-
 
385
function onInputListValueLabelEnableDefaultCheckbox( fieldIndex , valueIndex ) {
-
 
386
 
-
 
387
  $( '.new-field[data-id="' + fieldIndex + '"] .new-value[data-list-value-id="' + valueIndex + '"] .list-value' ).on( 'input' , function() {
-
 
388
    $( '.new-field[data-id="' + fieldIndex + '"] .is-defaut-value[data-list-value-id="' + valueIndex + '"]' ).removeAttr( 'disabled');
-
 
389
  });
-
 
390
}
-
 
391
 
-
 
392
// Dans une liste il ne peut y avoir qu'une valeur par défaut cochée
-
 
393
function onClickDefaultValueRemoveOthers( fieldIndex ) {
-
 
394
 
-
 
395
  $( '.new-field[data-id="' + fieldIndex + '"] .is-defaut-value' ).click( function() {
-
 
396
 
-
 
397
   if( $( this ).attr( 'checked' ) ) {
-
 
398
      $( '.new-field[data-id="' + fieldIndex + '"] .is-defaut-value:checked' ).not( $( this) ).removeAttr( 'checked' );
-
 
399
    }
-
 
400
 
-
 
401
  });
-
 
402
}
-
 
403
 
-
 
404
// Logique pour le bouton supprimer une valeur
-
 
405
function onClickRemoveListValue( fieldIndex ) {
-
 
406
 
-
 
407
  $('.new-field[data-id="' + fieldIndex + '"] .remove-value.button').click( function() {
-
 
408
    $( '.new-field[data-id="' + fieldIndex + '"] .new-value[data-list-value-id="' + $( this ).attr( 'data-list-value-id' ) + '"]' ).remove();
-
 
409
  });
-
 
410
}
-
 
411
 
-
 
412
 
-
 
413
/*********************************************
-
 
414
 *  Validation et envoi des nouveaux champs  *
-
 
415
 *********************************************/
-
 
416
 
-
 
417
function onClickStoreNewFields() {
-
 
418
 
-
 
419
  $( '#validate-new-fields' ).click( function() {
-
 
420
 
-
 
421
    var resultArrayIndex = 0;
-
 
422
    var count = 0;
-
 
423
 
-
 
424
    $( '.new-field' ).each( function () {
-
 
425
      if( $(this).attr('data-id') > count) {
-
 
426
        count = $(this).attr('data-id');
-
 
427
      }
Line 288... Line 428...
288
 
428
    });
289
// Logique d'ajout des options des listes (deroulantes, cases à cocher etc.)
-
 
Line -... Line 429...
-
 
429
 
-
 
430
    for( var index = 0 ; index <= count ; index++ ) {
290
function onClickAddNewValueToList( fieldId , valueId ) {
431
 
-
 
432
      if( $( '.new-field[data-id="' + index + '"]').length > 0 ) {
-
 
433
 
-
 
434
        // initialisation du tableau de résultats
-
 
435
        datasToSubmit[ resultArrayIndex ] = { fieldValues:{} };
-
 
436
 
-
 
437
        // Ajout de la clé au tableau de resultats
291
 
438
        datasToSubmit[ resultArrayIndex ].key = $( '.new-field[data-id="' + index + '"] .field-key' ).val();
-
 
439
 
292
  $( '.new-field[data-id="' + fieldId + '"] .add-value-button' ).click( function() {
440
        // Ajout de le nom au tableau de resultats
Line -... Line 441...
-
 
441
        datasToSubmit[ resultArrayIndex ].name = $( '.new-field[data-id="' + index + '"] .field-name' ).val();
293
 
442
 
294
    $( '.new-field[data-id="' + fieldId + '"] .add-value' ).before(
443
        // Recueil de l'élément choisi pour le tableau de resultats
-
 
444
        datasToSubmit[ resultArrayIndex ].element = $( '.new-field[data-id="' + index + '"] .field-element' ).val();
-
 
445
 
-
 
446
        // Ajout de la valeur 'requis' ou non au tableau de resultats
-
 
447
        if( $( '.new-field[data-id="' + index + '"] .field-is_mandatory' ).attr( 'checked' ) ) {
-
 
448
          datasToSubmit[ resultArrayIndex ].mandatory = true;
-
 
449
        } else {
-
 
450
          datasToSubmit[ resultArrayIndex ].mandatory = false;
-
 
451
        }
-
 
452
 
-
 
453
        // Ajout de l'unité au tableau de resultats
-
 
454
        if ( $('.new-field[data-id="' + index + '"] .field-unit').val() ) {
-
 
455
          datasToSubmit[ resultArrayIndex ].unit = $('.new-field[data-id="' + index + '"] .field-unit').val();
-
 
456
        };
-
 
457
 
-
 
458
        // Ajout du tooltip au tableau de resultats
-
 
459
        if ( $('.new-field[data-id="' + index + '"] .field-description').val() ) {
-
 
460
          datasToSubmit[ resultArrayIndex ].description = $('.new-field[data-id="' + index + '"] .field-description').val();
-
 
461
        }
Line -... Line 462...
-
 
462
 
-
 
463
        // Ajout du nom du document d'aide au tableau de resultats
-
 
464
        if ( $('.file-return.help-doc-' + index ).text() ) {
-
 
465
          datasToSubmit[ resultArrayIndex ].help = $('.file-return.help-doc-' + index ).text();
-
 
466
        }
-
 
467
 
-
 
468
        // Collecte les des données dépendantes de l'élément choisi
-
 
469
        // sous forme d'un tableau de resultats
-
 
470
        onSelectCollectDataValuesToSubmit( datasToSubmit[ resultArrayIndex ] , index );
-
 
471
        if( ! datasToSubmit[ resultArrayIndex ].fieldValues.length ){
-
 
472
          delete datasToSubmit[ resultArrayIndex ].fieldValues;
-
 
473
        }
-
 
474
 
-
 
475
        resultArrayIndex++;
-
 
476
      }
-
 
477
    }
-
 
478
 
-
 
479
    var resultsArrayJson = JSON.stringify( datasToSubmit );
-
 
480
 
-
 
481
    // Plus de nouvelle validation possible
-
 
482
    $( '#validate-new-fields' ).off( 'click' ).addClass('validated');
-
 
483
    $( '#add-fields' ).off( 'click' ).addClass('disabled');
-
 
484
    $('.validate-new-fields').text('Champs validés');
-
 
485
 
-
 
486
    $('#submit-button').before(
-
 
487
      '<input type="hidden" name="champs-supp" id="champs-supp" value=\'' + resultsArrayJson + '\'>'
-
 
488
    );
-
 
489
    console.log( $('#champs-supp').val() );
-
 
490
  });
-
 
491
 
-
 
492
}
-
 
493
 
-
 
494
// Renseigne le tableau de resultat
-
 
495
// pour les données dépendant de l'élément choisi
-
 
496
function onSelectCollectDataValuesToSubmit( datasToSubmitObject , index ) {
-
 
497
 
-
 
498
    var today = new Date();
-
 
499
    var tomorrow = new Date();
-
 
500
 
-
 
501
    today = today.getDate() + 1 + '/' + ( today.getMonth() + 1 ) + '/' + today.getFullYear();
-
 
502
    tomorrow = ( tomorrow.getDate() + 1 ) + '/' + ( tomorrow.getMonth() + 1 ) + '/' + tomorrow.getFullYear();
-
 
503
 
-
 
504
    switch( datasToSubmitObject.element ) {
-
 
505
 
-
 
506
      // case 'file' :
-
 
507
      // Rien à faire, pas de détails à transmettre
-
 
508
 
-
 
509
      case 'select':
-
 
510
      case 'checkbox':
-
 
511
      case 'list-checkbox':
-
 
512
      case 'radio':
-
 
513
 
-
 
514
      datasToSubmitObject.fieldValues.listValue = [];
-
 
515
 
-
 
516
        // Ajout des valeurs de liste
-
 
517
        onChangeStoreListValueLabel( datasToSubmitObject , index );
-
 
518
 
-
 
519
        // S'il y a une valeur 'autre' on l'indique à la fin de la liste
-
 
520
        if( $('.new-field[data-id="' + index + '"] .option-other-value').attr( 'checked' ) && datasToSubmitObject.fieldValues.listValue.indexOf( 'other' ) === -1 ) {
-
 
521
          datasToSubmitObject.fieldValues.listValue.push( 'other' );
-
 
522
        }
-
 
523
 
-
 
524
        break;
-
 
525
 
-
 
526
      case 'number':
-
 
527
      case 'range':
-
 
528
 
-
 
529
        // Placeholder
-
 
530
        if( $( '.new-field[data-id="' + index + '"] .aide-saisie' ).val() ) {
-
 
531
         datasToSubmitObject.fieldValues.placeholder = $( '.new-field[data-id="' + index + '"] .aide-saisie' ).val();
-
 
532
        }
-
 
533
 
-
 
534
        // Valeur par défaut
-
 
535
        if( $( '.new-field[data-id="' + index + '"] .default' ).val() ) {
-
 
536
          datasToSubmitObject.fieldValues.default = $( '.new-field[data-id="' + index + '"] .default' ).val();
-
 
537
        }
295
      '<div class="new-value" data-list-value-id="' + valueId +'">'+
538
 
-
 
539
        // Incrémentation ( attribut step="" )
-
 
540
        if( $( '.new-field[data-id="' + index + '"] .step' ).val() ) {
296
 
541
          datasToSubmitObject.fieldValues.step = $( '.new-field[data-id="' + index + '"] .step' ).val();
-
 
542
        }
-
 
543
 
-
 
544
        // Min
-
 
545
        if( $( '.new-field[data-id="' + index + '"] .min' ).val() ) {
-
 
546
          datasToSubmitObject.fieldValues.min = $( '.new-field[data-id="' + index + '"] .min' ).val();
297
        // Recueil d'une valeur de la liste
547
        }
298
        '<label for="list-value">Valeur:</label>'+
548
 
Line 299... Line -...
299
        '<input type="text" name="list-value" class="list-value" placeholder="Une des valeurs de la liste">'+
-
 
300
 
-
 
301
        '<div class="row">'+
-
 
302
 
-
 
303
          '<div class="col-md-5">'+
-
 
304
 
-
 
305
            // Checkbox "valeur par défaut" de la liste
-
 
306
            '<label for="is-defaut-value" title="Ceci est la valeur par défaut">Valeur par défaut</label>'+
-
 
307
            '<input type="checkbox" name="is-defaut-value" class="is-defaut-value">'+
-
 
308
 
-
 
309
          '</div>'+
-
 
310
 
-
 
311
          '<div class="col-md-5">'+
-
 
312
 
-
 
313
            // Bouton "supprimer la valeur" de la liste
-
 
314
            '<label for="remove-value">Supprimer valeur</label>'+
-
 
315
            '<div class="remove-value button" name="remove-value" data-list-value-id="' + valueId + '" title="Supprimer une valeur"><i class="fa fa-times" aria-hidden="true"></i></div>'+
-
 
316
 
-
 
317
          '</div>'+
-
 
318
 
-
 
319
        '</div>'+
-
 
320
      '</div>'
-
 
321
    );
-
 
322
    // TODO : collecter les nouvelles valeurs
-
 
323
    // et les ajouter sous forme d'un tableau de données
-
 
324
    // sans oublier d'indiquer la valeur par defaut
-
 
325
 
-
 
326
    // Pouvoir supprimer une valeur
-
 
327
    onClickRemoveListValue( fieldId );
-
 
328
 
-
 
329
    // s'assurer qu'il n'y a qu'une valeur par défaut cochée dans les listes
-
 
330
    onClickDefaultValueRemoveOthers( fieldId );
-
 
331
 
-
 
332
    valueId++;
-
 
333
  });
-
 
334
}
-
 
335
 
-
 
336
// Logique pour le bouton supprimer une valeur
-
 
337
function onClickRemoveListValue( fieldId ) {
-
 
338
 
-
 
339
  $('.new-field[data-id="' + fieldId + '"] .remove-value.button').click( function() {
-
 
340
    $( '.new-field[data-id="' + fieldId + '"] .new-value[data-list-value-id="' + $( this ).attr( 'data-list-value-id' ) + '"]' ).fadeOut( 200 , this.remove() );
-
 
341
 
-
 
342
    // TODO : logique pour retirer une valeur du tableau d'envoi
-
 
343
  });
-
 
344
}
-
 
345
 
-
 
346
// Dans une liste il ne peut y avoir qu'une valeur par défaut cochée
-
 
347
function onClickDefaultValueRemoveOthers( fieldId ) {
-
 
348
 
-
 
349
  $( '.new-field[data-id="' + fieldId + '"] .is-defaut-value' ).click( function() {
-
 
350
    $( '.new-field[data-id="' + fieldId + '"] .is-defaut-value' ).not( $( this ) ).removeAttr('checked');
-
 
351
  });
-
 
352
}
-
 
353
 
-
 
354
// TODO : ci-dessous l'envoi des données
-
 
355
// quand je pensais le faire à travers des input hidden au dessus du submit
-
 
356
// la logique pourrait encore servir?
-
 
357
// il manquait juste les valeurs pour les listes (select,checkbox, etc.)
-
 
358
// et l'ajout d'une valeur 'autre' si la checkbox était checkée
-
 
359
//
-
 
360
// // Remplissage de l'attribut valut de l'input hidden .field-value-submit
-
 
361
// // pour l'envoi des informations qui dépendent de l'élément choisi
-
 
362
// function onCollectDataValuesToSubmit( fieldId , selectedList ) {
-
 
363
 
-
 
364
//     switch( selectedList ) {
-
 
365
 
-
 
366
//       case 'number':
-
 
367
//       case 'range':
-
 
368
//         //default
-
 
369
//         var ph = 'ph:' + $( '.new-field[data-id="' + fieldId + '"] .aide-saisie' ).val() + ';';
-
 
370
//         var def = 'def:' + $( '.new-field[data-id="' + fieldId + '"] .default' ).val() + ';';
-
 
371
//         var step = 'step:' + $( '.new-field[data-id="' + fieldId + '"] .default' ).val() + ';';
-
 
372
//         var min = 'min:' + $( '.new-field[data-id="' + fieldId + '"] .min' ).val() + ';';
-
 
373
//         var max = 'max:' + $( '.new-field[data-id="' + fieldId + '"] .max' ).val() + ';';
-
 
374
 
-
 
375
//         $( '.field-value-submit[data-id="' + fieldId + '"]' ).val( '{' + ph + def + step + min + max + '}');
-
 
376
 
-
 
377
//         // Placeholder
-
 
378
//         $( '.new-field[data-id="' + fieldId + '"] .aide-saisie' ).change( function() {
-
 
379
//           ph = 'ph:"' + $( this ).val() + '";';
-
 
380
//           $( '.field-value-submit[data-id="' + fieldId + '"]' ).val( '{' + ph + def + step + min + max + '}');
-
 
381
//         });
-
 
382
 
-
 
383
//         // Valeur par défaut
-
 
384
//         $( '.new-field[data-id="' + fieldId + '"] .default' ).change( function() {
-
 
385
//           def = 'def:' + $( this ).val() + ';';
-
 
386
//           $( '.field-value-submit[data-id="' + fieldId + '"]' ).val( '{' + ph + def + step + min + max + '}');
-
 
387
//         });
-
 
388
 
-
 
389
//         // Incrémentation ( attribut step="" )
-
 
390
//         $( '.new-field[data-id="' + fieldId + '"] .step' ).change( function() {
-
 
391
//           step = 'step:' + $( this ).val() + ';';
-
 
392
//           $( '.field-value-submit[data-id="' + fieldId + '"]' ).val( '{' + ph + def + step + min + max + '}');
-
 
393
//         });
-
 
394
 
-
 
395
//         // Min
-
 
396
//         $( '.new-field[data-id="' + fieldId + '"] .min' ).change( function() {
-
 
397
//           min = 'min:' + $( this ).val() + ';';
-
 
398
//           $( '.field-value-submit[data-id="' + fieldId + '"]' ).val( '{' + ph + def + step + min + max + '}');
-
 
399
//         });
-
 
400
 
-
 
401
//         // Max
-
 
402
//         $( '.new-field[data-id="' + fieldId + '"] .max' ).change( function() {
-
 
403
//           max = 'max:' + $( this ).val() + ';';
-
 
404
//           $( '.field-value-submit[data-id="' + fieldId + '"]' ).val( '{' + ph + def + step + min + max + '}');
-
 
Line 405... Line 549...
405
//         });
549
        // Max
406
 
550
        if( $( '.new-field[data-id="' + index + '"] .max' ).val() ) {
407
//         break;
551
          datasToSubmitObject.fieldValues.max = $( '.new-field[data-id="' + index + '"] .max' ).val();
408
 
552
        }
Line 476... Line 620...
476
      $fileInput.focus();
620
      $fileInput.focus();
477
    }
621
    }
478
  });
622
  });
Line 479... Line 623...
479
 
623
 
480
  // action lorsque le label est cliqué
624
  // action lorsque le label est cliqué
481
  $button.click(function() {
625
  $button.click( function() {
482
    $fileInput.focus();
626
    $fileInput.focus();
483
    return false;
627
    return false;
Line 484... Line 628...
484
  });
628
  });
Line 498... Line 642...
498
      var tmppath = URL.createObjectURL( file );
642
      var tmppath = URL.createObjectURL( file );
499
      $theReturn.append( '<img src="' + tmppath + '" width="50%">' );
643
      $theReturn.append( '<img src="' + tmppath + '" width="50%">' );
500
    }
644
    }
501
  });
645
  });
502
}
646
}
503
 
-