Subversion Repositories eFlore/Applications.cel

Rev

Rev 3168 | Rev 3173 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3167 idir 1
"use strict";
3165 idir 2
 
3168 idir 3
// déclaration du tableau d'envoi des données?
3171 idir 4
var datasToSubmit = new Array();
5
var listvalue = new Array();
3168 idir 6
 
3167 idir 7
/***************************
8
 *  Lancement des scripts  *
9
 ***************************/
3165 idir 10
 
3167 idir 11
jQuery( document ).ready( function() {
3165 idir 12
 
3171 idir 13
  // Identifiant de champ
14
  var fieldIndex = 0;
3168 idir 15
 
3171 idir 16
 
3167 idir 17
  // Ajout de nouveaux champs
3171 idir 18
  onClickAddNewFields( fieldIndex );
3167 idir 19
 
20
  // Affichage des images ou nom des documents importés
21
  inputFile();
22
 
23
});
24
 
25
/***********************************************************
26
 *  Fonctions pour la création des champs supplémentaires  *
27
 ***********************************************************/
28
 
29
// Logique globale pour l'ajout de nouveaux champs
3171 idir 30
function onClickAddNewFields( fieldIndex ) {
3167 idir 31
 
3171 idir 32
  // Drapeaux d'activation du bouton valider
33
  var nameFlag = false,
34
      keyFlag = false;
35
 
3167 idir 36
  $( '#add-fields' ).click( function() {
37
 
3171 idir 38
    // Réactiver le bouton valider les champs supplémentaires :
39
    nameFlag = false;
40
    keyFlag = false;
3168 idir 41
 
3167 idir 42
    // Ajout d'un nouveau champ
3171 idir 43
    displayNewField( fieldIndex );
3167 idir 44
 
3171 idir 45
    // Désactivation du bouton valider
46
    onflagEnableValidateNewFieldsButton( keyFlag , nameFlag );
47
 
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
 
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 );
68
 
69
      // Activation du bouton valider
70
      onflagEnableValidateNewFieldsButton( keyFlag , nameFlag );
71
 
72
    });
73
 
3168 idir 74
    // Nom du champ affichage titre du champ
3171 idir 75
    onChangeDisplayFieldLabel( fieldIndex );
3168 idir 76
 
3171 idir 77
    // Les images ou les nom des documents importés doivent aussi
78
    // s'afficher dans les champs ajoutés
79
    inputFile( fieldIndex );
80
 
3168 idir 81
    // En fonction du type de champ choisi on demande les informations correspondantes
3171 idir 82
    onChangeFieldTypeCollectDetails( fieldIndex );
3168 idir 83
 
3167 idir 84
    // Suppression d'un champ
85
    onClickRemoveField();
86
 
3171 idir 87
    fieldIndex++;
3167 idir 88
  });
3165 idir 89
}
90
 
3167 idir 91
// Création et logique pour un nouveau champ
3168 idir 92
// Un peu d'animation de l'affichage d'un nouveau champ
3171 idir 93
function displayNewField( fieldIndex ) {
3167 idir 94
 
3168 idir 95
  // Le html des nouveaux champs inséré dans le dom
96
  $( '#new-fields' ).append(
3171 idir 97
    '<div data-id="' + fieldIndex + '" class="new-field">'+
3167 idir 98
      '<h3>Nouveau champ :<br><strong class="field-title"></strong></h3>'+
99
 
100
      // Nom du champ
3168 idir 101
      '<label for="field-name" title="Donnez titre à votre champ">Nom du champ</label>'+
102
      '<input type="text" name="field-name" class="field-name" placeholder="Donnez titre à votre champ" required>'+
3167 idir 103
 
3168 idir 104
      // Clé du champ
105
      '<label for="field-key" title="Clé du champ (son nom dans la base de données)">'+
106
        'Clé du champ en camelCase (ecritureChameau)<br>'+
107
        '<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i> '+
108
        'Pas d\'accents ou de cédille, pas de caractères spéciaux.'+
109
      '</label>'+
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)">'+
111
 
3167 idir 112
      // Type de champ
3168 idir 113
      '<label for="field-element" title="Quel type de champ">Type de champ</label>'+
3167 idir 114
      '<div class="select-wrapper add-field-select">'+
3171 idir 115
        '<select name="field-element" class="field-element">'+
3167 idir 116
          '<option value="text" selected="selected">Champ texte</option>'+
117
          '<option value="email">Champ email</option>'+
118
          '<option value="textarea">Champ rédaction</option>'+
119
          '<option value="select">Menu déroulant</option>'+
120
          '<option value="checkbox">Cases à cocher</option>'+
121
          '<option value="list-checkbox">liste Cases à cocher</option>'+
122
          '<option value="radio">Boutons radio</option>'+
123
          '<option value="date">Calendrier</option>'+
124
          '<option value="file">Téléchargement</option>'+
125
          '<option value="range">Curseur (curseur entre 2 bornes)</option>'+
126
          '<option value="number">Nombre</option>'+
127
        '</select>'+
128
      '</div>'+
129
 
3168 idir 130
      // Checkbox "champ requis"
131
      '<label for="field-is_mandatory" title="Ce champ est obligatoire">Champ requis ?</label>'+
132
      '<input type="checkbox" name="field-is_mandatory" class="field-is_mandatory">'+
3167 idir 133
 
3168 idir 134
      // Unité des valeurs
135
      '<label for="field-unit" title="Unité de mesure de vos valeurs">Unités ( cm, kg, ha, etc.)</label>'+
136
      '<input type="text" name="field-unit" class="field-unit" placeholder="symbole de vos unités">'+
137
 
3167 idir 138
      // Tooltip
3168 idir 139
      '<label for="field-description" title="Ajoutez une info-bulle">Info-bulle</label>'+
140
      '<input type="text" name="field-description" class="field-description" placeholder="Quelques mots">'+
3167 idir 141
 
142
      // Import d'une image ou d'un pdf d'aide à afficher en popup
143
      '<div class="input-file-container">'+
3171 idir 144
        '<input type="file" class="input-file field-help" name="field-help" id="help-doc-' + fieldIndex + '" accept="application/pdf, image/*, video/*">'+
3168 idir 145
        '<label for="field-help" class="label-file"><i class="fas fa-download"></i>Image ou pdf d\'aide (popup)</label>'+
3167 idir 146
      '</div>'+
3171 idir 147
      '<div class="file-return help-doc-' + fieldIndex + '"></div>'+
3167 idir 148
 
3168 idir 149
      '<label for="remove-field">Supprimer ce champ</label>'+
3171 idir 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>'+
3167 idir 151
 
152
      '</div>'+
153
 
3168 idir 154
    '</div>'
155
  );
3167 idir 156
 
3168 idir 157
  // Animation de l'affichage
3171 idir 158
  $( '.new-field[data-id="' + fieldIndex + '"]').hide().removeClass( 'hidden' ).show( 200 );
3168 idir 159
}
3167 idir 160
 
3168 idir 161
// Affichage du nom du champ dès qu'il est renseigné
3171 idir 162
function onChangeDisplayFieldLabel( fieldIndex ) {
3167 idir 163
 
3171 idir 164
  $('.new-field[data-id="' + fieldIndex + '"] .field-name').change( function() {
165
    $( '.new-field[data-id="' + fieldIndex + '"] .field-title' ).text( $( this ).val() );
3168 idir 166
  });
3167 idir 167
}
3166 idir 168
 
3168 idir 169
// Supprimer tout un champ
3171 idir 170
function onClickRemoveField (keyFlag , nameFlag) {
3165 idir 171
 
3167 idir 172
  $( '.remove-field.button' ).click( function() {
3168 idir 173
 
3171 idir 174
    keyFlag = true ,
175
    nameFlag = true ;
3165 idir 176
 
3171 idir 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 );
3167 idir 187
  });
188
}
3165 idir 189
 
3171 idir 190
// Vérification de key ou name pour tous les nouveaux champs
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
}
205
 
206
// Activation du bouton valider les champs supplémentaires
207
function onflagEnableValidateNewFieldsButton( keyFlag , nameFlag ) {
208
 
209
    // Activation du bouton valider
210
    if( keyFlag && keyFlag ) {
211
      onClickStoreNewFields();
212
      $( '#validate-new-fields' ).removeClass('disabled');
213
    } else {
214
      $( '#validate-new-fields' ).off( 'click' ).addClass('disabled');
215
    }
216
}
217
 
3167 idir 218
/**** Recueil des informations et détails qui dépendent du type de champ choisi ****/
3166 idir 219
 
3167 idir 220
// Logique de recueil d'informations en fonction du type de champ choisi
3171 idir 221
function onChangeFieldTypeCollectDetails( fieldIndex ) {
3166 idir 222
 
3168 idir 223
  var fieldDetails =
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
3171 idir 228
  displayFieldDetailsCollect( fieldIndex , fieldDetails );
3167 idir 229
 
3171 idir 230
  // Sinon :
231
  $( '.new-field[data-id="' + fieldIndex + '"] .field-element' ).change( function() {
3168 idir 232
 
3171 idir 233
    // On intialise l'index pour les listes la variable qui contiendra un id pour chaque option
234
    var valueIndex = 0;
3167 idir 235
 
236
    // Si on hésite on qu'on se trompe dans la liste :
237
    // les champs de détails de l'option précédente doivent être supprimés
3171 idir 238
    $( '.new-field[data-id="' + fieldIndex + '"] .field-details' ).remove();
3167 idir 239
 
3168 idir 240
    // $( this ).val() = le type de champ choisi dans select ".field-element"
3167 idir 241
    switch( $( this ).val() ) {
242
 
3171 idir 243
      case 'file':
244
        fieldDetails = '';
245
        break;
246
 
3167 idir 247
      case 'number':
248
      case 'range':
249
        fieldDetails =
250
          // Placeholder
3168 idir 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>'+
3167 idir 252
          '<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">'+
253
 
254
          // Valeur par défaut
3168 idir 255
          '<label for="default" title="Valeur par défaut">Valeur par défaut</label>'+
3171 idir 256
          '<input type="number" name="default" class="default" step="0.01">'+
3167 idir 257
 
258
          // Incrémentation ( attribut step="" )
3168 idir 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>'+
3171 idir 260
          '<input type="number" name="step" class="step" step="0.01">'+
3167 idir 261
 
262
          // Min
263
          '<label for="min" title="valeur min">Valeur minimale</label>'+
3171 idir 264
          '<input type="number" name="min" class="min" step="0.01">'+
3167 idir 265
 
266
          // Max
267
          '<label for="max" title="valeur max">Valeur maximale</label>'+
3171 idir 268
          '<input type="number" name="max" class="max" step="0.01">'+
3168 idir 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>';
3171 idir 270
 
3167 idir 271
        break;
272
 
273
      case 'date':
3171 idir 274
 
3167 idir 275
        fieldDetails =
276
          // Date min
277
          '<label for="min" title="valeur min">Valeur minimale</label>'+
3171 idir 278
          '<input type="date" name="min" class="min">'+
3167 idir 279
 
280
          // Date max
281
          '<label for="max" title="valeur max">Valeur maximale</label>'+
3171 idir 282
          '<input type="date" name="max" class="max">';
283
 
3167 idir 284
        break;
285
 
286
      case 'select':
287
      case 'checkbox':
288
      case 'list-checkbox':
289
      case 'radio':
3171 idir 290
 
3167 idir 291
        fieldDetails =
3168 idir 292
          '<p class="message">Ajoutez les valeurs de \"' + $( this ).children( 'option:selected' ).text() + '\"</p>'+
3167 idir 293
 
294
          // Bouton ajout d'une valeur à la liste
295
          '<label for="add-value" class="add-value" title="Ajouter une valeur à la liste">Ajouter une valeur</label>'+
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>'+
297
 
298
          // checkbox ajouter une valeur "Autre:"
299
          '<label for="option-other-value" title="Ajouter une option \'Autre:\' à la fin">Valeur "Autre"</label>'+
300
          '<input type="checkbox" class="option-other-value" name="option-other-value" title="Ajouter une option \'Autre\' à la fin">';
301
 
3168 idir 302
        break;
303
 
3171 idir 304
 
3168 idir 305
      case 'email':
3167 idir 306
      case 'text':
307
      case 'textarea':
308
      default:
3171 idir 309
 
3167 idir 310
        fieldDetails =
311
        // Placeholder
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>'+
313
        '<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">';
3171 idir 314
 
3167 idir 315
        break;
316
    }
317
 
318
    if( fieldDetails.length > 0 ) {
319
      //ne pas ajouer une div vide s'il n'y pas d'informations à demander
3171 idir 320
      displayFieldDetailsCollect( fieldIndex , fieldDetails );
3167 idir 321
    }
322
 
323
    // Ajout des valeurs possibles
324
    // lorsque le champ est une liste ou case à cocher
3171 idir 325
    onClickAddNewValueToList( fieldIndex , valueIndex );
3167 idir 326
 
327
  });
3165 idir 328
}
329
 
3167 idir 330
// Insertion dans le dom des champs de recueil d'informations
3171 idir 331
function displayFieldDetailsCollect( fieldIndex , fieldDetails ) {
332
  $( '.new-field[data-id="' + fieldIndex + '"] .add-field-select' ).after( '<div class="field-details">' + fieldDetails + '</div>' );
3167 idir 333
}
3165 idir 334
 
3167 idir 335
/**** Ajout des valeurs (options) des "champs de listes" (select, checkbox, radio, etc.) ****/
3165 idir 336
 
3167 idir 337
// Logique d'ajout des options des listes (deroulantes, cases à cocher etc.)
3171 idir 338
function onClickAddNewValueToList( fieldIndex , valueIndex ) {
3165 idir 339
 
3171 idir 340
  $( '.new-field[data-id="' + fieldIndex + '"] .add-value-button' ).click( function() {
3165 idir 341
 
3171 idir 342
    $( '.new-field[data-id="' + fieldIndex + '"] .add-value' ).before(
343
      '<div class="new-value" data-list-value-id="' + valueIndex +'">'+
3165 idir 344
 
3167 idir 345
        // Recueil d'une valeur de la liste
346
        '<label for="list-value">Valeur:</label>'+
3171 idir 347
        '<input type="text" name="list-value" class="list-value"  data-list-value-id="' + valueIndex +'" placeholder="Une des valeurs de la liste">'+
3167 idir 348
 
349
        '<div class="row">'+
350
 
351
          '<div class="col-md-5">'+
352
 
3168 idir 353
            // Checkbox "valeur par défaut" de la liste
3167 idir 354
            '<label for="is-defaut-value" title="Ceci est la valeur par défaut">Valeur par défaut</label>'+
3171 idir 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 >'+
3167 idir 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>'+
3171 idir 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>'+
3167 idir 363
 
364
          '</div>'+
365
 
366
        '</div>'+
3168 idir 367
      '</div>'
368
    );
3167 idir 369
 
3171 idir 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
 
3167 idir 377
    // Pouvoir supprimer une valeur
3171 idir 378
    onClickRemoveListValue( fieldIndex );
3167 idir 379
 
3171 idir 380
    valueIndex++;
381
  });
382
}
3167 idir 383
 
3171 idir 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');
3167 idir 389
  });
390
}
391
 
3171 idir 392
// Dans une liste il ne peut y avoir qu'une valeur par défaut cochée
393
function onClickDefaultValueRemoveOthers( fieldIndex ) {
3167 idir 394
 
3171 idir 395
  $( '.new-field[data-id="' + fieldIndex + '"] .is-defaut-value' ).click( function() {
3168 idir 396
 
3171 idir 397
   if( $( this ).attr( 'checked' ) ) {
398
      $( '.new-field[data-id="' + fieldIndex + '"] .is-defaut-value:checked' ).not( $( this) ).removeAttr( 'checked' );
399
    }
400
 
3167 idir 401
  });
402
}
403
 
3171 idir 404
// Logique pour le bouton supprimer une valeur
405
function onClickRemoveListValue( fieldIndex ) {
3167 idir 406
 
3171 idir 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();
3167 idir 409
  });
410
}
411
 
412
 
3171 idir 413
/*********************************************
414
 *  Validation et envoi des nouveaux champs  *
415
 *********************************************/
3168 idir 416
 
3171 idir 417
function onClickStoreNewFields() {
3168 idir 418
 
3171 idir 419
  $( '#validate-new-fields' ).click( function() {
3168 idir 420
 
3171 idir 421
    var resultArrayIndex = 0;
422
    var count = 0;
3168 idir 423
 
3171 idir 424
    $( '.new-field' ).each( function () {
425
      if( $(this).attr('data-id') > count) {
426
        count = $(this).attr('data-id');
427
      }
428
    });
3168 idir 429
 
3171 idir 430
    for( var index = 0 ; index <= count ; index++ ) {
3168 idir 431
 
3171 idir 432
      if( $( '.new-field[data-id="' + index + '"]').length > 0 ) {
3168 idir 433
 
3171 idir 434
        // initialisation du tableau de résultats
435
        datasToSubmit[ resultArrayIndex ] = { fieldValues:{} };
3168 idir 436
 
3171 idir 437
        // Ajout de la clé au tableau de resultats
438
        datasToSubmit[ resultArrayIndex ].key = $( '.new-field[data-id="' + index + '"] .field-key' ).val();
3168 idir 439
 
3171 idir 440
        // Ajout de le nom au tableau de resultats
441
        datasToSubmit[ resultArrayIndex ].name = $( '.new-field[data-id="' + index + '"] .field-name' ).val();
3168 idir 442
 
3171 idir 443
        // Recueil de l'élément choisi pour le tableau de resultats
444
        datasToSubmit[ resultArrayIndex ].element = $( '.new-field[data-id="' + index + '"] .field-element' ).val();
3168 idir 445
 
3171 idir 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
        }
3168 idir 452
 
3171 idir 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
        };
3168 idir 457
 
3171 idir 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
        }
3168 idir 462
 
3171 idir 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
        }
3168 idir 467
 
3171 idir 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
        }
3168 idir 474
 
3171 idir 475
        resultArrayIndex++;
476
      }
477
    }
3168 idir 478
 
3171 idir 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
        }
538
 
539
        // Incrémentation ( attribut step="" )
540
        if( $( '.new-field[data-id="' + index + '"] .step' ).val() ) {
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();
547
        }
548
 
549
        // Max
550
        if( $( '.new-field[data-id="' + index + '"] .max' ).val() ) {
551
          datasToSubmitObject.fieldValues.max = $( '.new-field[data-id="' + index + '"] .max' ).val();
552
        }
553
 
554
        break;
555
 
556
      case 'date':
557
 
558
        // Min
559
        if( $( '.new-field[data-id="' + index + '"] .min' ).val() ) {
560
          datasToSubmitObject.fieldValues.min = $( '.new-field[data-id="' + index + '"] .min' ).val();
561
        } else {
562
          datasToSubmitObject.fieldValues.min = today;
563
        }
564
 
565
        // Max
566
        if( $( '.new-field[data-id="' + index + '"] .max' ).val() ) {
567
          datasToSubmitObject.fieldValues.max = $( '.new-field[data-id="' + index + '"] .max' ).val();
568
        } else {
569
          datasToSubmitObject.fieldValues.min = tomorrow;
570
        }
571
 
572
        break;
573
 
574
      case 'email':
575
      case 'text':
576
      case 'textarea':
577
      default:
578
 
579
        // Placeholder
580
        if( $( '.new-field[data-id="' + index + '"] .aide-saisie' ).val() ) {
581
          datasToSubmitObject.fieldValues.placeholder = $( '.new-field[data-id="' + index + '"] .aide-saisie' ).val();
582
        }
583
 
584
        break;
585
    }
586
}
587
 
588
// Ajout d'une valeur d'un élément liste (select, checkbox etc.)
589
// dans le tableau de resultats
590
function onChangeStoreListValueLabel( datasToSubmitObject , index ) {
591
 
592
  $( '.new-field[data-id="' + index + '"] .list-value' ).each( function() {
593
 
594
     if( $( this ).val() ){
595
      if( $( '.new-field[data-id="' + index + '"] .is-defaut-value[data-list-value-id="' + $( this ).attr('data-list-value-id') + '"]' ).attr( 'checked' ) ) {
596
        datasToSubmitObject.fieldValues.listValue.unshift( $( this ).val() );
597
      } else {
598
        datasToSubmitObject.fieldValues.listValue.push( $( this ).val() );
599
      }
600
    }
601
  });
602
}
603
 
604
 
3167 idir 605
/****************************************
606
 *  Fonctions pour afficher les images  *
607
 *  ou les nom de fichers importés      *
608
 ****************************************/
609
 
610
// Logique d'affichage pour le input type=file
611
function inputFile() {
612
 
613
  // initialisation des variables
614
  var $fileInput  = $( ".input-file" ),
615
      $button     = $( ".label-file" );
616
 
617
  // action lorsque la "barre d'espace" ou "Entrée" est pressée
618
  $button.on( 'keydown', function( event ) {
619
    if ( event.keyCode == 13 || event.keyCode == 32 ) {
620
      $fileInput.focus();
621
    }
622
  });
623
 
624
  // action lorsque le label est cliqué
3171 idir 625
  $button.click( function() {
3167 idir 626
    $fileInput.focus();
627
    return false;
628
  });
629
 
630
  // affiche un retour visuel dès que input:file change
631
  $fileInput.change( function( event ) {
632
    var file = event.target.files[0],
633
      $theReturn = $( '.' + $( this ).attr( 'id' ) );
634
 
635
    // affichage du nom du fichier
636
    $theReturn.text( file.name );
637
 
638
    // si le fichier est une image on l'affiche
639
    if( file.type.match( 'image' ) ) {
640
      // temporairement retrouver le chemin
641
      // de l'image qui a été chagée, pour affichage
642
      var tmppath = URL.createObjectURL( file );
643
      $theReturn.append( '<img src="' + tmppath + '" width="50%">' );
644
    }
645
  });
646
}