Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 3187 Rev 3188
Line 237... Line 237...
237
      case 'checkbox':
237
      case 'checkbox':
238
      case 'list-checkbox':
238
      case 'list-checkbox':
239
      case 'radio':
239
      case 'radio':
240
        displayFieldDetailsCollect(
240
        displayFieldDetailsCollect(
241
          fieldIndex,
241
          fieldIndex,
-
 
242
          '<p class="message element-message">' +
-
 
243
            '<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i> ' +
242
          '<p class="message">Ajoutez les valeurs de \"' + $( this ).children( 'option:selected' ).text() + '\"</p>'+
244
            'Entrez au moins une valeur de ' + $( this ).children( 'option:selected' ).text() +
-
 
245
          '</p>'+
-
 
246
          // Première option
-
 
247
          '<div class="new-value" data-list-value-id="' + valueIndex +'">'+
-
 
248
            // Recueil d'une valeur de la liste
-
 
249
            '<label for="list-value">Valeur *:</label>'+
-
 
250
            '<input type="text" name="list-value" data-id="' + fieldIndex + '" class="list-value" data-list-value-id="' + valueIndex +'" placeholder="Une des valeurs de la liste" required>'+
-
 
251
            // Checkbox valeur par défaut
-
 
252
            '<label for="is-defaut-value" title="Ceci est la valeur par défaut">Valeur par défaut</label>'+
-
 
253
            '<input type="checkbox" name="is-defaut-value" data-id="' + fieldIndex + '" class="is-defaut-value" title="entrez une valeur pour activer cette case" data-list-value-id="' + valueIndex +'" disabled >'+
-
 
254
          '</div>' +
243
          // Bouton ajout d'une valeur à la liste
255
          // Bouton ajout d'une valeur à la liste
244
          '<label for="add-value" class="add-value" data-id="' + fieldIndex + '" title="Ajouter une valeur à la liste">Ajouter une valeur</label>'+
256
          '<label for="add-value" class="add-value" data-id="' + fieldIndex + '" title="Ajouter une valeur à la liste">Ajouter une valeur</label>'+
245
          '<div class="button add-value-button" name="add-value" data-id="' + fieldIndex + '" title="Ajouter une valeur à la liste"><i class="fa fa-puzzle-piece" aria-hidden="true"></i></div>'+
257
          '<div class="button add-value-button" name="add-value" data-id="' + fieldIndex + '" title="Ajouter une valeur à la liste"><i class="fa fa-puzzle-piece" aria-hidden="true"></i></div>'+
246
          // checkbox ajouter une valeur "Autre:"
258
          // checkbox ajouter une valeur "Autre:"
247
          '<label for="option-other-value" title="Ajouter une option \'Autre:\' à la fin">Valeur "Autre"</label>'+
259
          '<label for="option-other-value" title="Ajouter une option \'Autre:\' à la fin">Valeur "Autre"</label>'+
Line 279... Line 291...
279
/**** Ajout des valeurs (options) des "champs de listes" (select, checkbox, radio, etc.) ****/
291
/**** Ajout des valeurs (options) des "champs de listes" (select, checkbox, radio, etc.) ****/
Line 280... Line 292...
280
 
292
 
281
// Ajout des options des listes (deroulantes, cases à cocher etc.)
293
// Ajout des options des listes (deroulantes, cases à cocher etc.)
282
function onClickAddNewValueToList( fieldIndex , valueIndex ) {
294
function onClickAddNewValueToList( fieldIndex , valueIndex ) {
-
 
295
  $( '.add-value-button[data-id="' + fieldIndex + '"]' ).click( function() {
283
  $( '.add-value-button[data-id="' + fieldIndex + '"]' ).click( function() {
296
    valueIndex++;
284
    $( '.add-value[data-id="' + fieldIndex + '"]' ).before(
297
    $( '.add-value[data-id="' + fieldIndex + '"]' ).before(
285
      '<div class="new-value" data-list-value-id="' + valueIndex +'">'+
298
      '<div class="new-value" data-list-value-id="' + valueIndex +'">'+
286
        // Recueil d'une valeur de la liste
299
        // Recueil d'une valeur de la liste
287
        '<label for="list-value">Valeur  *:</label>'+
300
        '<label for="list-value">Valeur  *:</label>'+
Line 305... Line 318...
305
    onInputListValueLabelEnableDefaultCheckbox( valueIndex );
318
    onInputListValueLabelEnableDefaultCheckbox( valueIndex );
306
    // Une seule valeur par défaut pour select et radio
319
    // Une seule valeur par défaut pour select et radio
307
    onClickDefaultValueRemoveOthers( fieldIndex );
320
    onClickDefaultValueRemoveOthers( fieldIndex );
308
    // Supprimer une valeur
321
    // Supprimer une valeur
309
    onClickRemoveListValue( fieldIndex );
322
    onClickRemoveListValue( fieldIndex );
310
 
-
 
311
    valueIndex++;
-
 
312
  });
323
  });
313
}
324
}
Line 314... Line 325...
314
 
325
 
315
// Activer la checkbox de valeur par default uniquement si une valeur est entrée
326
// Activer la checkbox de valeur par default uniquement si une valeur est entrée
Line 379... Line 390...
379
              // Le marqueur de valeur dupliquée passe à true
390
              // Le marqueur de valeur dupliquée passe à true
380
              notUnique = true;
391
              notUnique = true;
381
              if( 0 === $( '.invalid-field-key[data-id="' + index + '"]' ).length ) {
392
              if( 0 === $( '.invalid-field-key[data-id="' + index + '"]' ).length ) {
382
                // Le champ est signalé en rouge
393
                // Le champ est signalé en rouge
383
                // Un message d'alerte apparait sous le champ
394
                // Un message d'alerte apparait sous le champ
384
                thisFieldKey.addClass( 'invalid' );
395
                thisFieldKey.addClass( 'invalid-key' );
385
                thisFieldKey.after(
396
                thisFieldKey.after(
386
                  '<p class="message invalid-field-key" data-id="' + index + '">' +
397
                  '<p class="message invalid-field-key" data-id="' + index + '">' +
387
                    '<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i>' +
398
                    '<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i>' +
388
                    ' Vérifiez qu\'aucune clé n\'ait été utilisée plus d\'une fois'  +
399
                    ' Vérifiez qu\'aucune clé n\'ait été utilisée plus d\'une fois'  +
389
                  '</p>'
400
                  '</p>'
Line 402... Line 413...
402
              ' Une clé a été utilisée plusieurs fois' +
413
              ' Une clé a été utilisée plusieurs fois' +
403
            '</p>'
414
            '</p>'
404
          );
415
          );
405
        }
416
        }
406
        // Les boutons prévisualiser/valider sont désactivés et signalés en rouge
417
        // Les boutons prévisualiser/valider sont désactivés et signalés en rouge
407
        $( '#preview-field , #validate-new-fields' ).addClass( 'invalid' ).css( 'pointer-events', 'none' );
418
        $( '#preview-field , #validate-new-fields' ).addClass( 'invalid-key' ).css( 'pointer-events', 'none' );
408
      } else {// Si on est ok on retire toutes les alertes
419
      } else {// Si on est ok on retire toutes les alertes
409
        // signalements rouges
420
        // signalements rouges
410
        $( '.field-key' ).each( function() {
421
        $( '.field-key' ).each( function() {
411
          $( this ).removeClass( 'invalid' );
422
          $( this ).removeClass( 'invalid-key' );
412
        });
423
        });
413
        $( '#preview-field , #validate-new-fields' ).removeClass( 'invalid' );
424
        $( '#preview-field , #validate-new-fields' ).removeClass( 'invalid-key' );
414
        // messages d'alerte
425
        // messages d'alerte
415
        $( '.invalid-field-key' ).each( function() {
426
        $( '.invalid-field-key' ).each( function() {
416
          $( this ).hide( 200 , function () {
427
          $( this ).hide( 200 , function () {
417
            $( this ).remove();
428
            $( this ).remove();
418
          });
429
          });
Line 428... Line 439...
428
      notUnique = false;
439
      notUnique = false;
429
    });
440
    });
430
  }
441
  }
431
}
442
}
Line 432... Line 443...
432
 
443
 
433
//Activation/Désactivation des boutons valider/prévisualiser
444
// Activation/desactivation des champs valider/previsualiser
434
function activatePreviewAndValidateButtons() {
-
 
435
  var invalidElementInfos = false, // true si aucune option n'a été entrée pour un élément de liste (select, radio, etc.)
-
 
436
      invalidTextInfos    = false; // true si au moins un input required n'est pas renseigné
-
 
437
  // Clique sur le bouton prévisualiser ou valider
445
function onClickButtonsTagMissingValues() {
-
 
446
  $( '#preview-field , #validate-new-fields' ).on( 'click' , function() {
438
  $('#preview-field , #validate-new-fields').on( 'click' , function() {
447
    var $button = $( this );
439
    // S'il n'y a pas (plus) de bloc nouveau champ
448
    //S'il n'y a pas (plus) de bloc nouveau champ
440
    if( 0 === $( 'fieldset' ).length ) {
449
    if( 0 === $( 'fieldset' ).length ) {
441
      return;
450
      return;
442
    }
-
 
443
    var count = $( 'fieldset' ).last().attr('data-id');
-
 
444
    // si on a déjà des avertissements on les supprime
-
 
445
    if( 0 < $( '.validation-warning' ).length ) {
451
    }
446
      // Supprimer les messages
-
 
447
      $( '.validation-warning' ).each( function() {
-
 
448
        $( this ).hide( 200 , function () {
452
    // Classe "invalid"
449
          $( this ).remove();
-
 
450
        });
-
 
451
      });
-
 
452
      // Supprimer les bordures en rouge vif
-
 
453
      $('.add-value-button , input[required]' ).each( function() {
453
    missingValuesClass();
454
        $( this ).removeClass( 'invalid' );
-
 
455
      });
-
 
456
    }
-
 
457
    // Parcourir tous les blocs d'infos de champs supplémentaires
-
 
458
    for( var index = $( 'fieldset' ).first().attr('data-id') ; index <= count ; index++ ) {
-
 
459
      var thisFieldset = $( 'fieldset[data-id="' + index + '"]');
-
 
460
      // Certains indices peuvent correspondre à un champ supprimé
454
    if( !$( this ).hasClass( 'invalid' ) ) {
461
      if( 0 < $( thisFieldset ).length ) {
455
      if( $( this ).is( '#validate-new-fields') ) {
462
        var $fieldElement    = $( '.field-element' , thisFieldset ),
456
        // Lancement de l'enregistrement des valeurs à transmettre
463
            fieldElementVal  = $fieldElement.val(),
-
 
464
            isList           = ( // true si c'est un élément "liste"
457
        onClickStoreNewFields();
465
              fieldElementVal === 'list-checkbox' ||
-
 
466
              fieldElementVal === 'checkbox'      ||
-
 
467
              fieldElementVal === 'radio'         ||
458
      } else if( $( this ).is( '#preview-field') ) {
468
              fieldElementVal === 'select'
-
 
469
            );
-
 
470
        // Si aucune option n'a été créée pour un élément "liste"
-
 
471
        if( isList && 0 === $( '.list-value' , thisFieldset ).length ) {
459
        // Lancement de la prévisualisation
472
          invalidElementInfos = true;
-
 
473
          // Le bouton "Ajouter une valeur" est signalé en rouge
-
 
474
          $( '.add-value-button' , thisFieldset ).addClass( 'invalid' );
-
 
475
        }
460
        newFieldsPreview();
476
      }
461
      }
-
 
462
    }
477
    }
463
  });
-
 
464
  // Si un champ manquant est renseigné
-
 
465
  // ou on choisit nouvel élément liste (au moins une option)
478
    // Si au moins un champ "required" n'est pas rempli
466
  // Cette action doit être prise en compte dans la validation
479
    $( 'input[required]' , thisFieldset ).each( function() {
467
  $( '#new-fields' ).on( 'change' , '.invalid[type="text"] , .field-element' , function() {
-
 
468
    // S'il on a pas encore cliqué sur prévisualiser/valider
-
 
469
    // changer l'élément ne doit pas déclancher le signalement en rouge
480
      if( 0 === $( this ).val().length ) {
470
    if( $( this ).is( '.field-element' ) && !$( '#preview-field , #validate-new-fields' ).hasClass( 'invalid' ) ) {
-
 
471
      return;
481
        invalidTextInfos = true;
472
    } else {
482
        // Le champ est signalé en rouge
473
      // Classe "invalid"
483
        $( this ).addClass( 'invalid' );
474
      missingValuesClass();
484
      }
475
    }
-
 
476
  });
-
 
477
}
-
 
478
 
485
    });
479
 
486
    // Si la saisie est invalide
480
// Classe "invalid"
487
    if( invalidElementInfos ||  invalidTextInfos ) {
481
function missingValuesClass() {
488
      // Désactivation des boutons valider et prévisualiser
482
  // Si au moins un champ "required" n'est pas rempli
489
      $( '#preview-field , #validate-new-fields' ).addClass( 'invalid' );
-
 
490
      // Message pour les options des "listes"
483
  $( '#new-fields input[required]' ).each( function() {
491
      if( invalidElementInfos ) {
484
    if( 0 === $( this ).val().length ) {
492
        $( '#new-fields' ).after(
485
      // Le champ est signalé en rouge
493
          '<p class="validation-warning message">' +
-
 
494
            '<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i>' +
-
 
495
             '&nbsp;Vérifiez les boutons<br>"<i class="fa fa-puzzle-piece" aria-hidden="true" style="color:#4bbacb"></i>&nbsp;Ajouter une valeur" signalés en rouge:' +
-
 
496
             ' il faut au moins une valeur pour les éléments "menu déroulant", "boutons radio", "cases à cocher" ou "liste de cases à cocher", ' +
-
 
497
          '</p>'
-
 
498
        );
-
 
499
      }
486
      $( this ).addClass( 'invalid' );
500
      // Message pour les champs
487
      // Un message d'alerte apparait après le champ
501
      if( invalidTextInfos ) {
488
      if( 0 === $( this).next( '.validation-warning' ).length ) {
502
        $( '#new-fields' ).after(
489
        $( this).after(
503
          '<p class="validation-warning message">' +
490
          '<p class="validation-warning message">' +
504
            '<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i>' +
-
 
505
             '&nbsp;Des informations sont manquantes pour certains champs,' +
491
            '<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i>' +
506
             ' vérifiez ceux signalés en rouge' +
492
             '&nbsp;Ce champ est requis' +
507
          '</p>'
493
          '</p>'
508
        );
494
        );
509
      }
495
      }
510
    } else {
496
    } else {
511
      $( '#preview-field , #validate-new-fields' ).removeClass( 'invalid' );
497
      // Le champ est signalé en rouge
512
      if( $( this ).is( '#validate-new-fields') ) {
498
      $( this ).removeClass( 'invalid' );
513
        // Lancement de l'enregistrement des valeurs à transmettre
499
      // Le message d'alerte du champ est supprimé
514
        onClickStoreNewFields();
500
      if( 0 < $( this).next( '.validation-warning' ).length ) {
515
      } else if( $( this ).is( '#preview-field') ) {
501
        $( this ).next( '.validation-warning' ).hide( 200 , function () {
516
        // Lancement de la prévisualisation
502
          $( this ).remove();
517
        newFieldsPreview();
503
        });
518
      }
504
      }
519
    }
-
 
520
    // Réinitialisation des drapeaux de saisie invalide
-
 
521
    invalidElementInfos = false;
-
 
522
    invalidTextInfos    = false;
505
    }
-
 
506
  });
-
 
507
  // Si on a des champs à compléter
-
 
508
  if( 0 < $( '.invalid[type="text"]' ).length ) {
-
 
509
    // Les boutons sont signalés en rouge
-
 
510
    $( '#preview-field , #validate-new-fields' ).addClass( 'invalid' );
-
 
511
    // Un message d'alerte apparait avant les boutons
-
 
512
    if( 0 === $( '#new-fields' ).next( '.validation-warning' ).length ) {
-
 
513
      $( '#new-fields' ).after(
-
 
514
        '<p class="validation-warning message">' +
-
 
515
          '<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i>' +
-
 
516
           '&nbsp;Des informations sont manquantes pour certains champs,' +
-
 
517
           ' vérifiez ceux signalés en rouge' +
-
 
518
        '</p>'
-
 
519
      );
-
 
520
    }
-
 
521
  } else {
-
 
522
    // Les signalements et messages sont supprimés
-
 
523
    $( '#preview-field , #validate-new-fields' ).removeClass( 'invalid' );
-
 
524
    $( '#new-fields' ).next( '.validation-warning' ).hide( 200 , function () {
-
 
525
        $( this ).remove();
-
 
526
    });
523
  });
527
  }
Line 524... Line 528...
524
}
528
}
525
 
529
 
526
// Enregistrement des valeurs à transmettre
530
// Enregistrement des valeurs à transmettre
Line 539... Line 543...
539
  // dans ce cas intégrer dans le formulaire à soumettre un bloc
543
  // dans ce cas intégrer dans le formulaire à soumettre un bloc
540
  // qui contiendra une copie de chacun de ces input[type="file"]
544
  // qui contiendra une copie de chacun de ces input[type="file"]
541
  if( helpFileExists ){
545
  if( helpFileExists ){
542
    $('#submit-button').before( '<div id="help-doc-submit" class="hidden"></div>' );
546
    $('#submit-button').before( '<div id="help-doc-submit" class="hidden"></div>' );
543
  }
547
  }
544
 
-
 
545
  // On déroule les blocs de champs supplémentaires
548
  // On déroule les blocs de champs supplémentaires
546
  for( var index = $( 'fieldset' ).first().attr('data-id') ; index <= count ; index++ ) {
549
  for( var index = $( 'fieldset' ).first().attr('data-id') ; index <= count ; index++ ) {
547
    var thisFieldset = $( 'fieldset[data-id="' + index + '"]');
550
    var thisFieldset = $( 'fieldset[data-id="' + index + '"]');
548
    // Certains indices peuvent correspondre à un champ supprimé
551
    // Certains indices peuvent correspondre à un champ supprimé
549
    if( 0 < $( thisFieldset ).length ) {
552
    if( 0 < $( thisFieldset ).length ) {
Line 1500... Line 1503...
1500
  // Identifiant de champ
1503
  // Identifiant de champ
1501
  var fieldIndex = 0;
1504
  var fieldIndex = 0;
1502
  // Ajout de nouveaux champs
1505
  // Ajout de nouveaux champs
1503
  onClickAddNewFields( fieldIndex );
1506
  onClickAddNewFields( fieldIndex );
1504
  // Activation/Desactivation des boutons valider et prévisualiser
1507
  // Activation/Desactivation des boutons valider et prévisualiser
1505
  activatePreviewAndValidateButtons();
1508
  onClickButtonsTagMissingValues();
1506
  // Prévisualisation des champs classiques
1509
  // Prévisualisation des champs classiques
1507
  DisplayClassicFields();
1510
  DisplayClassicFields();
1508
  // Affichage des images ou nom des documents importés
1511
  // Affichage des images ou nom des documents importés
1509
  inputFile();
1512
  inputFile();
1510
  // Affichage des List-checkbox
1513
  // Affichage des List-checkbox