Subversion Repositories eFlore/Applications.cel

Rev

Rev 3171 | Rev 3174 | 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
 
3173 idir 223
  var today = new Date();
224
  var tomorrow = new Date();
225
  var todayMonth = ( today.getMonth() + 1 ).toString();
226
  var tomorrowMonth = ( tomorrow.getMonth() + 1 ).toString();
227
  if((today.getMonth() + 1) < 10) {
228
    todayMonth = '0' + todayMonth;
229
  }
230
  if((tomorrow.getMonth() + 1) < 10) {
231
    tomorrowMonth = '0' + tomorrowMonth;
232
  }
233
 
234
  today = today.getFullYear() + '-' + todayMonth + '-' + today.getDate();
235
  tomorrow = tomorrow.getFullYear() + '-' + tomorrowMonth + '-' + ( tomorrow.getDate() + 1 );
236
 
3168 idir 237
  var fieldDetails =
238
    // Placeholder (champ type text par défaut)
239
    '<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>'+
240
    '<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">';
241
  // On insère les champs par défaut de recueil d'informations
3171 idir 242
  displayFieldDetailsCollect( fieldIndex , fieldDetails );
3167 idir 243
 
3171 idir 244
  // Sinon :
245
  $( '.new-field[data-id="' + fieldIndex + '"] .field-element' ).change( function() {
3168 idir 246
 
3171 idir 247
    // On intialise l'index pour les listes la variable qui contiendra un id pour chaque option
248
    var valueIndex = 0;
3167 idir 249
 
250
    // Si on hésite on qu'on se trompe dans la liste :
251
    // les champs de détails de l'option précédente doivent être supprimés
3171 idir 252
    $( '.new-field[data-id="' + fieldIndex + '"] .field-details' ).remove();
3167 idir 253
 
3168 idir 254
    // $( this ).val() = le type de champ choisi dans select ".field-element"
3167 idir 255
    switch( $( this ).val() ) {
256
 
3171 idir 257
      case 'file':
258
        fieldDetails = '';
259
        break;
260
 
3167 idir 261
      case 'number':
262
      case 'range':
263
        fieldDetails =
264
          // Placeholder
3168 idir 265
          '<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 266
          '<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">'+
267
 
268
          // Valeur par défaut
3168 idir 269
          '<label for="default" title="Valeur par défaut">Valeur par défaut</label>'+
3171 idir 270
          '<input type="number" name="default" class="default" step="0.01">'+
3167 idir 271
 
272
          // Incrémentation ( attribut step="" )
3168 idir 273
          '<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 274
          '<input type="number" name="step" class="step" step="0.01">'+
3167 idir 275
 
276
          // Min
277
          '<label for="min" title="valeur min">Valeur minimale</label>'+
3171 idir 278
          '<input type="number" name="min" class="min" step="0.01">'+
3167 idir 279
 
280
          // Max
281
          '<label for="max" title="valeur max">Valeur maximale</label>'+
3171 idir 282
          '<input type="number" name="max" class="max" step="0.01">'+
3168 idir 283
          '<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 284
 
3167 idir 285
        break;
286
 
287
      case 'date':
3171 idir 288
 
3167 idir 289
        fieldDetails =
290
          // Date min
291
          '<label for="min" title="valeur min">Valeur minimale</label>'+
3173 idir 292
          '<input type="date" name="min" class="min" value="' + today + '">'+
3167 idir 293
 
294
          // Date max
295
          '<label for="max" title="valeur max">Valeur maximale</label>'+
3173 idir 296
          '<input type="date" name="max" class="max" value="' + tomorrow + '">';
3171 idir 297
 
3167 idir 298
        break;
299
 
300
      case 'select':
301
      case 'checkbox':
302
      case 'list-checkbox':
303
      case 'radio':
3171 idir 304
 
3167 idir 305
        fieldDetails =
3168 idir 306
          '<p class="message">Ajoutez les valeurs de \"' + $( this ).children( 'option:selected' ).text() + '\"</p>'+
3167 idir 307
 
308
          // Bouton ajout d'une valeur à la liste
309
          '<label for="add-value" class="add-value" title="Ajouter une valeur à la liste">Ajouter une valeur</label>'+
310
          '<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>'+
311
 
312
          // checkbox ajouter une valeur "Autre:"
313
          '<label for="option-other-value" title="Ajouter une option \'Autre:\' à la fin">Valeur "Autre"</label>'+
314
          '<input type="checkbox" class="option-other-value" name="option-other-value" title="Ajouter une option \'Autre\' à la fin">';
315
 
3168 idir 316
        break;
317
 
3171 idir 318
 
3168 idir 319
      case 'email':
3167 idir 320
      case 'text':
321
      case 'textarea':
322
      default:
3171 idir 323
 
3167 idir 324
        fieldDetails =
325
        // Placeholder
326
        '<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>'+
327
        '<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">';
3171 idir 328
 
3167 idir 329
        break;
330
    }
331
 
332
    if( fieldDetails.length > 0 ) {
333
      //ne pas ajouer une div vide s'il n'y pas d'informations à demander
3171 idir 334
      displayFieldDetailsCollect( fieldIndex , fieldDetails );
3167 idir 335
    }
336
 
337
    // Ajout des valeurs possibles
338
    // lorsque le champ est une liste ou case à cocher
3171 idir 339
    onClickAddNewValueToList( fieldIndex , valueIndex );
3167 idir 340
 
341
  });
3165 idir 342
}
343
 
3167 idir 344
// Insertion dans le dom des champs de recueil d'informations
3171 idir 345
function displayFieldDetailsCollect( fieldIndex , fieldDetails ) {
346
  $( '.new-field[data-id="' + fieldIndex + '"] .add-field-select' ).after( '<div class="field-details">' + fieldDetails + '</div>' );
3167 idir 347
}
3165 idir 348
 
3167 idir 349
/**** Ajout des valeurs (options) des "champs de listes" (select, checkbox, radio, etc.) ****/
3165 idir 350
 
3167 idir 351
// Logique d'ajout des options des listes (deroulantes, cases à cocher etc.)
3171 idir 352
function onClickAddNewValueToList( fieldIndex , valueIndex ) {
3165 idir 353
 
3171 idir 354
  $( '.new-field[data-id="' + fieldIndex + '"] .add-value-button' ).click( function() {
3165 idir 355
 
3171 idir 356
    $( '.new-field[data-id="' + fieldIndex + '"] .add-value' ).before(
357
      '<div class="new-value" data-list-value-id="' + valueIndex +'">'+
3165 idir 358
 
3167 idir 359
        // Recueil d'une valeur de la liste
360
        '<label for="list-value">Valeur:</label>'+
3171 idir 361
        '<input type="text" name="list-value" class="list-value"  data-list-value-id="' + valueIndex +'" placeholder="Une des valeurs de la liste">'+
3167 idir 362
 
363
        '<div class="row">'+
364
 
365
          '<div class="col-md-5">'+
366
 
3168 idir 367
            // Checkbox "valeur par défaut" de la liste
3167 idir 368
            '<label for="is-defaut-value" title="Ceci est la valeur par défaut">Valeur par défaut</label>'+
3171 idir 369
            '<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 370
          '</div>'+
371
 
372
          '<div class="col-md-5">'+
373
 
374
            // Bouton "supprimer la valeur" de la liste
375
            '<label for="remove-value">Supprimer valeur</label>'+
3171 idir 376
            '<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 377
 
378
          '</div>'+
379
 
380
        '</div>'+
3168 idir 381
      '</div>'
382
    );
3167 idir 383
 
3171 idir 384
    // Activer la checkbox de valeur par default uniquement si une valeur est entrée
385
    onInputListValueLabelEnableDefaultCheckbox( fieldIndex , valueIndex );
386
 
387
    // attribuer la valeur par défaut d'un liste
388
    // et retirer l'ancienne s'il y en avait une
389
    onClickDefaultValueRemoveOthers( fieldIndex );
390
 
3167 idir 391
    // Pouvoir supprimer une valeur
3171 idir 392
    onClickRemoveListValue( fieldIndex );
3167 idir 393
 
3171 idir 394
    valueIndex++;
395
  });
396
}
3167 idir 397
 
3171 idir 398
// Activer la checkbox de valeur par default uniquement si une valeur est entrée
399
function onInputListValueLabelEnableDefaultCheckbox( fieldIndex , valueIndex ) {
400
 
401
  $( '.new-field[data-id="' + fieldIndex + '"] .new-value[data-list-value-id="' + valueIndex + '"] .list-value' ).on( 'input' , function() {
402
    $( '.new-field[data-id="' + fieldIndex + '"] .is-defaut-value[data-list-value-id="' + valueIndex + '"]' ).removeAttr( 'disabled');
3167 idir 403
  });
404
}
405
 
3171 idir 406
// Dans une liste il ne peut y avoir qu'une valeur par défaut cochée
407
function onClickDefaultValueRemoveOthers( fieldIndex ) {
3167 idir 408
 
3171 idir 409
  $( '.new-field[data-id="' + fieldIndex + '"] .is-defaut-value' ).click( function() {
3168 idir 410
 
3171 idir 411
   if( $( this ).attr( 'checked' ) ) {
412
      $( '.new-field[data-id="' + fieldIndex + '"] .is-defaut-value:checked' ).not( $( this) ).removeAttr( 'checked' );
413
    }
414
 
3167 idir 415
  });
416
}
417
 
3171 idir 418
// Logique pour le bouton supprimer une valeur
419
function onClickRemoveListValue( fieldIndex ) {
3167 idir 420
 
3171 idir 421
  $('.new-field[data-id="' + fieldIndex + '"] .remove-value.button').click( function() {
422
    $( '.new-field[data-id="' + fieldIndex + '"] .new-value[data-list-value-id="' + $( this ).attr( 'data-list-value-id' ) + '"]' ).remove();
3167 idir 423
  });
424
}
425
 
426
 
3171 idir 427
/*********************************************
428
 *  Validation et envoi des nouveaux champs  *
429
 *********************************************/
3168 idir 430
 
3171 idir 431
function onClickStoreNewFields() {
3168 idir 432
 
3171 idir 433
  $( '#validate-new-fields' ).click( function() {
3168 idir 434
 
3171 idir 435
    var resultArrayIndex = 0;
436
    var count = 0;
3168 idir 437
 
3171 idir 438
    $( '.new-field' ).each( function () {
439
      if( $(this).attr('data-id') > count) {
440
        count = $(this).attr('data-id');
441
      }
442
    });
3168 idir 443
 
3171 idir 444
    for( var index = 0 ; index <= count ; index++ ) {
3168 idir 445
 
3171 idir 446
      if( $( '.new-field[data-id="' + index + '"]').length > 0 ) {
3168 idir 447
 
3171 idir 448
        // initialisation du tableau de résultats
449
        datasToSubmit[ resultArrayIndex ] = { fieldValues:{} };
3168 idir 450
 
3171 idir 451
        // Ajout de la clé au tableau de resultats
452
        datasToSubmit[ resultArrayIndex ].key = $( '.new-field[data-id="' + index + '"] .field-key' ).val();
3168 idir 453
 
3171 idir 454
        // Ajout de le nom au tableau de resultats
455
        datasToSubmit[ resultArrayIndex ].name = $( '.new-field[data-id="' + index + '"] .field-name' ).val();
3168 idir 456
 
3171 idir 457
        // Recueil de l'élément choisi pour le tableau de resultats
458
        datasToSubmit[ resultArrayIndex ].element = $( '.new-field[data-id="' + index + '"] .field-element' ).val();
3168 idir 459
 
3171 idir 460
        // Ajout de la valeur 'requis' ou non au tableau de resultats
461
        if( $( '.new-field[data-id="' + index + '"] .field-is_mandatory' ).attr( 'checked' ) ) {
462
          datasToSubmit[ resultArrayIndex ].mandatory = true;
463
        } else {
464
          datasToSubmit[ resultArrayIndex ].mandatory = false;
465
        }
3168 idir 466
 
3171 idir 467
        // Ajout de l'unité au tableau de resultats
468
        if ( $('.new-field[data-id="' + index + '"] .field-unit').val() ) {
469
          datasToSubmit[ resultArrayIndex ].unit = $('.new-field[data-id="' + index + '"] .field-unit').val();
470
        };
3168 idir 471
 
3171 idir 472
        // Ajout du tooltip au tableau de resultats
473
        if ( $('.new-field[data-id="' + index + '"] .field-description').val() ) {
474
          datasToSubmit[ resultArrayIndex ].description = $('.new-field[data-id="' + index + '"] .field-description').val();
475
        }
3168 idir 476
 
3171 idir 477
        // Ajout du nom du document d'aide au tableau de resultats
478
        if ( $('.file-return.help-doc-' + index ).text() ) {
479
          datasToSubmit[ resultArrayIndex ].help = $('.file-return.help-doc-' + index ).text();
480
        }
3168 idir 481
 
3171 idir 482
        // Collecte les des données dépendantes de l'élément choisi
483
        // sous forme d'un tableau de resultats
484
        onSelectCollectDataValuesToSubmit( datasToSubmit[ resultArrayIndex ] , index );
3173 idir 485
        if( $.isEmptyObject(datasToSubmit[ resultArrayIndex ].fieldValues) ){
3171 idir 486
          delete datasToSubmit[ resultArrayIndex ].fieldValues;
487
        }
3168 idir 488
 
3171 idir 489
        resultArrayIndex++;
490
      }
491
    }
3168 idir 492
 
3171 idir 493
    var resultsArrayJson = JSON.stringify( datasToSubmit );
494
 
495
    // Plus de nouvelle validation possible
496
    $( '#validate-new-fields' ).off( 'click' ).addClass('validated');
497
    $( '#add-fields' ).off( 'click' ).addClass('disabled');
498
    $('.validate-new-fields').text('Champs validés');
499
 
500
    $('#submit-button').before(
501
      '<input type="hidden" name="champs-supp" id="champs-supp" value=\'' + resultsArrayJson + '\'>'
502
    );
503
  });
504
 
505
}
506
 
507
// Renseigne le tableau de resultat
508
// pour les données dépendant de l'élément choisi
509
function onSelectCollectDataValuesToSubmit( datasToSubmitObject , index ) {
510
 
511
    switch( datasToSubmitObject.element ) {
512
 
513
      // case 'file' :
514
      // Rien à faire, pas de détails à transmettre
515
 
516
      case 'select':
517
      case 'checkbox':
518
      case 'list-checkbox':
519
      case 'radio':
520
 
3173 idir 521
        datasToSubmitObject.fieldValues.listValue = [];
3171 idir 522
 
523
        // Ajout des valeurs de liste
524
        onChangeStoreListValueLabel( datasToSubmitObject , index );
525
 
526
        // S'il y a une valeur 'autre' on l'indique à la fin de la liste
527
        if( $('.new-field[data-id="' + index + '"] .option-other-value').attr( 'checked' ) && datasToSubmitObject.fieldValues.listValue.indexOf( 'other' ) === -1 ) {
528
          datasToSubmitObject.fieldValues.listValue.push( 'other' );
529
        }
530
 
531
        break;
532
 
533
      case 'number':
534
      case 'range':
535
 
536
        // Placeholder
537
        if( $( '.new-field[data-id="' + index + '"] .aide-saisie' ).val() ) {
538
         datasToSubmitObject.fieldValues.placeholder = $( '.new-field[data-id="' + index + '"] .aide-saisie' ).val();
539
        }
540
 
541
        // Valeur par défaut
542
        if( $( '.new-field[data-id="' + index + '"] .default' ).val() ) {
543
          datasToSubmitObject.fieldValues.default = $( '.new-field[data-id="' + index + '"] .default' ).val();
544
        }
545
 
546
        // Incrémentation ( attribut step="" )
547
        if( $( '.new-field[data-id="' + index + '"] .step' ).val() ) {
548
          datasToSubmitObject.fieldValues.step = $( '.new-field[data-id="' + index + '"] .step' ).val();
549
        }
550
 
551
        // Min
552
        if( $( '.new-field[data-id="' + index + '"] .min' ).val() ) {
553
          datasToSubmitObject.fieldValues.min = $( '.new-field[data-id="' + index + '"] .min' ).val();
554
        }
555
 
556
        // Max
557
        if( $( '.new-field[data-id="' + index + '"] .max' ).val() ) {
558
          datasToSubmitObject.fieldValues.max = $( '.new-field[data-id="' + index + '"] .max' ).val();
559
        }
560
 
561
        break;
562
 
563
      case 'date':
564
 
565
        // Min
3173 idir 566
        datasToSubmitObject.fieldValues.min = $( '.new-field[data-id="' + index + '"] .min' ).val();
3171 idir 567
 
568
        // Max
3173 idir 569
        datasToSubmitObject.fieldValues.max = $( '.new-field[data-id="' + index + '"] .max' ).val();
3171 idir 570
 
571
        break;
572
 
573
      case 'email':
574
      case 'text':
575
      case 'textarea':
576
      default:
577
        // Placeholder
578
        if( $( '.new-field[data-id="' + index + '"] .aide-saisie' ).val() ) {
579
          datasToSubmitObject.fieldValues.placeholder = $( '.new-field[data-id="' + index + '"] .aide-saisie' ).val();
580
        }
581
 
582
        break;
583
    }
3173 idir 584
    return datasToSubmitObject;
3171 idir 585
}
586
 
587
// Ajout d'une valeur d'un élément liste (select, checkbox etc.)
588
// dans le tableau de resultats
589
function onChangeStoreListValueLabel( datasToSubmitObject , index ) {
590
 
591
  $( '.new-field[data-id="' + index + '"] .list-value' ).each( function() {
592
 
593
     if( $( this ).val() ){
594
      if( $( '.new-field[data-id="' + index + '"] .is-defaut-value[data-list-value-id="' + $( this ).attr('data-list-value-id') + '"]' ).attr( 'checked' ) ) {
595
        datasToSubmitObject.fieldValues.listValue.unshift( $( this ).val() );
596
      } else {
597
        datasToSubmitObject.fieldValues.listValue.push( $( this ).val() );
598
      }
599
    }
600
  });
601
}
602
 
603
 
3167 idir 604
/****************************************
605
 *  Fonctions pour afficher les images  *
606
 *  ou les nom de fichers importés      *
607
 ****************************************/
608
 
609
// Logique d'affichage pour le input type=file
610
function inputFile() {
611
 
612
  // initialisation des variables
613
  var $fileInput  = $( ".input-file" ),
614
      $button     = $( ".label-file" );
615
 
616
  // action lorsque la "barre d'espace" ou "Entrée" est pressée
617
  $button.on( 'keydown', function( event ) {
618
    if ( event.keyCode == 13 || event.keyCode == 32 ) {
619
      $fileInput.focus();
620
    }
621
  });
622
 
623
  // action lorsque le label est cliqué
3171 idir 624
  $button.click( function() {
3167 idir 625
    $fileInput.focus();
626
    return false;
627
  });
628
 
629
  // affiche un retour visuel dès que input:file change
630
  $fileInput.change( function( event ) {
631
    var file = event.target.files[0],
632
      $theReturn = $( '.' + $( this ).attr( 'id' ) );
633
 
634
    // affichage du nom du fichier
635
    $theReturn.text( file.name );
636
 
637
    // si le fichier est une image on l'affiche
638
    if( file.type.match( 'image' ) ) {
639
      // temporairement retrouver le chemin
640
      // de l'image qui a été chagée, pour affichage
641
      var tmppath = URL.createObjectURL( file );
642
      $theReturn.append( '<img src="' + tmppath + '" width="50%">' );
643
    }
644
  });
645
}