Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 3173 → Rev 3174

/trunk/widget/modules/manager/squelettes/js/manager.js
1,27 → 1,68
"use strict";
 
// déclaration du tableau d'envoi des données?
var datasToSubmit = new Array();
var listvalue = new Array();
/*************************************
* Fonctions de Style et Affichage *
* des éléments "spéciaux" *
*************************************/
 
/***************************
* Lancement des scripts *
***************************/
// Logique d'affichage pour le input type=file
function inputFile() {
// Initialisation des variables
var $fileInput = $( '.input-file' ),
$button = $( '.label-file' ),
thisId = '';
// Action lorsque la "barre d'espace" ou "Entrée" est pressée
$( '.label-file' ).keydown( function( event ) {
if ( event.keyCode == 13 || event.keyCode == 32 ) {
$( '#' + $( this ).attr( 'for' ) + '.input-file' ).focus();
}
});
// Action lorsque le label est cliqué
$( '.label-file' ).click( function(event) {
$( '#' + $( this ).attr( 'for' ) + '.input-file' ).focus();
return false;
});
// Affiche un retour visuel dès que input:file change
$fileInput.change( function( event ) {
// Il est possible de supprimer un fichier
// donc on vérifie que le 'change' est un ajout ou modification
if( !$.isEmptyObject( event.target.files[0] ) ) {
var file = event.target.files[0],
$theReturn = $( '.' + $( this ).attr( 'id' ) );
// Affichage du nom du fichier
$theReturn.text( file.name );
// Si le fichier est une image on l'affiche
if( file.type.match( 'image' ) ) {
// Chemin temporaire de l'image et affichage
var tmppath = URL.createObjectURL( file );
$theReturn.removeClass( 'hidden' ).append( '<img src="' + tmppath + '" width="50%">' );
}
}
});
// Annuler le téléchargement
$( '.remove-file' ).click( function() {
var $thisFileInput = $( this ).prev( '.input-file-container' ).find( '.input-file' );
$thisFileInput.wrap( '<form>' ).closest( 'form' ).get(0).reset();
$thisFileInput.triggerHandler( 'change' );
$thisFileInput.unwrap();
$( this ).next( '.file-return' ).addClass( 'hidden' ).empty();
});
}
 
jQuery( document ).ready( function() {
// Style et affichage des list-checkboxes
function inputListCheckbox() {
// On écoute le click sur une list-checkbox ('.selectBox')
// à tout moment de son insertion dans le dom
$('#zone-appli').on( 'click' , '.selectBox' , function() {
$( '.checkboxes[data-id="' + $(this).attr( 'data-id' ) + '"]' ).toggleClass( 'hidden' );
});
}
 
// Identifiant de champ
var fieldIndex = 0;
// Mettre la première lettre en majuscule, les autres en minuscule
function capitalize( string ) {
return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
}
 
 
// Ajout de nouveaux champs
onClickAddNewFields( fieldIndex );
 
// Affichage des images ou nom des documents importés
inputFile();
 
});
 
/***********************************************************
* Fonctions pour la création des champs supplémentaires *
***********************************************************/
28,59 → 69,16
 
// Logique globale pour l'ajout de nouveaux champs
function onClickAddNewFields( fieldIndex ) {
 
// Drapeaux d'activation du bouton valider
var nameFlag = false,
keyFlag = false;
 
// Bouton ajouter un champ
$( '#add-fields' ).click( function() {
 
// Réactiver le bouton valider les champs supplémentaires :
nameFlag = false;
keyFlag = false;
 
// Ajout d'un nouveau champ
// Affichage du formulaire pour un champ
displayNewField( fieldIndex );
 
// Désactivation du bouton valider
onflagEnableValidateNewFieldsButton( keyFlag , nameFlag );
 
// Test lorsque le nom du nouveau champ est renseigné
$('.new-field .field-name').change( function() {
 
nameFlag = true;
 
// Vérification de name pour tous les nouveaux champs
nameFlag = filledFieldFlag( $('.new-field .field-name') , nameFlag );
 
// Activation du bouton valider
onflagEnableValidateNewFieldsButton( keyFlag , nameFlag );
 
});
 
// Test lorsque la clé du nouveau champ est renseignée
$('.new-field .field-key').change( function() {
 
keyFlag = true;
 
// Vérification de key pour tous les nouveaux champs
keyFlag = filledFieldFlag( $('.new-field .field-key') , keyFlag );
 
// Activation du bouton valider
onflagEnableValidateNewFieldsButton( keyFlag , nameFlag );
 
});
 
// Nom du champ affichage titre du champ
// Affichage du nom du champ
onChangeDisplayFieldLabel( fieldIndex );
 
// Les images ou les nom des documents importés doivent aussi
// s'afficher dans les champs ajoutés
inputFile( fieldIndex );
 
// En fonction du type de champ choisi on demande les informations correspondantes
// Affichage des images/nom des documents importés dans les champs ajoutés
inputFile();
// Recueil des informations correspondantes au nouveau champ
onChangeFieldTypeCollectDetails( fieldIndex );
 
// Suppression d'un champ
onClickRemoveField();
 
88,213 → 86,140
});
}
 
// Création et logique pour un nouveau champ
// Un peu d'animation de l'affichage d'un nouveau champ
// Création/affichage du formulaire d'un nouveau champ
function displayNewField( fieldIndex ) {
 
// Le html des nouveaux champs inséré dans le dom
// Html du formulaire du nouveaux champs inséré dans le dom
$( '#new-fields' ).append(
'<div data-id="' + fieldIndex + '" class="new-field">'+
'<h3>Nouveau champ :<br><strong class="field-title"></strong></h3>'+
 
'<fieldset data-id="' + fieldIndex + '" class="new-field">'+
'<h3>Nouveau champ :<br><strong class="field-title" data-id="' + fieldIndex + '"></strong></h3>'+
// Nom du champ
'<label for="field-name" title="Donnez titre à votre champ">Nom du champ</label>'+
'<input type="text" name="field-name" class="field-name" placeholder="Donnez titre à votre champ" required>'+
 
'<label for="field-name" title="Donnez un titre à votre champ">Nom du champ *</label>'+
'<input type="text" name="field-name" data-id="' + fieldIndex + '" class="field-name" placeholder="Titre de votre champ" title="Donnez un titre à votre champ" required>'+
// Clé du champ
'<label for="field-key" title="Clé du champ (son nom dans la base de données)">'+
'<label for="field-key" title="Nom du champ dans la base de données">'+
'Clé du champ en camelCase (ecritureChameau)<br>'+
'<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i> '+
'Pas d\'accents ou de cédille, pas de caractères spéciaux.'+
'Pas d\'accents ou de cédille, pas de caractères spéciaux. *'+
'</label>'+
'<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)">'+
 
'<input type="text" name="field-key" data-id="' + fieldIndex + '" class="field-key" placeholder="Clé du champ" title="Nom du champ dans la base de données" required>'+
// Type de champ
'<label for="field-element" title="Quel type de champ">Type de champ</label>'+
'<div class="select-wrapper add-field-select">'+
'<select name="field-element" class="field-element">'+
'<option value="text" selected="selected">Champ texte</option>'+
'<label for="field-element" title="Quel type de champ">Type de champ *</label>'+
'<div class="select-wrapper add-field-select" data-id="' + fieldIndex + '">'+
'<select name="field-element" data-id="' + fieldIndex + '" class="field-element">'+
'<option value="text">Champ texte</option>'+
'<option value="email">Champ email</option>'+
'<option value="textarea">Champ rédaction</option>'+
'<option value="select">Menu déroulant</option>'+
'<option value="checkbox">Cases à cocher</option>'+
'<option value="list-checkbox">liste Cases à cocher</option>'+
'<option value="list-checkbox">Liste de cases à cocher</option>'+
'<option value="radio">Boutons radio</option>'+
'<option value="date">Calendrier</option>'+
'<option value="file">Téléchargement</option>'+
'<option value="range">Curseur (curseur entre 2 bornes)</option>'+
'<option value="range">Curseur (entre 2 bornes)</option>'+
'<option value="number">Nombre</option>'+
'</select>'+
'</div>'+
 
// Checkbox "champ requis"
'<label for="field-is_mandatory" title="Ce champ est obligatoire">Champ requis ?</label>'+
'<input type="checkbox" name="field-is_mandatory" class="field-is_mandatory">'+
 
'<input type="checkbox" name="field-is_mandatory" data-id="' + fieldIndex + '" class="field-is_mandatory">'+
// Unité des valeurs
'<label for="field-unit" title="Unité de mesure de vos valeurs">Unités ( cm, kg, ha, etc.)</label>'+
'<input type="text" name="field-unit" class="field-unit" placeholder="symbole de vos unités">'+
 
'<input type="text" name="field-unit" data-id="' + fieldIndex + '" class="field-unit" placeholder="symbole de vos unités">'+
// Tooltip
'<label for="field-description" title="Ajoutez une info-bulle">Info-bulle</label>'+
'<input type="text" name="field-description" class="field-description" placeholder="Quelques mots">'+
 
'<input type="text" name="field-description" data-id="' + fieldIndex + '" class="field-description" placeholder="Quelques mots">'+
// Import d'une image ou d'un pdf d'aide à afficher en popup
'<div class="input-file-container">'+
'<input type="file" class="input-file field-help" name="field-help" id="help-doc-' + fieldIndex + '" accept="application/pdf, image/*, video/*">'+
'<label for="field-help" class="label-file"><i class="fas fa-download"></i>Image ou pdf d\'aide (popup)</label>'+
'<input type="file" class="input-file field-help" name="field-help" data-id="' + fieldIndex + '" id="help-doc-' + fieldIndex + '" accept="application/pdf, image/*, video/*">'+
'<label for="field-help" class="label-file"><i class="fas fa-download"></i> Popup aide image/pdf</label>'+
'</div>'+
'<div class="file-return help-doc-' + fieldIndex + '"></div>'+
 
'<label for="remove-field">Supprimer ce champ</label>'+
'<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>'+
 
'</div>'+
 
'</div>'
'<div class="remove-file button" name="remove-file" data-id="' + fieldIndex + '" title="Supprimer le fichier"><i class="fas fa-times" aria-hidden="true"></i></div>'+
'<div class="file-return help-doc-' + fieldIndex + ' hidden"></div>'+
// Boutons supprimer
'<label for="remove-field">Supprimer</label>'+
'<div class="remove-field button" name="remove-field" data-id="' + fieldIndex + '" title="Supprimer un champ"><i class="fa fa-skull" aria-hidden="true"></i></div>'+
'</fieldset>'
);
 
// Animation de l'affichage
$( '.new-field[data-id="' + fieldIndex + '"]').hide().removeClass( 'hidden' ).show( 200 );
$( 'fieldset.new-field[data-id="' + fieldIndex + '"]').hide().show( 200 );
}
 
// Affichage du nom du champ dès qu'il est renseigné
function onChangeDisplayFieldLabel( fieldIndex ) {
 
$('.new-field[data-id="' + fieldIndex + '"] .field-name').change( function() {
$( '.new-field[data-id="' + fieldIndex + '"] .field-title' ).text( $( this ).val() );
$('.field-name[data-id="' + fieldIndex + '"]').change( function() {
$( '.field-title[data-id="' + fieldIndex + '"]' ).text( $( this ).val() );
});
}
 
// Supprimer tout un champ
function onClickRemoveField (keyFlag , nameFlag) {
 
$( '.remove-field.button' ).click( function() {
 
keyFlag = true ,
nameFlag = true ;
 
$( '.new-field[data-id="' + $( this ).attr( 'data-id' ) + '"]' ).remove();
 
// Vérification de name pour tous les nouveaux champs
nameFlag = filledFieldFlag( $('.new-field .field-name') , nameFlag );
 
// Vérification de name pour tous les nouveaux champs
keyFlag = filledFieldFlag( $('.new-field .field-key') , keyFlag );
 
// Activation du bouton valider
onflagEnableValidateNewFieldsButton( keyFlag , nameFlag );
// Supprimer un nouveau champ
function onClickRemoveField ( keyFlag , nameFlag ) {
$( '.remove-field' ).click( function() {
$(this).closest('fieldset').hide( 200 , function () {
$(this).remove();
});
});
}
 
// Vérification de key ou name pour tous les nouveaux champs
function filledFieldFlag( $field , flag) {
 
if( $field.length === 0 ) {
return flag = false;
}
 
// Vérification de name pour tous les nouveaux champs
$field.each( function() {
if( $( this ).val() === '' ) {
flag = false;
}
});
return flag;
}
 
// Activation du bouton valider les champs supplémentaires
function onflagEnableValidateNewFieldsButton( keyFlag , nameFlag ) {
 
// Activation du bouton valider
if( keyFlag && keyFlag ) {
onClickStoreNewFields();
$( '#validate-new-fields' ).removeClass('disabled');
} else {
$( '#validate-new-fields' ).off( 'click' ).addClass('disabled');
}
}
 
/**** Recueil des informations et détails qui dépendent du type de champ choisi ****/
 
// Logique de recueil d'informations en fonction du type de champ choisi
function onChangeFieldTypeCollectDetails( fieldIndex ) {
 
var today = new Date();
var tomorrow = new Date();
var todayMonth = ( today.getMonth() + 1 ).toString();
var tomorrowMonth = ( tomorrow.getMonth() + 1 ).toString();
if((today.getMonth() + 1) < 10) {
todayMonth = '0' + todayMonth;
}
if((tomorrow.getMonth() + 1) < 10) {
tomorrowMonth = '0' + tomorrowMonth;
}
 
today = today.getFullYear() + '-' + todayMonth + '-' + today.getDate();
tomorrow = tomorrow.getFullYear() + '-' + tomorrowMonth + '-' + ( tomorrow.getDate() + 1 );
 
var fieldDetails =
// On insère les champs par défaut de recueil d'informations
displayFieldDetailsCollect(
fieldIndex,
// Placeholder (champ type text par défaut)
'<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>'+
'<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">';
// On insère les champs par défaut de recueil d'informations
displayFieldDetailsCollect( fieldIndex , fieldDetails );
 
'<input type="text" name="aide-saisie" data-id="' + fieldIndex + '" class="aide-saisie" placeholder="Ce que doit contenir le champ">'
);
// Sinon :
$( '.new-field[data-id="' + fieldIndex + '"] .field-element' ).change( function() {
 
$( '.field-element[data-id="' + fieldIndex + '"]' ).change( function() {
// On intialise l'index pour les listes la variable qui contiendra un id pour chaque option
var valueIndex = 0;
 
// Si on hésite on qu'on se trompe dans la liste :
// les champs de détails de l'option précédente doivent être supprimés
$( '.new-field[data-id="' + fieldIndex + '"] .field-details' ).remove();
$( '.field-details[data-id="' + fieldIndex + '"]' ).hide( 200 , function () {
$(this).remove();
});
 
// $( this ).val() = le type de champ choisi dans select ".field-element"
// Html de recueil de données en fonction de l'élément choisi
switch( $( this ).val() ) {
 
case 'file':
fieldDetails = '';
break;
 
case 'number':
case 'range':
fieldDetails =
displayFieldDetailsCollect(
fieldIndex,
'<p class="message"><i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i> Ne pas oublier de changer, si nécessaire, les valeurs step, min et max</p>' +
// Placeholder
'<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>'+
'<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">'+
 
'<input type="text" name="aide-saisie" data-id="' + fieldIndex + '" class="aide-saisie" placeholder="Ce que doit contenir le champ">'+
// Valeur par défaut
'<label for="default" title="Valeur par défaut">Valeur par défaut</label>'+
'<input type="number" name="default" class="default" step="0.01">'+
 
'<input type="number" name="default" data-id="' + fieldIndex + '" class="default" step="0.01">'+
// Incrémentation ( attribut step="" )
'<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>'+
'<input type="number" name="step" class="step" step="0.01">'+
 
'<label for="step" title="De 10 en 10, de 0.5 en 0.5, etc.">Incrémentation (step) :<br>defaut = +1</label>'+
'<input type="number" name="step" data-id="' + fieldIndex + '" class="step" step="0.01" value="1">'+
// Min
'<label for="min" title="valeur min">Valeur minimale</label>'+
'<input type="number" name="min" class="min" step="0.01">'+
 
'<input type="number" name="min" data-id="' + fieldIndex + '" class="min" step="0.01" value="0">'+
// Max
'<label for="max" title="valeur max">Valeur maximale</label>'+
'<input type="number" name="max" class="max" step="0.01">'+
'<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>';
 
'<input type="number" name="max" data-id="' + fieldIndex + '" class="max" step="0.01" value="1">'
);
break;
 
case 'date':
 
fieldDetails =
displayFieldDetailsCollect(
fieldIndex,
// Date min
'<label for="min" title="valeur min">Valeur minimale</label>'+
'<input type="date" name="min" class="min" value="' + today + '">'+
 
'<label for="min" title="date min">Date minimale</label>'+
'<input type="date" name="min" data-id="' + fieldIndex + '" class="min">'+
// Date max
'<label for="max" title="valeur max">Valeur maximale</label>'+
'<input type="date" name="max" class="max" value="' + tomorrow + '">';
 
'<label for="max" title="date max">Date maximale</label>'+
'<input type="date" name="max" data-id="' + fieldIndex + '" class="max">'
);
break;
 
case 'select':
301,94 → 226,75
case 'checkbox':
case 'list-checkbox':
case 'radio':
 
fieldDetails =
displayFieldDetailsCollect(
fieldIndex,
'<p class="message">Ajoutez les valeurs de \"' + $( this ).children( 'option:selected' ).text() + '\"</p>'+
 
// Bouton ajout d'une valeur à la liste
'<label for="add-value" class="add-value" title="Ajouter une valeur à la liste">Ajouter une valeur</label>'+
'<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>'+
 
'<label for="add-value" class="add-value" data-id="' + fieldIndex + '" title="Ajouter une valeur à la liste">Ajouter une valeur</label>'+
'<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>'+
// checkbox ajouter une valeur "Autre:"
'<label for="option-other-value" title="Ajouter une option \'Autre:\' à la fin">Valeur "Autre"</label>'+
'<input type="checkbox" class="option-other-value" name="option-other-value" title="Ajouter une option \'Autre\' à la fin">';
 
'<input type="checkbox" name="option-other-value" data-id="' + fieldIndex + '" class="option-other-value" title="Ajouter une option \'Autre\' à la fin">'
);
break;
 
 
case 'email':
case 'text':
case 'textarea':
default:
 
fieldDetails =
displayFieldDetailsCollect(
fieldIndex,
// Placeholder
'<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>'+
'<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">';
 
'<input type="text" name="aide-saisie" data-id="' + fieldIndex + '" class="aide-saisie" placeholder="Ce que doit contenir le champ">'
);
break;
}
 
if( fieldDetails.length > 0 ) {
//ne pas ajouer une div vide s'il n'y pas d'informations à demander
displayFieldDetailsCollect( fieldIndex , fieldDetails );
}
 
// Ajout des valeurs possibles
// lorsque le champ est une liste ou case à cocher
onClickAddNewValueToList( fieldIndex , valueIndex );
 
});
}
 
// Insertion dans le dom des champs de recueil d'informations
function displayFieldDetailsCollect( fieldIndex , fieldDetails ) {
$( '.new-field[data-id="' + fieldIndex + '"] .add-field-select' ).after( '<div class="field-details">' + fieldDetails + '</div>' );
$( '.add-field-select[data-id="' + fieldIndex + '"]' ).after(
'<div class="field-details" data-id="' + fieldIndex + '">' +
fieldDetails +
'</div>'
).hide().show( 200);
}
 
/**** Ajout des valeurs (options) des "champs de listes" (select, checkbox, radio, etc.) ****/
 
// Logique d'ajout des options des listes (deroulantes, cases à cocher etc.)
// Ajout des options des listes (deroulantes, cases à cocher etc.)
function onClickAddNewValueToList( fieldIndex , valueIndex ) {
 
$( '.new-field[data-id="' + fieldIndex + '"] .add-value-button' ).click( function() {
 
$( '.new-field[data-id="' + fieldIndex + '"] .add-value' ).before(
$( '.add-value-button[data-id="' + fieldIndex + '"]' ).click( function() {
$( '.add-value[data-id="' + fieldIndex + '"]' ).before(
'<div class="new-value" data-list-value-id="' + valueIndex +'">'+
 
// Recueil d'une valeur de la liste
'<label for="list-value">Valeur:</label>'+
'<input type="text" name="list-value" class="list-value" data-list-value-id="' + valueIndex +'" placeholder="Une des valeurs de la liste">'+
 
'<label for="list-value">Valeur *:</label>'+
'<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>'+
// Checkbox valeur par défaut+bouton supprimer
'<div class="row">'+
 
'<div class="col-md-5">'+
 
// Checkbox "valeur par défaut" de la liste
// Valeur par défaut
'<label for="is-defaut-value" title="Ceci est la valeur par défaut">Valeur par défaut</label>'+
'<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 >'+
'<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 >'+
'</div>'+
 
'<div class="col-md-5">'+
 
// Bouton "supprimer la valeur" de la liste
'<label for="remove-value">Supprimer valeur</label>'+
'<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>'+
 
// Bouton supprimer une option
'<label for="remove-value">supprimer valeur</label>'+
'<div class="remove-value button" name="remove-value" data-id="' + fieldIndex + '" data-list-value-id="' + valueIndex + '" title="Supprimer une valeur"><i class="fa fa-trash" aria-hidden="true"></i></div>'+
'</div>'+
 
'</div>'+
'</div>'
);
 
).hide().show( 200);
// Activer la checkbox de valeur par default uniquement si une valeur est entrée
onInputListValueLabelEnableDefaultCheckbox( fieldIndex , valueIndex );
 
// attribuer la valeur par défaut d'un liste
// et retirer l'ancienne s'il y en avait une
onInputListValueLabelEnableDefaultCheckbox( valueIndex );
// Une seule valeur par défaut pour select et radio
onClickDefaultValueRemoveOthers( fieldIndex );
 
// Pouvoir supprimer une valeur
// Supprimer une valeur
onClickRemoveListValue( fieldIndex );
 
valueIndex++;
396,178 → 302,270
}
 
// Activer la checkbox de valeur par default uniquement si une valeur est entrée
function onInputListValueLabelEnableDefaultCheckbox( fieldIndex , valueIndex ) {
 
$( '.new-field[data-id="' + fieldIndex + '"] .new-value[data-list-value-id="' + valueIndex + '"] .list-value' ).on( 'input' , function() {
$( '.new-field[data-id="' + fieldIndex + '"] .is-defaut-value[data-list-value-id="' + valueIndex + '"]' ).removeAttr( 'disabled');
function onInputListValueLabelEnableDefaultCheckbox( valueIndex ) {
$( '.new-value[data-list-value-id="' + valueIndex + '"] .list-value' ).on( 'input' , function() {
if( $(this).val() !== '' ) {
$( '.is-defaut-value[data-list-value-id="' + valueIndex + '"]' ).removeAttr( 'disabled');
} else {
$( '.is-defaut-value[data-list-value-id="' + valueIndex + '"]' ).attr( 'disabled', true ).removeAttr( 'checked' );
}
});
}
 
// Dans une liste il ne peut y avoir qu'une valeur par défaut cochée
// Pour les éléments "select" et "radio" il ne peut y avoir qu'une valeur par défaut cochée
function onClickDefaultValueRemoveOthers( fieldIndex ) {
var selectedFieldElement = $( '.field-element[data-id="' + fieldIndex + '"]' ).val();
 
$( '.new-field[data-id="' + fieldIndex + '"] .is-defaut-value' ).click( function() {
 
if( $( this ).attr( 'checked' ) ) {
$( '.new-field[data-id="' + fieldIndex + '"] .is-defaut-value:checked' ).not( $( this) ).removeAttr( 'checked' );
}
 
});
if( selectedFieldElement === 'select' || selectedFieldElement === 'radio' ) {
$( '.is-defaut-value[data-id="' + fieldIndex + '"]' ).click( function() {
if( $( this ).attr( 'checked' ) ) {
// Décocher tous les autres
$( '.is-defaut-value[data-id="' + fieldIndex + '"]:checked' ).not( $( this) ).removeAttr( 'checked' );
}
});
}
}
 
// Logique pour le bouton supprimer une valeur
// Bouton supprimer une valeur
function onClickRemoveListValue( fieldIndex ) {
 
$('.new-field[data-id="' + fieldIndex + '"] .remove-value.button').click( function() {
$( '.new-field[data-id="' + fieldIndex + '"] .new-value[data-list-value-id="' + $( this ).attr( 'data-list-value-id' ) + '"]' ).remove();
$( '.remove-value.button[data-id="' + fieldIndex + '"]' ).click( function() {
$( '.new-value[data-list-value-id="' + $( this ).attr( 'data-list-value-id' ) + '"]' ).hide( 200 , function () {
$(this).remove();
});
});
}
 
 
/*********************************************
* Validation et envoi des nouveaux champs *
*********************************************/
 
function onClickStoreNewFields() {
 
$( '#validate-new-fields' ).click( function() {
 
var resultArrayIndex = 0;
var count = 0;
 
$( '.new-field' ).each( function () {
if( $(this).attr('data-id') > count) {
count = $(this).attr('data-id');
//Activation/Désactivation des boutons valider/prévisualiser
function activatePreviewAndValidateButtons() {
var invalidElementInfos = false, // true si aucune option n'a été entrée pour un élément de liste (select, radio, etc.)
invalidTextInfos = false; // true si au moins un input required n'est pas renseigné
// Clique sur le bouton prévisualiser ou valider
$('#preview-field , #validate-new-fields').on( 'click' , function() {
// S'il n'y a pas (plus) de bloc nouveau champ
if( 0 === $( 'fieldset' ).length ) {
return;
}
var count = $( 'fieldset' ).last().attr('data-id');
// si on a déjà des avertissements on les supprime
if( 0 < $( '.validation-warning' ).length ) {
// Supprimer les messages
$( '.validation-warning' ).each( function() {
$( this ).hide( 200 , function () {
$( this ).remove();
});
});
// Supprimer les bordures en rouge vif
$('.add-value-button , input[required]' ).each( function() {
$( this ).removeClass( 'invalid' );
});
}
// Parcourir tous les blocs d'infos de champs supplémentaires
for( var index = $( 'fieldset' ).first().attr('data-id') ; index <= count ; index++ ) {
var thisFieldset = $( 'fieldset[data-id="' + index + '"]');
// Certains indices peuvent correspondre à un champ supprimé
if( 0 < $( thisFieldset ).length ) {
var $fieldElement = $( '.field-element' , thisFieldset ),
fieldElementVal = $fieldElement.val(),
isList = ( // true si c'est un élément "liste"
fieldElementVal === 'list-checkbox' ||
fieldElementVal === 'checkbox' ||
fieldElementVal === 'radio' ||
fieldElementVal === 'select'
);
// Si aucune option n'a été créée pour un élément "liste"
if( isList && 0 === $( '.list-value' , thisFieldset ).length ) {
invalidElementInfos = true;
// Le bouton "Ajouter une valeur" est signalé en rouge
$( '.add-value-button' , thisFieldset ).addClass( 'invalid' );
}
}
}
// Si au moins un champ "required" n'est pas rempli
$( 'input[required]' , thisFieldset ).each( function() {
if( 0 === $( this ).val().length ) {
invalidTextInfos = true;
// Le champ est signalé en rouge
$( this ).addClass( 'invalid' );
}
});
// Si la saisie est invalide
if( invalidElementInfos || invalidTextInfos ) {
// Désactivation des boutons valider et prévisualiser
$( '#preview-field , #validate-new-fields' ).addClass( 'invalid' );
// Message pour les options des "listes"
if( invalidElementInfos ) {
$( '#new-fields' ).append(
'<p class="validation-warning message">' +
'<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i>' +
'&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:' +
' il faut au moins une valeur pour les éléments "menu déroulant", "boutons radio", "cases à cocher" ou "liste de cases à cocher", ' +
'</p>'
);
}
// Message pour les champs
if( invalidTextInfos ) {
$( '#new-fields' ).append(
'<p class="validation-warning message">' +
'<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i>' +
'&nbsp;Des informations sont manquantes pour certains champs,' +
' vérifiez ceux signalés en rouge' +
'</p>'
);
}
} else {
$( '#preview-field , #validate-new-fields' ).removeClass( 'invalid' );
if( $( this ).is( '#validate-new-fields') ) {
// Lancement de l'enregistrement des valeurs à transmettre
onClickStoreNewFields();
} else if( $( this ).is( '#preview-field') ) {
// Lancement de la prévisualisation
newFieldsPreview();
}
}
// Réinitialisation des drapeaux de saisie invalide
invalidElementInfos = false;
invalidTextInfos = false;
});
}
 
for( var index = 0 ; index <= count ; index++ ) {
// Enregistrement des valeurs à transmettre
function onClickStoreNewFields() {
// Lorsqu'on valide
var resultArrayIndex = 0;
var count = $( 'fieldset' ).last().attr('data-id');
var helpFileExists = false;
 
if( $( '.new-field[data-id="' + index + '"]').length > 0 ) {
// Savoir si au moins un fichier "aide" est enregistré
$( '.field-help' ).each( function () {
if( '' !== $( this ).val() ){
helpFileExists = true;
}
})
// dans ce cas intégrer dans le formulaire à soumettre un bloc
// qui contiendra une copie de chacun de ces input[type="file"]
if( helpFileExists ){
$('#submit-button').before( '<div id="help-doc-submit" class="hidden"></div>' );
}
 
// initialisation du tableau de résultats
datasToSubmit[ resultArrayIndex ] = { fieldValues:{} };
// On déroule les blocs de champs supplémentaires
for( var index = $( 'fieldset' ).first().attr('data-id') ; index <= count ; index++ ) {
var thisFieldset = $( 'fieldset[data-id="' + index + '"]');
// Certains indices peuvent correspondre à un champ supprimé
if( 0 < $( thisFieldset ).length ) {
// initialisation du tableau de résultats
datasToSubmit[ resultArrayIndex ] = { fieldValues:{} };
// Ajout de la clé au tableau de resultats
datasToSubmit[ resultArrayIndex ].key = $( '.field-key' , thisFieldset ).val();
// Ajout de le nom au tableau de resultats
datasToSubmit[ resultArrayIndex ].name = $( '.field-name' , thisFieldset ).val();
// Recueil de l'élément choisi pour le tableau de resultats
datasToSubmit[ resultArrayIndex ].element = $( '.field-element' , thisFieldset ).val();
// Ajout de la valeur 'requis' ou non au tableau de resultats
datasToSubmit[ resultArrayIndex ].mandatory = false;
// Ajout de "champ requis"
if( $( '.field-is_mandatory' , thisFieldset ).is( ':checked' ) ) {
datasToSubmit[ resultArrayIndex ].mandatory = true;
}
// Ajout de l'unité au tableau de resultats
if ( $( '.field-unit' , thisFieldset ).val() ) {
datasToSubmit[ resultArrayIndex ].unit = $( '.field-unit' , thisFieldset ).val();
}
// Ajout du tooltip au tableau de resultats
if ( $( '.field-description' , thisFieldset ).val() ) {
datasToSubmit[ resultArrayIndex ].description = $( '.field-description' , thisFieldset ).val();
}
// Ajout du nom du document d'aide au tableau de resultats
if ( $('.file-return.help-doc-' + index ).text() ) {
datasToSubmit[ resultArrayIndex ].help = $( '.file-return.help-doc-' + index ).text();
}
// Collecte les des données dépendantes de l'élément choisi
// sous forme d'un tableau de resultats
onSelectCollectDataValuesToSubmit( datasToSubmit[ resultArrayIndex ] , thisFieldset );
if( $.isEmptyObject(datasToSubmit[ resultArrayIndex ].fieldValues) ){
delete datasToSubmit[ resultArrayIndex ].fieldValues;
}
 
// Ajout de la clé au tableau de resultats
datasToSubmit[ resultArrayIndex ].key = $( '.new-field[data-id="' + index + '"] .field-key' ).val();
// Copie d'un champ de fichier d'aide dans le bloc d'envoi
if( '' !== $( '.field-help' , thisFieldset ).val() ) {
$( '.field-help' , thisFieldset ).clone()
.attr( 'id' , datasToSubmit[ resultArrayIndex ].key )// l'id prend la valeur de la clé
.css( 'position' , 'static' )// Retrouver facilement le bloc dans la page
.appendTo( '#help-doc-submit' );
}
 
// Ajout de le nom au tableau de resultats
datasToSubmit[ resultArrayIndex ].name = $( '.new-field[data-id="' + index + '"] .field-name' ).val();
 
// Recueil de l'élément choisi pour le tableau de resultats
datasToSubmit[ resultArrayIndex ].element = $( '.new-field[data-id="' + index + '"] .field-element' ).val();
 
// Ajout de la valeur 'requis' ou non au tableau de resultats
if( $( '.new-field[data-id="' + index + '"] .field-is_mandatory' ).attr( 'checked' ) ) {
datasToSubmit[ resultArrayIndex ].mandatory = true;
} else {
datasToSubmit[ resultArrayIndex ].mandatory = false;
}
 
// Ajout de l'unité au tableau de resultats
if ( $('.new-field[data-id="' + index + '"] .field-unit').val() ) {
datasToSubmit[ resultArrayIndex ].unit = $('.new-field[data-id="' + index + '"] .field-unit').val();
};
 
// Ajout du tooltip au tableau de resultats
if ( $('.new-field[data-id="' + index + '"] .field-description').val() ) {
datasToSubmit[ resultArrayIndex ].description = $('.new-field[data-id="' + index + '"] .field-description').val();
}
 
// Ajout du nom du document d'aide au tableau de resultats
if ( $('.file-return.help-doc-' + index ).text() ) {
datasToSubmit[ resultArrayIndex ].help = $('.file-return.help-doc-' + index ).text();
}
 
// Collecte les des données dépendantes de l'élément choisi
// sous forme d'un tableau de resultats
onSelectCollectDataValuesToSubmit( datasToSubmit[ resultArrayIndex ] , index );
if( $.isEmptyObject(datasToSubmit[ resultArrayIndex ].fieldValues) ){
delete datasToSubmit[ resultArrayIndex ].fieldValues;
}
 
resultArrayIndex++;
}
resultArrayIndex++;
}
}
var resultsArrayJson = JSON.stringify( datasToSubmit );
 
var resultsArrayJson = JSON.stringify( datasToSubmit );
 
// Plus de nouvelle validation possible
$( '#validate-new-fields' ).off( 'click' ).addClass('validated');
$( '#add-fields' ).off( 'click' ).addClass('disabled');
$('.validate-new-fields').text('Champs validés');
 
$('#submit-button').before(
'<input type="hidden" name="champs-supp" id="champs-supp" value=\'' + resultsArrayJson + '\'>'
);
});
 
console.log(resultsArrayJson);
// console.log(datasToSubmit);
// Désactivation de tous les champs et boutons (nouveaux champs)
$( '#new-fields, #new-fields .button , #add-fields , #preview-field' ).addClass( 'disabled' );
$( '#validate-new-fields' ).addClass( 'validated' );
$( '.validate-new-fields' ).text( 'Champs validés' );
// Mise à disposition des données pour le bouron submit
$('#submit-button').before(
'<input type="hidden" name="champs-supp" id="champs-supp" value=\'' + resultsArrayJson + '\'>'
);
}
 
// Renseigne le tableau de resultat
// pour les données dépendant de l'élément choisi
function onSelectCollectDataValuesToSubmit( datasToSubmitObject , index ) {
 
function onSelectCollectDataValuesToSubmit( datasToSubmitObject , thisFieldset ) {
switch( datasToSubmitObject.element ) {
 
// case 'file' :
// Rien à faire, pas de détails à transmettre
 
case 'select':
case 'checkbox':
case 'list-checkbox':
case 'radio':
 
datasToSubmitObject.fieldValues.listValue = [];
 
// Ajout des valeurs de liste
onChangeStoreListValueLabel( datasToSubmitObject , index );
 
onChangeStoreListValueLabel( datasToSubmitObject , thisFieldset );
// S'il y a une valeur 'autre' on l'indique à la fin de la liste
if( $('.new-field[data-id="' + index + '"] .option-other-value').attr( 'checked' ) && datasToSubmitObject.fieldValues.listValue.indexOf( 'other' ) === -1 ) {
if( $('.option-other-value' , thisFieldset ).attr( 'checked' ) && datasToSubmitObject.fieldValues.listValue.indexOf( 'other' ) === -1 ) {
datasToSubmitObject.fieldValues.listValue.push( 'other' );
}
 
break;
 
case 'number':
case 'range':
 
// Placeholder
if( $( '.new-field[data-id="' + index + '"] .aide-saisie' ).val() ) {
datasToSubmitObject.fieldValues.placeholder = $( '.new-field[data-id="' + index + '"] .aide-saisie' ).val();
if( $( '.aide-saisie' , thisFieldset ).val() ) {
datasToSubmitObject.fieldValues.placeholder = $( '.aide-saisie' , thisFieldset ).val();
}
 
// Valeur par défaut
if( $( '.new-field[data-id="' + index + '"] .default' ).val() ) {
datasToSubmitObject.fieldValues.default = $( '.new-field[data-id="' + index + '"] .default' ).val();
if( $( '.default' , thisFieldset ).val() ) {
datasToSubmitObject.fieldValues.default = $( '.default' , thisFieldset ).val();
}
 
// Incrémentation ( attribut step="" )
if( $( '.new-field[data-id="' + index + '"] .step' ).val() ) {
datasToSubmitObject.fieldValues.step = $( '.new-field[data-id="' + index + '"] .step' ).val();
if( $( '.step' , thisFieldset ).val() ) {
datasToSubmitObject.fieldValues.step = $( '.step' , thisFieldset ).val();
}
 
// Min
if( $( '.new-field[data-id="' + index + '"] .min' ).val() ) {
datasToSubmitObject.fieldValues.min = $( '.new-field[data-id="' + index + '"] .min' ).val();
if( $( '.min' , thisFieldset ).val() ) {
datasToSubmitObject.fieldValues.min = $( '.min' , thisFieldset ).val();
}
 
// Max
if( $( '.new-field[data-id="' + index + '"] .max' ).val() ) {
datasToSubmitObject.fieldValues.max = $( '.new-field[data-id="' + index + '"] .max' ).val();
if( $( '.max' , thisFieldset ).val() ) {
datasToSubmitObject.fieldValues.max = $( '.max' , thisFieldset ).val();
}
 
break;
 
case 'date':
 
// Min
datasToSubmitObject.fieldValues.min = $( '.new-field[data-id="' + index + '"] .min' ).val();
 
if( $( '.min' , thisFieldset ).val() ) {
datasToSubmitObject.fieldValues.min = $( '.min' , thisFieldset ).val();
}
// Max
datasToSubmitObject.fieldValues.max = $( '.new-field[data-id="' + index + '"] .max' ).val();
 
if( $( '.max' , thisFieldset ).val() ) {
datasToSubmitObject.fieldValues.max = $( '.max' , thisFieldset ).val();
}
break;
 
case 'email':
575,10 → 573,9
case 'textarea':
default:
// Placeholder
if( $( '.new-field[data-id="' + index + '"] .aide-saisie' ).val() ) {
datasToSubmitObject.fieldValues.placeholder = $( '.new-field[data-id="' + index + '"] .aide-saisie' ).val();
if( $( '.aide-saisie' , thisFieldset ).val() ) {
datasToSubmitObject.fieldValues.placeholder = $( '.aide-saisie' , thisFieldset ).val();
}
 
break;
}
return datasToSubmitObject;
586,60 → 583,863
 
// Ajout d'une valeur d'un élément liste (select, checkbox etc.)
// dans le tableau de resultats
function onChangeStoreListValueLabel( datasToSubmitObject , index ) {
 
$( '.new-field[data-id="' + index + '"] .list-value' ).each( function() {
 
function onChangeStoreListValueLabel( datasToSubmitObject , thisFieldset ) {
$( '.list-value' , thisFieldset ).each( function() {
var selectedFieldElement = $( '.field-element' , thisFieldset ).val();
if( $( this ).val() ){
if( $( '.new-field[data-id="' + index + '"] .is-defaut-value[data-list-value-id="' + $( this ).attr('data-list-value-id') + '"]' ).attr( 'checked' ) ) {
datasToSubmitObject.fieldValues.listValue.unshift( $( this ).val() );
if( !$( '.is-defaut-value[data-list-value-id="' + $( this ).attr('data-list-value-id') + '"]' , thisFieldset ).attr( 'checked' ) ) {
datasToSubmitObject.fieldValues.listValue.push( $( this ).val() );
} else if( 'select' === selectedFieldElement || 'radio' === selectedFieldElement ) {
datasToSubmitObject.fieldValues.listValue.unshift( $( this ).val() + '#' );
} else {
datasToSubmitObject.fieldValues.listValue.push( $( this ).val() );
datasToSubmitObject.fieldValues.listValue.push( $( this ).val() + '#' );
}
}
});
}
 
/************************************************
* Fonction d'affichage des champs classiques *
************************************************/
 
/****************************************
* Fonctions pour afficher les images *
* ou les nom de fichers importés *
****************************************/
// Affichage des infos dès que disponibles
// pour les champs classiques
function renderFields( $source , $taget ) {
 
// Logique d'affichage pour le input type=file
function inputFile() {
if($source.val()) {
$taget.text( $source.val() );
}
$source.change( function () {
$taget.text( $( this ).val() );
});
}
 
// initialisation des variables
var $fileInput = $( ".input-file" ),
$button = $( ".label-file" );
function DisplayClassicFields() {
// Affichage du titre du widget
renderFields( $('#titre') , $( '.widget-renderer h1' ) );
// Affichage du nom du projet
renderFields( $('#projet') , $( '.projet-description' ));
// Affichage de la description
renderFields( $('#description') , $( '.preview-description' ) );
// Affichage du logo s'il existe déjà
if( $('#logo').val() ) {
$( '#preview-logo' ).prop( 'src' , $( '#group-settings-form .logo img' ).prop('src') );
}
// Affichage du logo chargé
$( '#logo.input-file' ).change( function( event ) {
 
// action lorsque la "barre d'espace" ou "Entrée" est pressée
$button.on( 'keydown', function( event ) {
if ( event.keyCode == 13 || event.keyCode == 32 ) {
$fileInput.focus();
if( !$.isEmptyObject( event.target.files[0] ) ) {
$( '#preview-logo img' ).prop( 'src' , URL.createObjectURL( event.target.files[0] ) );
} else {
$( '#preview-logo img' ).prop( 'src' , '' );
}
});
// Affichage de l'image de fond
$('#fond.input-file').change( function ( event ) {
if( !$.isEmptyObject( event.target.files[0] ) ) {
$( '.widget-renderer' ).css('background' ,'url(' + URL.createObjectURL( event.target.files[0] ) + ') no-repeat center');
} else {
$( '.widget-renderer' )[0].style.removeProperty( 'background' );
}
});
}
 
// action lorsque le label est cliqué
$button.click( function() {
$fileInput.focus();
return false;
 
// /*****************************************************
// * Fonction d'affichage des champs supplémentaires *
// *****************************************************/
 
// Construction des éléments à visualiser
function onClickPreviewField( thisFieldset , index ) {
 
var fieldLabel = $( '.field-name' , thisFieldset ).val(),
fieldKey = $( '.field-key' , thisFieldset ).val(),
fieldElement = $( '.field-element' , thisFieldset ).val(),
fieldIsMandatory = $( '.field-is_mandatory' , thisFieldset ).is( ':checked' ),
fieldUnit = $( '.field-unit' , thisFieldset ).val(),
fieldTooltip = $( '.field-description' , thisFieldset ).val(),
fieldHelp = $( '.file-return.help-doc-' + index ).text(),
fieldPlaceholder = $( '.aide-saisie' , thisFieldset ).val() || '',
fieldDefaultNum = $( '.default' , thisFieldset ).val(),
fieldStep = $( '.step' , thisFieldset ).val(),
fieldMin = $( '.min' , thisFieldset ).val(),
fieldMax = $( '.max' , thisFieldset ).val(),
fieldOtherValue = $( '.option-other-value' , thisFieldset ).is( ':checked' ),
fieldOptions = collectListOptions( thisFieldset );
 
 
 
var fieldHtmlObject = {},
fieldHtml = '',
constHtml = {},
listHtml = {},
count = fieldOptions.length,
fieldHelpClass = '';
 
// Pour les éléments simples
fieldHtmlObject = {
fieldHelpButton : '',
fieldTitleAttr : '',
fieldLabel : {
labelForAttr :' for="' + fieldKey + '"',
labelClassAttr :'',
labelOtherAttr : '',
labelContent : fieldLabel
},
fieldInput : {
inputTypeAttr : ' type="' + fieldElement + '"',
inputNameAttr : ' name="' + fieldKey + '"',
inputDataIdAttr : ' data-id="' + index + '"',
inputClassAttr : ' class="' + fieldKey + '"',
inputPlaceholderAttr : '',
inputOtherAttr : ''
}
}
 
// Pour les éléments de listes (select, checkbox, etc.)
constHtml = {
fieldContainerContent : fieldLabel,
fieldDataIdAttr : ' data-id="' + index + '"',
fieldTitleAttr : '',
fieldMandatoryAttr : '',
fieldContainerClass : ''
};
 
listHtml = {
optionLabel : {},
optionInput : {
inputTypeAttr : ' type="' + fieldElement + '"',
inputNameAttr : ' name="' + fieldKey + '"',
inputClassAttr : ' class="' + fieldKey + '"',
inputOptionIdAttr : ''
}
};
 
// Changement d'un élément existant:
// supprimer le précédent pour ajouter le nouveau
if( 0 < $( '.preview-fields' , thisFieldset ).length ) {
$( '.preview-fields' , thisFieldset ).remove();
}
 
// Si l'élément est requis
if( fieldIsMandatory ) {
// Attribut required
fieldHtmlObject.fieldInput.inputOtherAttr += ' required="required"';
// Nom du champ (éléments listes)
constHtml.fieldContainerContent += ' *';
// Nom du champ (éléments simples)
fieldHtmlObject.fieldLabel.labelContent += ' *';
}
 
// Si on a une infobulle
if( '' !== fieldTooltip ) {
fieldHtmlObject.fieldTitleAttr = ' title="' + fieldTooltip + '"';
}
 
// Si on a un placeholder
if( '' !== fieldPlaceholder ) {
fieldHtmlObject.fieldInput.inputPlaceholderAttr = ' placeholder="' + fieldPlaceholder + '"';
console.log(fieldPlaceholder);
}
 
if( '' !== fieldHelp ) {
fieldHtmlObject.fieldHelpButton = '<div class="button help-button"><i class="fas fa-info-circle"></i></div>';
fieldHelpClass = ' and-help';
}
 
// html à ajouter en fonction de l'élément choisi
switch( fieldElement ) {
case 'checkbox' :
case 'radio' :
constHtml.fieldContainerClass = ' class="' + fieldElement +'"';
fieldHtml =
// Conteneur
'<div' +
// Class="L'élément choisi"
constHtml.fieldContainerClass +
// DataId
constHtml.fieldDataIdAttr +
// Required
constHtml.fieldMandatoryAttr +
// Info bulle
constHtml.fieldTitleAttr +
' >'+
// Nom du champ
'<div class="list-label' + fieldHelpClass + '">' +
constHtml.fieldContainerContent +
'</div>' +
fieldHtmlObject.fieldHelpButton;
// On déroule les différentes valeurs
for ( let i = 0; i < count; i++ ) {
let fieldOption = fieldOptions[i];
 
listHtml.optionInput.inputDefaultAttr = '';
listHtml.optionInput.inputIdAttr = ' id="' + fieldOption.optionValue + '"';
listHtml.optionLabel.labelForAttr = ' for="' + fieldOption.optionValue + '"';
 
// Si c'est une/l'option par défaut
if( fieldOption.isDefault ) {
listHtml.optionInput.inputDefaultAttr = ' checked';
}
 
// L'indice de chaque option
// L'option "autre" n'en a pas
if( '' !== fieldOption.optionIndex ) {
listHtml.optionInput.inputOptionIdAttr = ' value-id="' + fieldOption.optionIndex + '"';
}
 
fieldHtml +=
'<label' +
// For
listHtml.optionLabel.labelForAttr +
// value-id
listHtml.optionInput.inputOptionIdAttr +
// Class="nom du champ"
listHtml.optionInput.inputClassAttr +
'>' +
'<input' +
// Type
listHtml.optionInput.inputTypeAttr +
// DataId
constHtml.fieldDataIdAttr +
// value-id
listHtml.optionInput.inputOptionIdAttr +
// Name
listHtml.optionInput.inputNameAttr +
// Value
' value="' + fieldOption.optionValue + '"' +
// Checked
listHtml.optionInput.inputDefaultAttr +
// Class="nom du champ"
listHtml.optionInput.inputClassAttr +
'>' +
// Label de l'option
fieldOption.optionText +
'</label>';
 
// Si valeur "autre" est cochée
if( fieldOtherValue ) {
fieldHtml +=
'<label for="other"' +
constHtml.fieldDataIdAttr +
'>' +
'<input' +
listHtml.optionInput.inputTypeAttr +
' id="other"' +
listHtml.optionInput.inputNameAttr +
' value="other"' +
listHtml.optionInput.inputClassAttr +
constHtml.fieldDataIdAttr +
'>' +
'Autre</label>';
}
}
// Fin du conteneur
fieldHtml += '</div>';
 
break;
 
case 'list-checkbox':
fieldHtml =
'<div class="multiselect ' + fieldElement + fieldHelpClass + '"' +
// DataId
constHtml.fieldDataIdAttr +
'>' +
'<label>' +
// Nom du champ
constHtml.fieldContainerContent +
'</label>' +
'<div class="selectBox"' +
// DataId
constHtml.fieldDataIdAttr +
'>' +
 
'<select' +
// DataId
constHtml.fieldDataIdAttr +
// Required
constHtml.fieldMandatoryAttr +
// Info bulle
constHtml.fieldTitleAttr +
'>' +
// Apparait dans la barre de sélection
'<option>Plusieurs choix possibles</option>' +
'</select>' +
'<div class="overSelect"></div>' +
'</div>' +
'<div class="checkboxes hidden"' +
// DataId
constHtml.fieldDataIdAttr +
'>';
// On déroule les différentes valeurs
for ( let i = 0; i < count; i++ ) {
let fieldOption = fieldOptions[i];
 
listHtml.optionInput.inputTypeAttr = ' type="checkbox"';
listHtml.optionInput.inputIdAttr = ' id="' + fieldOption.optionValue.toLowerCase() + '"';
listHtml.optionLabel.labelForAttr = ' for="' + fieldOption.optionValue.toLowerCase() + '"';
listHtml.optionInput.inputDefaultAttr = '';
 
if( fieldOption.isDefault ) {
listHtml.optionInput.inputDefaultAttr = ' checked';
}
 
if( '' !== fieldOption.optionIndex ) {
listHtml.optionInput.inputOptionIdAttr = ' value-id="' + fieldOption.optionIndex + '"';
}
 
fieldHtml +=
 
'<label' +
listHtml.optionLabel.labelForAttr +
// value-id
listHtml.optionInput.inputOptionIdAttr +
'>' +
 
'<input type="checkbox"' +
// value-id
listHtml.optionInput.inputOptionIdAttr +
// Name
listHtml.optionInput.inputNameAttr +
// Value
' value="' + fieldOption.optionValue + '"' +
// Checked
listHtml.optionInput.inputDefaultAttr +
// Class="nom du champ"
listHtml.optionInput.inputClassAttr +
// DataId
constHtml.fieldDataIdAttr +
'>' +
// Label de l'option
fieldOption.optionText +
'</label>';
}
 
// Si valeur "autre" est cochée
if( fieldOtherValue ) {
fieldHtml +=
'<label for="other"' +
// DataId
constHtml.fieldDataIdAttr +
'>' +
'<input type="checkbox"' +
' id="other"' +
listHtml.optionInput.inputNameAttr +
' value="other"' +
listHtml.optionInput.inputClassAttr +
// DataId
constHtml.fieldDataIdAttr +
'>' +
'Autre</label>';
}
 
// Fermeture des conteneurs .multiselect .checkboxes
fieldHtml +=
'</div>'+
'</div>' +
fieldHtmlObject.fieldHelpButton;
 
break;
 
case 'select':
fieldHtml =
'<label' +
' for="' + fieldKey + '"' +
// Info bulle
constHtml.fieldTitleAttr +
'>' +
// Nom du champ
constHtml.fieldContainerContent +
'</label>' +
// Conteneur/Wrapper
'<div class="select-wrapper add-field-select ' + fieldElement + fieldHelpClass + '"' +
constHtml.fieldDataIdAttr +
'>' +
'<select' +
' name="' + fieldKey + '"' +
' id="' + fieldKey + '"' +
//Class
listHtml.optionInput.inputClassAttr +
// Required
constHtml.fieldMandatoryAttr +
// DataId
constHtml.fieldDataIdAttr +
'>';
 
// On déroule les différentes valeurs
for ( let i = 0; i < count; i++ ) {
let fieldOption = fieldOptions[i];
 
listHtml.optionInput.inputDefaultAttr = '';
listHtml.optionInput.inputdisabledAttr = '';
 
if( fieldOption.isDefault ) {
listHtml.optionInput.inputDefaultAttr = ' selected="selected"';
}
 
if( '' !== fieldOption.optionIndex ) {
listHtml.optionInput.inputOptionIdAttr = ' value-id="' + fieldOption.optionIndex + '"';
}
 
fieldHtml +=
'<option' +
// Value
' value="' + fieldOption.optionValue + '"' +
// Value-id
listHtml.optionInput.inputOptionIdAttr +
// Selected
listHtml.optionInput.inputDefaultAttr +
'>' +
// Option
fieldOption.optionText +
'</option>';
}
 
// Si valeur "autre" est cochée
if( fieldOtherValue ) {
fieldHtml +=
'<option class="other" value="other"' + constHtml.fieldDataIdAttr + '>' +
'Autre' +
'</option>';
}
 
fieldHtml +=
'</select>' +
// Fin du conteneur/wrapper
'</div>' +
 
fieldHtmlObject.fieldHelpButton;
 
break;
 
case 'file' :
fieldHtmlObject.fieldInput.inputClassAttr = fieldHtmlObject.fieldInput.inputClassAttr.slice(0, -1);
fieldHtmlObject.fieldInput.inputClassAttr += ' input-file"';
 
fieldHtmlObject.fieldLabel.labelClassAttr = ' class="label-file"';
 
fieldHtmlObject.fieldInput.inputOtherAttr += ' accept="application/pdf, image/*, video/*"';
 
fieldHtml =
'<div class="input-file-container' + fieldHelpClass + '">' +
'<input' +
// Type
fieldHtmlObject.fieldInput.inputTypeAttr +
// Name
fieldHtmlObject.fieldInput.inputNameAttr +
// DataId
fieldHtmlObject.fieldInput.inputDataIdAttr +
// Class
fieldHtmlObject.fieldInput.inputClassAttr +
// Info-bulle
fieldHtmlObject.fieldTitleAttr +
// Placeholder
fieldHtmlObject.fieldInput.inputPlaceholderAttr +
// Autres attributs
fieldHtmlObject.fieldInput.inputOtherAttr +
'>' +
 
'<label' +
// For
fieldHtmlObject.fieldLabel.labelForAttr +
// Class
fieldHtmlObject.fieldLabel.labelClassAttr +
// Info-bulle
fieldHtmlObject.fieldTitleAttr +
'><i class="fas fa-download"></i> ' +
// Nom du champ
fieldHtmlObject.fieldLabel.labelContent +
'</label>' +
 
'</div>' +
 
'<div class="remove-file button" name="remove-file" title="Supprimer le fichier"><i class="fas fa-times" aria-hidden="true"></i></div>' +
 
fieldHtmlObject.fieldHelpButton;
 
break;
 
case 'textarea':
fieldHtmlObject.fieldLabel.labelClassAttr = ' class="' + fieldHelpClass + '"';
// Autres attributs
fieldHtmlObject.fieldInput.inputOtherAttr += ' id="' + fieldKey + '"';
 
fieldHtml =
'<label' +
// For
fieldHtmlObject.fieldLabel.labelForAttr +
// Class
fieldHtmlObject.fieldLabel.labelClassAttr +
// Info-bulle
fieldHtmlObject.fieldTitleAttr +
// Autres attributs
fieldHtmlObject.fieldLabel.labelOtherAttr +
'>' +
// Nom du champ
fieldHtmlObject.fieldLabel.labelContent +
'</label>' +
 
fieldHtmlObject.fieldHelpButton +
 
'<textarea' +
// Name
fieldHtmlObject.fieldInput.inputNameAttr +
// DataId
fieldHtmlObject.fieldInput.inputDataIdAttr +
// Class
fieldHtmlObject.fieldInput.inputClassAttr +
// Info-bulle
fieldHtmlObject.fieldTitleAttr +
// Info-bulle
fieldHtmlObject.fieldInput.inputPlaceholderAttr +
// Autres attributs
fieldHtmlObject.fieldInput.inputOtherAttr +
'></textarea>';
 
break;
 
case 'range':
fieldHtmlObject.fieldLabel.labelClassAttr = ' class="' + fieldHelpClass + '"';
 
if( '' !== fieldStep ) {
fieldHtmlObject.fieldInput.inputOtherAttr += ' step="' + fieldStep + '"';
}
 
if( '' !== fieldMin ) {
fieldHtmlObject.fieldInput.inputOtherAttr += ' min="' + fieldMin + '"';
}
 
if( '' !== fieldMax ) {
fieldHtmlObject.fieldInput.inputOtherAttr += ' max="' + fieldMax + '"';
}
 
fieldHtml =
'<div class="number">' +
'<label' +
// For
fieldHtmlObject.fieldLabel.labelForAttr +
// Class
fieldHtmlObject.fieldLabel.labelClassAttr +
// Info-bulle
fieldHtmlObject.fieldTitleAttr +
// Autres attributs
fieldHtmlObject.fieldLabel.labelOtherAttr +
'>' +
// Nom du champ
fieldHtmlObject.fieldLabel.labelContent +
'</label>' +
 
fieldHtmlObject.fieldHelpButton +
 
'<input' +
// Type
fieldHtmlObject.fieldInput.inputTypeAttr +
// Name
fieldHtmlObject.fieldInput.inputNameAttr +
// DataId
fieldHtmlObject.fieldInput.inputDataIdAttr +
// Class
fieldHtmlObject.fieldInput.inputClassAttr +
// Info-bulle
fieldHtmlObject.fieldTitleAttr +
// Info-bulle
fieldHtmlObject.fieldInput.inputPlaceholderAttr +
// Autres attributs
fieldHtmlObject.fieldInput.inputOtherAttr +
'>' +
 
'</div>';
 
break;
 
case 'date':
case 'number':
fieldHtmlObject.fieldInput.inputClassAttr = fieldHtmlObject.fieldInput.inputClassAttr.slice(0, -1);
fieldHtmlObject.fieldInput.inputClassAttr += fieldHelpClass + '"';
 
if( '' !== fieldStep ) {
fieldHtmlObject.fieldInput.inputOtherAttr += ' step="' + fieldStep + '"';
}
 
if( '' !== fieldMin ) {
fieldHtmlObject.fieldInput.inputOtherAttr += ' min="' + fieldMin + '"';
}
 
if( '' !== fieldMax ) {
fieldHtmlObject.fieldInput.inputOtherAttr += ' max="' + fieldMax + '"';
}
 
fieldHtml =
'<div class="number">' +
'<label' +
// For
fieldHtmlObject.fieldLabel.labelForAttr +
// Class
fieldHtmlObject.fieldLabel.labelClassAttr +
// Info-bulle
fieldHtmlObject.fieldTitleAttr +
// Autres attributs
fieldHtmlObject.fieldLabel.labelOtherAttr +
'>' +
// Nom du champ
fieldHtmlObject.fieldLabel.labelContent +
'</label>' +
 
'<input' +
// Type
fieldHtmlObject.fieldInput.inputTypeAttr +
// Name
fieldHtmlObject.fieldInput.inputNameAttr +
// DataId
fieldHtmlObject.fieldInput.inputDataIdAttr +
// Class
fieldHtmlObject.fieldInput.inputClassAttr +
// Info-bulle
fieldHtmlObject.fieldTitleAttr +
// Info-bulle
fieldHtmlObject.fieldInput.inputPlaceholderAttr +
// Autres attributs
fieldHtmlObject.fieldInput.inputOtherAttr +
'>' +
 
fieldHtmlObject.fieldHelpButton +
 
'</div>';
 
break;
 
case 'text' :
case 'email':
default:
fieldHtmlObject.fieldInput.inputClassAttr = fieldHtmlObject.fieldInput.inputClassAttr.slice(0, -1);
fieldHtmlObject.fieldInput.inputClassAttr += fieldHelpClass + '"';
 
fieldHtml =
'<label' +
// For
fieldHtmlObject.fieldLabel.labelForAttr +
// Class
fieldHtmlObject.fieldLabel.labelClassAttr +
// Info-bulle
fieldHtmlObject.fieldTitleAttr +
// Autres attributs
fieldHtmlObject.fieldLabel.labelOtherAttr +
'>' +
// Nom du champ
fieldHtmlObject.fieldLabel.labelContent +
'</label>' +
 
'<input' +
// Type
fieldHtmlObject.fieldInput.inputTypeAttr +
// Name
fieldHtmlObject.fieldInput.inputNameAttr +
// DataId
fieldHtmlObject.fieldInput.inputDataIdAttr +
// Class
fieldHtmlObject.fieldInput.inputClassAttr +
// Info-bulle
fieldHtmlObject.fieldTitleAttr +
// Info-bulle
fieldHtmlObject.fieldInput.inputPlaceholderAttr +
// Autres attributs
fieldHtmlObject.fieldInput.inputOtherAttr +
'>' +
 
fieldHtmlObject.fieldHelpButton;
 
break;
}
 
return fieldHtml;
}
 
// Construire un tableau des options pour chaque élément de listes
function collectListOptions( thisFieldset ) {
var $details = $( '.field-details' , thisFieldset ),
options = [];
 
$details.find( '.new-value' ).each( function() {
 
options.push({
// Valeur transmise (value)
optionValue : $( this ).find('.list-value').val().toLowerCase(),
// Valeur Visible
optionText : capitalize( $( this ).find('.list-value').val() ),
// Booléen "default"
isDefault : $( this ).find( '.is-defaut-value').is( ':checked' ),
// Indice de l'option
optionIndex : $( this ).attr('data-list-value-id')
});
 
});
return options;
}
 
// affiche un retour visuel dès que input:file change
$fileInput.change( function( event ) {
var file = event.target.files[0],
$theReturn = $( '.' + $( this ).attr( 'id' ) );
// Faire apparaitre un champ text "Autre"
function onOtherOption( thisFieldset , index ) {
//L'élément choisi
var element = $('.field-element' , thisFieldset ).val(),
// Où insérer le champ "Autre"
$element = $( '.' + element , thisFieldset ),
// html du champ "Autre"
collectOther =
'<label data-id="' + index + '" for="collect-other">Autre option :</label>' +
'<input type="text" name="collect-other" data-id="' + index + '" class="collect-other" >';
 
// affichage du nom du fichier
$theReturn.text( file.name );
// Pouvoir supprimer le champ "Autre"
function optionRemove( thisFieldset ) {
$( 'label[for="collect-other"]' , thisFieldset ).remove();
$( 'input.collect-other' , thisFieldset ).remove();
}
 
// si le fichier est une image on l'affiche
switch( element ) {
case 'radio' :
// Lorsqu'un nouveau bouton est coché
$( 'input' , thisFieldset ).on( 'change' , function () {
if( 'other' === $( this ).val() ) {
// Insertion du champ "Autre" après les boutons
$element.after( collectOther );
} else {
// Suppression du champ autre
optionRemove( thisFieldset );
}
});
 
break;
 
case 'select' :
// Lorsque l'option "Autre" est selectionnée
$( 'select' , thisFieldset ).on( 'change' , function () {
if( 'other' === $( this).val() ) {
// Insertion du champ "Autre" après les boutons
$element.after( collectOther );
// Suppression du champ autre
} else {
optionRemove( thisFieldset );
}
});
 
break;
 
case 'checkbox' :
case 'list-checkbox' :
// Lorsque "Autre" est coché
$( 'input#other' , thisFieldset ).on( 'click' , function () {
// Insertion du champ "Autre" après les boutons
if( $( this ).is( ':checked' ) ) {
$element.after( collectOther );
} else {
// Suppression du champ autre
optionRemove( thisFieldset );
}
});
 
break;
 
default :
break;
}
}
 
// Prévisualisation des nouveaux champs
function newFieldsPreview() {
var count = $( 'fieldset' ).last().attr('data-id');
// Si on a déjà prévisualisé on efface tout pour recommencer
if( 0 < $( '.preview-fields' ).length ) {
$( '.preview-fields' ).each( function () {
$( this ).remove();
});
}
// Au premier ajout d'un champ dans la prévisualisation on ajoute un titre et un message
if( true === firstClick ) {
$( '#zone-supp' ).prepend(
'<h2>Informations spécifiques au projet</h2>' +
'<div class="message">Ceci n\'est qu\'un aperçu.<br>Il vous permet simplement de visualiser les contenus pour vérifier d\'évenutelles erreurs</div>'
);
}
// Parcourir tous les blocs d'infos de champs supplémentaires
for( var index = $( 'fieldset' ).first().attr('data-id') ; index <= count ; index++ ) {
var thisFieldset = $( 'fieldset[data-id="' + index + '"]');
// Certains indices peuvent correspondre à un champ supprimé
if( 0 < $( thisFieldset ).length ) {
// Prévisualisation d'un champ
$( '#zone-supp .preview-container' ).append(
'<div class="preview-fields" data-id="' + index + '">'+
onClickPreviewField( thisFieldset , index ) +
'</div>'
);
 
// Ajout/suppression d'un champ texte "Autre"
if( $( '.option-other-value' , thisFieldset ).is( ':checked' ) ) {
onOtherOption( thisFieldset , index);
}
}
}
// Le titre + message de la section prévisualisation ne sont ajoutés qu'une fois
firstClick = false;
}
 
function previewFieldHelpModal() {
$( '#zone-supp' ).on( 'click' , '.help-button' , function ( event ) {
var index = $( this ).closest( '.preview-fields' ).attr( 'data-id' ),
thisFieldset = $( '.new-field[data-id="' + index + '"]' ),
file = $( '.field-help' , thisFieldset )[0].files[0],
tmppath = URL.createObjectURL( file ),
helpModalHtml = '';
 
$( '#help-modal-label' ).text( 'Aide pour : ' + $( '.field-name' , thisFieldset ).val() );
 
if( file.type.match( 'image' ) ) {
// temporairement retrouver le chemin
// de l'image qui a été chagée, pour affichage
var tmppath = URL.createObjectURL( file );
$theReturn.append( '<img src="' + tmppath + '" width="50%">' );
$( '#print_content' ).append( '<img src="' + tmppath + '" style="max-width:100%">' );
} else if( file.type.match( 'pdf' ) ) {
$( '#print_content' ).append( '<iframe src="' + tmppath + '" width="100%" height="650" align="middle" scrolling="no" frameborder="0"></iframe>' );
}
 
$( '#help-modal' ).modal( { keyboard : true } );
$( '#help-modal' ).modal( 'show' );
 
$( '#help-modal' ).on( 'shown.bs.modal' , function () {
$( '#myInput' ).trigger( 'focus' );
})
 
$( '#help-modal' ).on( 'hidden.bs.modal' , function () {
$( '#help-modal-label' ).text();
$( '#print_content' ).empty();
})
});
}
 
 
 
/***************************
* Lancement des scripts *
***************************/
 
// Tableau d'envoi des données
var datasToSubmit = new Array();
var firstClick = true;
 
jQuery( document ).ready( function() {
// console.log($(location).attr('search'));
// console.log($(location).attr('search').search('='));
// console.log($(location).attr('search').charAt(6));
// Identifiant de champ
var fieldIndex = 0;
// Ajout de nouveaux champs
onClickAddNewFields( fieldIndex );
// Activation/Desactivation des boutons valider et prévisualiser
activatePreviewAndValidateButtons();
 
// Prévisualisation des champs classiques
DisplayClassicFields()
 
 
// Affichage des images ou nom des documents importés
inputFile();
// Affichage des List-checkbox
inputListCheckbox();
 
previewFieldHelpModal();
 
});
/trunk/widget/modules/manager/squelettes/creation.tpl.html
45,11 → 45,6
<script type="text/javascript" src="https://www.tela-botanica.org/commun/jquery/form/2.95/jquery.form.min.js"></script>
<script src="https://resources.tela-botanica.org/bootstrap/3.1.0/js/bootstrap.min.js"></script>
 
<!-- Barre de navigation -->
<?php if ($bar !== false): ?>
<script src="<?php echo $url_script_navigation; ?>"></script>
<?php endif; ?>
 
<!-- CSS -->
<link href="https://www.tela-botanica.org/commun/jquery/jquery-ui/1.8.18/css/smoothness/jquery-ui-1.8.18.custom.css" rel="stylesheet" type="text/css" media="screen" />
<link href="https://www.tela-botanica.org/commun/bootstrap/2.0.2/css/bootstrap.min.css" rel="stylesheet" type="text/css" media="screen" />
75,191 → 70,216
<?php endif; ?>
<h1 id="widget-titre" class="widget-titre"><?php echo ucfirst($mode); ?> de widget de saisie du CEL</h1>
<div id="register-page">
<div class="row">
<div id="group-settings-form" class="row">
 
<div class="widget-blocks col-md-4">
 
<div id="group-settings-form">
<form action="http://localhost/cel/widget/manager?mode=<?php echo $mode; ?>" id="new-widget-form" class="standard-form component component-text" method="post" enctype="multipart/form-data">
<div class="register-section" id="basic-details-section">
<p class="message">
<?php if ($mode === 'modification') : ?>
Attention vous modifiez un widget déjà existant, le tag et la langue ne peuvent pas être changer.
S'il s'agit d'un projet type, en modifiant ce widget vous modifiez tous les widgets de ce type.
<?php else : ?>
Vous créez un widget, si vous choississez de le mettre dans un type, certains champs deviendront
obligatoires et la localisation (point ou rue) sera automatiquement déterminée.
<?php endif; ?>
</p>
 
<h2>Meta-données</h2>
<form action="http://localhost/cel/widget/manager?mode=<?php echo $mode; ?>" id="basic-widget-form" class="standard-form component component-text" method="post" enctype="multipart/form-data">
<div class="register-section" id="basic-details-section">
 
<?php //var_dump($widget); ?>
<label for="projet">Projet *</label>
<input type="text" name="projet" id="projet" pattern="[a-z]*" <?php echo ($mode === 'modification') ? 'value="'.$widget['projet'].'" readonly' : 'required'; ?> title="Champ obligatoire : pas d'espace" />
<h2>Meta-données</h2>
 
<label for="motscles">Autres mots-clés</label>
<input type="text" name="motscles" id="motscles" value="" />
<?php //var_dump($widget); ?>
<label for="projet">Projet *</label>
<input type="text" name="projet" id="projet" pattern="[a-z]*" <?php echo ($mode === 'modification') ? 'value="'.$widget['projet'].'" readonly' : 'required'; ?> title="Champ obligatoire : pas d'espace" />
 
<label for="type">Type de widget</label>
<div class="select-wrapper">
<select id="type" name="type" >
<?php foreach ($type as $id => $projet) : ?>
<option <?php echo (isset($widget['projet']) && $projet['projet']== $widget['projet']) ? 'selected="selected"' : ''; ?> value="<?php echo $projet['projet']; ?>"><?php echo $projet['projet']; ?></option>
<?php endforeach; ?>
<option value=""> ----</option>
</select>
</div>
<label for="motscles">Autres mots-clés</label>
<input type="text" name="motscles" id="motscles" value="" />
 
<label for="est_type">Ce widget est un widget type</label>
<input type="checkbox" name="est_type" id="est_type" <?php echo (isset($widget['est_type']) && $projet['est_type']=== '1') ? 'checked="checked"' : ''; ?>>
 
<label for="langue">Langue</label>
<?php if ($mode === 'modification') : ?>
<input id="langue" name="langue" readonly value="<?php echo $widget['langue']; ?>">
<?php else : ?>
<input id="langue" name="langue" list="langues">
<datalist id="langues" >
<?php foreach ($langues as $code => $langue) : ?>
<option value="<?php echo $code; ?>"><?php echo $langue['nom']; ?></option>
<label for="type">Type de widget</label>
<div class="select-wrapper">
<select id="type" name="type" >
<?php foreach ($type as $id => $projet) : ?>
<option <?php echo (isset($widget['projet']) && $projet['projet']== $widget['projet']) ? 'selected="selected"' : ''; ?> value="<?php echo $projet['projet']; ?>"><?php echo $projet['projet']; ?></option>
<?php endforeach; ?>
</datalist>
<?php endif; ?>
</div><!-- end #basic-details-section -->
<option value=""> ----</option>
</select>
</div>
 
<label for="est_type">Ce widget est un widget type</label>
<input type="checkbox" name="est_type" id="est_type" <?php echo (isset($widget['est_type']) && $projet['est_type']=== '1') ? 'checked="checked"' : ''; ?>>
 
<div class="register-section" id="profile-details-description-section">
<h2>Description</h2>
<label for="titre">Titre</label>
<input type="text" name="titre" id="titre" value="<?php echo isset($widget['titre']) ? $widget['titre'] : ''; ?>">
<label for="langue">Langue</label>
<?php if ($mode === 'modification') : ?>
<input id="langue" name="langue" readonly value="<?php echo $widget['langue']; ?>">
<?php else : ?>
<input id="langue" name="langue" list="langues">
<datalist id="langues" >
<?php foreach ($langues as $code => $langue) : ?>
<option value="<?php echo $code; ?>"><?php echo $langue['nom']; ?></option>
<?php endforeach; ?>
</datalist>
<?php endif; ?>
</div><!-- end #basic-details-section -->
 
<label for="description">Description</label>
<textarea name="description" id="description"><?php echo isset($widget['description']) ? $widget['description'] : ''; ?></textarea>
 
<div class="input-file-container">
<input type="file" class="input-file" name="logo" id="logo" accept="image">
<label for="logo" class="label-file"><i class="fas fa-download"></i> Logo</label>
</div>
<div class="file-return logo"></div>
<div class="register-section" id="profile-details-description-section">
<h2>Description</h2>
<label for="titre">Titre</label>
<input type="text" name="titre" id="titre" value="<?php echo isset($widget['titre']) ? $widget['titre'] : ''; ?>">
 
<?php echo isset($widget['logo']) ? '<img src="'.$widget['logo'].'"><br />Pour changer, télécharger un nouveau fichier.': ''; ?>
<label for="description">Description</label>
<textarea name="description" id="description"><?php echo isset($widget['description']) ? $widget['description'] : ''; ?></textarea>
 
<div class="input-file-container">
<input type="file" class="input-file" name="fond" id="fond" value="<?php echo $widget['titre']; ?>">
<label for="fond" class="label-file"><i class="fas fa-download"></i> Image de fond</label>
</div>
<div class="file-return fond"></div>
</div><!-- end #profile-details-description-section -->
<div class="input-file-container">
<input type="file" class="input-file" name="logo" id="logo" accept="image">
<label for="logo" class="label-file"><i class="fas fa-download"></i> Logo</label>
</div>
<div class="remove-file button" name="remove-file" title="Supprimer le fichier"><i class="fas fa-times" aria-hidden="true"></i></div>
<div class="file-return logo hidden"></div>
 
<div class="register-section" id="profile-details-fields-section">
<h2>Champs</h2>
<label for="type_localisation">Type de localisation</label>
<div class="select-wrapper">
<select id="type_localisation" name="type_localisation" >
<option value="<?php echo (isset($widget['type_localisation'])) ? $widget['type_localisation'] : 'point'; ?>"><?php echo (isset($widget['type_localisation'])) ? $widget['type_localisation'] : 'point'; ?></option>
<option value="<?php echo (isset($widget['type_localisation']) && $widget['type_localisation'] == 'rue') ? 'point' : 'rue'; ?>"><?php echo (isset($widget['type_localisation']) && $widget['type_localisation'] == 'rue') ? 'point' : 'rue'; ?></option>
</select>
</div>
<?php echo isset($widget['logo']) ? '<img src="'.$widget['logo'].'"><br />Pour changer, télécharger un nouveau fichier.': ''; ?>
 
<label for="localisation">Zoom</label>
<input type="text" name="localisation" id="localisation" value="<?php echo isset($widget['localisation']) ? $widget['localisation'] : ''; ?>" />
<div class="input-file-container">
<input type="file" class="input-file" name="fond" id="fond" value="<?php echo $widget['titre']; ?>">
<label for="fond" class="label-file"><i class="fas fa-download"></i> Image de fond</label>
</div>
<div class="remove-file button" name="remove-file" title="Supprimer le fichier"><i class="fas fa-times" aria-hidden="true"></i></div>
<div class="file-return fond hidden"></div>
</div><!-- end #profile-details-description-section -->
 
<label for="milieux">Milieux</label>
<input type="text" name="milieux" id="milieux" value="<?php echo isset($widget['milieux']) ? $widget['milieux'] : ''; ?>">
<div class="register-section" id="profile-details-fields-section">
<h2>Champs</h2>
<label for="type_localisation">Type de localisation</label>
<div class="select-wrapper">
<select id="type_localisation" name="type_localisation" >
<option value="<?php echo (isset($widget['type_localisation'])) ? $widget['type_localisation'] : 'point'; ?>"><?php echo (isset($widget['type_localisation'])) ? $widget['type_localisation'] : 'point'; ?></option>
<option value="<?php echo (isset($widget['type_localisation']) && $widget['type_localisation'] == 'rue') ? 'point' : 'rue'; ?>"><?php echo (isset($widget['type_localisation']) && $widget['type_localisation'] == 'rue') ? 'point' : 'rue'; ?></option>
</select>
</div>
 
<label for="type_especes">Type liste espèce *</label>
<div class="select-wrapper">
<select id="type_especes" name="type_especes" required>
<option selected="selected" value="referentiel">Référentiel</option>
<option value="liste">Liste</option>
<option value="liste" title="remplir référentiel + envoyer csv">Liste + autres</option>
<option value="fixe">Espèce fixée</option>
</select>
</div>
<label for="localisation">Zoom</label>
<input type="text" name="localisation" id="localisation" value="<?php echo isset($widget['localisation']) ? $widget['localisation'] : ''; ?>" />
 
<label for="referentiel">Référentiel *</label>
<input type="text" name="referentiel" id="referentiel" required pattern="([a-z]+?)*" title="Nom du référentiel ex. bdtfx" value="<?php echo isset($widget['referentiel']) ? $widget['referentiel'] : ''; ?>">
<div class="input-file-container">
<input type="file" class="input-file" name="especes" id="especes">
<label for="especes"class="label-file"><i class="fas fa-download"></i> Espèces</label> fichier type
</div>
<div class="file-return especes"></div>
</div><!-- end #profile-details-fields-section -->
<label for="milieux">Milieux</label>
<input type="text" name="milieux" id="milieux" value="<?php echo isset($widget['milieux']) ? $widget['milieux'] : ''; ?>">
 
<!--Submit-->
<div class="submit complete-registration" id="submit-button">
<button href="#" type="submit" name="signup_submit" id="signup_submit" class="button" target="" title=""><span class="button-text">Terminer </span></button>
<label for="type_especes">Type liste espèce *</label>
<div class="select-wrapper">
<select id="type_especes" name="type_especes" required>
<option selected="selected" value="referentiel">Référentiel</option>
<option value="liste">Liste</option>
<option value="liste" title="remplir référentiel + envoyer csv">Liste + autres</option>
<option value="fixe">Espèce fixée</option>
</select>
</div>
<!--Submit-->
 
</form><!-- end #new-widget-form -->
<label for="referentiel">Référentiel *</label>
<input type="text" name="referentiel" id="referentiel" required pattern="([a-z]+?)*" title="Nom du référentiel ex. bdtfx" value="<?php echo isset($widget['referentiel']) ? $widget['referentiel'] : ''; ?>">
 
<form id="new-fields">
<h2>Ajouter des champs</h2>
<p class="message"><i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i> Attention : Ces nouveaux champs (tout comme le widget) ne seront pris en compte qu'une fois le formulaire validé</p>
</form><!-- #new-fields = fomulaire oû viennent s'insérer les champs supplémentaires -->
<!-- Bouton fichier-type à compléter -->
<div class="input-file-container">
<input type="file" class="input-file" name="especes" id="especes">
<label for="especes"class="label-file"><i class="fas fa-download"></i> Espèces</label>
</div>
<div class="remove-file button" name="remove-file" title="Supprimer le fichier"><i class="fas fa-times" aria-hidden="true"></i></div>
<a href="#" class="button fichier-type"><i class="fas fa-file-alt" aria-hidden="true"></i> Fichier type</a>
<div class="file-return especes hidden"></div>
</div><!-- end #profile-details-fields-section -->
 
<div class="row">
<div class="col-md-6">
<label class="add-fields">Ajouter champs</label>
<div class="button" id="add-fields" title="Ajouter un champ"><i class="fa fa-plus" aria-hidden="true"></i></div>
</div>
<div class="col-md-6">
<label class="validate-new-fields">Valider champs</label>
<div class="button disabled" id="validate-new-fields" title="Valider les champs supplémentaires"><i class="fa fa-check" aria-hidden="true"></i></div>
</div>
<!--Submit-->
<div class="submit complete-registration" id="submit-button">
<button href="#" type="submit" name="signup_submit" id="signup_submit" class="button" target="" title="Soumettre le nouveau widget"><i class="fas fa-trophy" aria-hidden="true"></i>&nbsp;Terminer</button>
</div>
<!--Submit-->
 
<hr>
</form><!-- end #new-widget-form -->
 
<form id="new-fields" autocomplete="off">
<h2>Ajouter des champs</h2>
<p class="message">
<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i>
&nbsp;Attention :
<br>
<i class="fa fa-bolt" aria-hidden="true" style="color:#B3C954"></i>
&nbsp;Le bouton "Valider" sert à valider les champs supplémentaires uniquement
<br>
<i class="fas fa-trophy" aria-hidden="true" style="color:#B3C954"></i>
&nbsp;Le bouton "Terminer" sert à envoyer la totalité du nouveau widget
</p>
</form><!-- #new-fields = fomulaire oû viennent s'insérer les champs supplémentaires -->
 
<div class="row">
<div class="col-md-4 col-sm-4 col-xs-4 buttons">
<label class="add-fields">Ajouter</label>
<div class="button" id="add-fields" title="Ajouter un champ"><i class="fa fa-plus" aria-hidden="true"></i></div>
</div>
<div class="col-md-4 col-sm-4 col-xs-4 buttons">
<label for="preview-field">Prévisualiser</label>
<div class="button" id="preview-field" name="preview-field" title="prévisualiser"><i class="fa fa-magic" aria-hidden="true"></i></div>
</div>
<div class="col-md-4 col-sm-4 col-xs-4 buttons">
<label class="validate-new-fields">Valider</label>
<div class="button" id="validate-new-fields" title="Valider les champs supplémentaires"><i class="fa fa-bolt" aria-hidden="true"></i></div>
</div>
</div>
 
<hr>
 
</div><!-- end .widget-blocks = tout le bloc de gauche-->
 
<div class="widget-blocks col-md-8 project">
<p class="message">
<?php if ($mode === 'modification') : ?>
Attention vous modifiez un widget déjà existant, le tag et la langue ne peuvent pas être changer.
S'il s'agit d'un projet type, en modifiant ce widget vous modifiez tous les widgets de ce type.
<?php else : ?>
Vous créez un widget, si vous choississez de le mettre dans un type, certains champs deviendront
obligatoires et la localisation (point ou rue) sera automatiquement déterminée.
<?php endif; ?>
</p>
<div class="widget-blocks col-md-8">
<!-- <iframe src="http://localhost/widget:cel:saisie2?projet=<?php echo isset($widget['projet'])?$widget['projet']:'base'; ?>" class="widget-renderer" height="100%" width="100%" ></iframe> -->
<div class="widget-renderer">
<div class="widget-renderer" style="background:rgba(248, 245, 239, 0.6);">
 
<div class="row">
 
<div class="col-md-4">
<img id="preview-logo" src="" alt="">
<div id="preview-header" class="row">
<div id="preview-logo" class="col-md-4">
<img src="" alt="" width="75%">
</div>
<div id="preview-title" class="col-md-8">
<h1></h1>
</div>
</div>
 
</div>
 
<div class="row">
<div id="preview-messages" class="row">
 
<div id="preview-description" class="col-md-6">
<div class="preview-description message"></div>
<div id="preview-description" class="col-md-7">
<div class="message">
<h3>
<span>Projet : </span>
<span class="projet-description"></span>
</h3>
<p class="preview-description"></p>
</div>
</div><!-- end #preview-description -->
 
<div id="preview-aide" class="message col-md-6">
<h3>Aide</h3>
<p>
Cet outil vous permet de partager simplement vos observations avec
le <a target="_blank" href="https://www.tela-botanica.org/site:accueil">réseau Tela Botanica</a>
(<a target="_blank" href="https://www.tela-botanica.org/page:licence">licence CC-BY-SA</a>).
Identifiez-vous bien pour ensuite retrouver et gérer vos données dans votre
<a target="_blank" href="https://www.tela-botanica.org/appli:cel"> Carnet en ligne</a>.
Créez jusqu'à 10 observations (avec 10Mo max d'images) puis partagez-les avec le bouton 'transmettre'.
Elles apparaissent immédiatement sur les
<a target="_blank" href="https://www.tela-botanica.org/site:botanique">cartes et galeries photos </a> du site.
</p>
<p class="discretion">
Pour toute question ou remarque,
<a href="https://www.tela-botanica.org/widget:reseau:remarques?service=cel&pageSource=http%3A%2F%2Flocalhost%2Fcel%2Fwidget%2Findex.php%2F%3Fprojet%3Dbase" target="_blank" onclick=
"
javascript:window.open(
this.getAttribute('href'),
'Tela Botanica - Remarques',
config='height=700, width=640, scrollbars=yes, resizable=yes'
);
return false;
">contactez-nous</a>
</p>
<div id="preview-aide" class="col-md-5">
<div class="message">
<h3>Aide</h3>
<p>
Cet outil vous permet de partager simplement vos observations avec
le <a target="_blank" href="https://www.tela-botanica.org/site:accueil">réseau Tela Botanica</a>
(<a target="_blank" href="https://www.tela-botanica.org/page:licence">licence CC-BY-SA</a>).
Identifiez-vous bien pour ensuite retrouver et gérer vos données dans votre
<a target="_blank" href="https://www.tela-botanica.org/appli:cel"> Carnet en ligne</a>.
Créez jusqu'à 10 observations (avec 10Mo max d'images) puis partagez-les avec le bouton 'transmettre'.
Elles apparaissent immédiatement sur les
<a target="_blank" href="https://www.tela-botanica.org/site:botanique">cartes et galeries photos </a> du site.
</p>
<p class="discretion">
Pour toute question ou remarque,
<a href="https://www.tela-botanica.org/widget:reseau:remarques?service=cel&pageSource=http%3A%2F%2Flocalhost%2Fcel%2Fwidget%2Findex.php%2F%3Fprojet%3Dbase" target="_blank" onclick=
"
javascript:window.open(
this.getAttribute('href'),
'Tela Botanica - Remarques',
config='height=700, width=640, scrollbars=yes, resizable=yes'
);
return false;
">contactez-nous</a>
</p>
</div>
</div>
</div><!-- end #preview-aide -->
 
377,7 → 397,7
 
<form id="form-supp" role="form" autocomplete="on">
<div id="zone-supp" class="row align-items-center">
<div class="col-md-6"></div>
<div class="col-md-6 preview-container"></div>
</div>
</form>
 
392,6 → 412,23
</div>
</div>
</div>
<div id="help-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="help-modal-label" style="display: none;" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="help-modal-label"></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body" id="print_content"></div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="<?php echo $url_base; ?>modules/manager/squelettes/js/manager.js"></script>
</script>
</body>
</html>
/trunk/widget/modules/manager/squelettes/css/manager.css
1,6 → 1,16
@CHARSET "UTF-8";
 
.clear {
body {
font-family: Ubuntu,Verdana,sans-serif !important;
}
 
div.widget-blocks {
box-sizing: border-box;
padding: 3rem;
margin-bottom: 5rem;
}
 
#zone-appli #register-page .widget-blocks .clear {
clear: both;
height: 0;
 
18,65 → 28,142
}
 
h1#widget-titre {
font-size: 2.6rem;
font-size: 3rem;
font-weight: 700;
line-height: 3.2rem;
margin: 0;
position: relative;
color: #232323;
font-family: Ubuntu,sans-serif;
}
 
h2 {
font-family: Muli,sans-serif;
font-size: 21.5px;
font-weight: 700;
#zone-appli #register-page .widget-blocks h2 {
font-size: 2.3rem;
line-height: 1.15;
}
 
div.widget-blocks {
box-sizing: border-box;
padding: 1rem;
#zone-appli #register-page .widget-blocks h3 {
font-size: 2rem;
margin-top: 0.5rem;
}
 
.message {
#zone-appli #register-page #group-settings-form .widget-blocks button,
#group-settings-form .button {
font-size: 1.6rem;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks input,
#zone-appli #register-page #group-settings-form .widget-blocks select,
#zone-appli #register-page #group-settings-form .widget-blocks textarea {
font-size: 1.3rem;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .message {
background-color: #f8f5ef;
color: #232323;
padding: 1rem;
border-radius: 0.3rem;
font-size: 1.3rem;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .hidden {
display: none;
}
 
/* Aperçu du widget */
.widget-renderer {
border:none;
padding: 3rem;
height: 300rem;
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer {
border-radius: 0.3rem;
padding: 0 3rem 3rem 3rem;
min-height: 100%;
width: 90%;
pointer-events: none;
overflow: hidden
width: 100%;
/*pointer-events: none;*/
overflow: hidden;
/*background: rgba(248, 245, 239, 0.6);*/
}
 
.register-section{
margin-bottom: 1rem;
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer h1 {
font-size: 3rem;
line-height: 3.2rem;
width: 100%;
color: #232323;
margin: 1rem;
}
 
/* Formulaires du nouveau widget*/
#group-settings-form {
font-family: Muli,sans-serif;
float: none;
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer h1,
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer h2 span,
#zone-appli #register-page #group-settings-form .widget-blocks h3 .field-title,
#zone-appli #register-page #group-settings-form .widget-blocks .list-label,
#zone-appli #register-page #group-settings-form .widget-blocks label {
text-transform: capitalize;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer h2 {
width: 100%;
color: #232323;
margin: 1rem;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .and-help {
width: 80%;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .and-help.input-file-container {
width: 73.8%;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer label.and-help,
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .list-label.and-help {
margin-bottom:1.5rem;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer label.and-help,
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .list-label.and-help,
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .select-wrapper.and-help,
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .multiselect.and-help {
display:inline-block;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks form {
margin-bottom: 2rem;
position: absolute;
}
 
#group-settings-form label {
#zone-appli #register-page #group-settings-form .widget-blocks .list-label,
#zone-appli #register-page #group-settings-form .widget-blocks label {
color: #606060;
display: block;
font-size: 1.5rem;
margin-bottom: 0.4rem;
margin-top: 2rem;
font-weight: 700;
font-weight: 300;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .checkbox,
#zone-appli #register-page #group-settings-form .widget-blocks .radio {
padding-left: 0;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .checkbox label,
#zone-appli #register-page #group-settings-form .widget-blocks .radio label{
padding-left: 1rem;
}
 
#preview-formulaire,
#preview-header,
#preview-messages {
padding: 2rem;
border-radius: 0.3rem;
background-color: rgba(255, 255, 255, 0.8);
margin-top: 2rem;
}
 
.register-section{
margin-bottom: 1rem;
}
 
/* Formulaires du nouveau widget*/
#group-settings-form {
float: none;
}
 
#group-settings-form #langue{
width: 100%;
border: 0.1rem solid #ddd;
86,71 → 173,138
}
 
/* Styles des champs required*/
#group-settings-form .register-section input[required],
#group-settings-form .register-section select[required],
#group-settings-form #new-fields input[required],
#group-settings-form #new-fields select[required] {
border: 0.2rem solid rgba(0, 159, 184, 0.5);
#group-settings-form .register-section input:required,
#group-settings-form .register-section select:required,
#group-settings-form #new-fields input:required,
#group-settings-form #new-fields select:required {
border: 0.2rem solid #F8DFD3;
}
 
/**** Styles des boutons ****/
 
/* Positionnement visuel du bouton submit pour qu'il reste
sous les nouveaux champs alors que dans le dom
il est positionné avant les nouveaux champs */
#group-settings-form #submit-button {
#zone-appli #register-page #group-settings-form .widget-blocks #submit-button {
position: absolute;
bottom: -50px;
bottom: -20px;
}
 
/**** Styles des boutons ajouter et supprimer ****/
#group-settings-form #add-fields.button,
#group-settings-form .add-value-button.button {
#zone-appli #register-page #group-settings-form .widget-blocks #add-fields.button,
#zone-appli #register-page #group-settings-form .widget-blocks .add-value-button.button {
background-color: #009fb8;
}
 
#group-settings-form .disabled,
#group-settings-form .validated {
background-color: #eeeeee !important;
#zone-appli #register-page #group-settings-form .widget-blocks #add-fields.button:hover,
#zone-appli #register-page #group-settings-form .widget-blocks #add-fields.button:focus,
#zone-appli #register-page #group-settings-form .widget-blocks .add-value-button.button:hover,
#zone-appli #register-page #group-settings-form .widget-blocks .add-value-button.button:focus {
background-color: rgba(0, 159, 184, 0.7);
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .remove-field.button,
#zone-appli #register-page #group-settings-form .widget-blocks .remove-value.button,
#zone-appli #register-page #group-settings-form .widget-blocks .remove-file {
background-color: #ff5d55;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .remove-field.button:hover,
#zone-appli #register-page #group-settings-form .widget-blocks .remove-field.button:focus,
#zone-appli #register-page #group-settings-form .widget-blocks .remove-value.button:hover,
#zone-appli #register-page #group-settings-form .widget-blocks .remove-value.button:focus,
#zone-appli #register-page #group-settings-form .widget-blocks .remove-file:hover,
#zone-appli #register-page #group-settings-form .widget-blocks .remove-file:focus {
background-color: rgba(255, 93, 85, 0.7);
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .help-button {
background-color: #ea9973;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .help-button,
#zone-appli #register-page #group-settings-form .widget-blocks .remove-file {
margin-left: 0.5rem;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .remove-file,
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .help-button {
border-radius: 0.2rem;
padding: 1.1rem 1rem;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .help-button:hover,
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .help-button:focus,
#zone-appli #register-page #group-settings-form .widget-blocks .fichier-type:hover,
#zone-appli #register-page #group-settings-form .widget-blocks .fichier-type:focus {
background-color: rgba(234, 153, 115, 0.7);
}
/*
#zone-appli #register-page #group-settings-form .widget-blocks .remove-file i {
font-size: 1.6rem;
}*/
 
#zone-appli #register-page #group-settings-form .widget-blocks .fichier-type {
text-transform: capitalize;
font-size: 1.5rem;
margin-left: 0;
padding: 0.8rem;
background-color: #ea9973;
text-decoration: none;
color: #ffffff;
border-radius: 0.2rem;
}
 
 
/**** style du formulaire des nouveaux champs après validation ****/
#zone-appli #register-page #group-settings-form .widget-blocks .disabled,
#zone-appli #register-page #group-settings-form .widget-blocks .validated {
background-color: #eeeeee;
cursor: default;
pointer-events: none;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .invalid {
box-shadow : 0 0 1.5px 1px red;
}
 
/* Le picto validation apparait en vert */
#group-settings-form .validated i {
color: #c3d45d;
cursor: default;
}
 
#group-settings-form #add-fields.button:hover,
#group-settings-form #add-fields.button:focus,
#group-settings-form .add-value-button.button:hover,
#group-settings-form .add-value-button.button:focus {
background-color: rgba(0, 159, 184, 0.7);
/* La couleur de fond du formulaire lui-même ne change pas */
#zone-appli #register-page #group-settings-form .widget-blocks #new-fields.disabled{
background-color: initial;
}
 
#group-settings-form .remove-field.button,
#group-settings-form .remove-value.button {
background-color: #ff5d55;
}
 
#group-settings-form .remove-field.button:hover,
#group-settings-form .remove-field.button:focus,
#group-settings-form .remove-value.button:hover,
#group-settings-form .remove-value.button:focus {
background-color: rgba(255, 93, 85, 0.7);
}
/*************************************************/
 
/**** Style des select ****/
#group-settings-form select {
background-color: #fff;
#group-settings-form select,
#group-settings-form .selectBox select {
background-color: rgba(0, 159, 184, 0.5);
border: 0.1rem solid #ddd;
}
 
#group-settings-form select {
font-size: 3rem;
font-weight: 900;
}
 
#group-settings-form select,
#group-settings-form select[required] {
 
#group-settings-form select:required,
#group-settings-form .selectBox select,
#group-settings-form .selectBox select:required {
width: 100%;
color:#333;
color:#fff;
border-radius: 0.3rem;
padding:0.5rem;
padding: 0.8rem;
line-height: 1.15;
}
 
#group-settings-form select,
#group-settings-form select:required {
text-transform:none;
 
/* On retire la 'flèche' par defaut */
162,11 → 316,39
}
 
#group-settings-form .select-wrapper,
#group-settings-form #new-fields .select-wrapper {
#group-settings-form #new-fields .select-wrapper,
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .selectBox {
position: relative;
border: 0.1rem solid #ddd;
border-radius: 0.3rem;
}
 
#group-settings-form .select-wrapper::after {
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .overSelect {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .checkboxes {
border: 0.1rem solid #ddd;
border-radius: 0 0.3rem;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .label label,
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .checkboxes label {
display: block;
padding: 0.5rem;
line-height: 1.15;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer #checkboxes label:hover {
background-color: #1e90ff;
}
 
#group-settings-form .select-wrapper::after,
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .selectBox::after {
/* Ajout et style d'une "flèche bas" */
content: '⌄';
pointer-events: none;
175,10 → 357,12
right: 0.5rem;
font-size: 3rem;
font-weight: 900;
color: #606060;
color: #fff;
}
 
#group-settings-form #new-fields .select-wrapper::after {
#group-settings-form #new-fields .select-wrapper::after,
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .selectBox::after,
#zone-appli #register-page #group-settings-form .widget-blocks .widget-renderer .select-wrapper::after {
/* correction de la position de la flèche
dans le formulaire des champs ajoutés*/
top: -10px;
188,8 → 372,9
/**** Affichage des nouveaux champs ****/
 
/* Mieux distinguer les différentes strates */
#group-settings-form .new-field,
#group-settings-form fieldset.new-field,
#group-settings-form .new-value {
position: static;
margin: 1rem 0;
padding: 2rem;
border-radius: 0.3rem;
210,18 → 395,19
#group-settings-form .input-file-container,
#group-settings-form #new-fields .input-file-container {
position: relative;
width: 100%;
width: 86.9%;
display: inline-block;
}
 
#group-settings-form .label-file,
#group-settings-form #new-fields .label-file {
display: block;
padding: 1rem;
padding: 0.7rem;
background: #009FB8;
color: #fff !important;
font-size: 1.5rem;
cursor: pointer;
border-radius: 0.2rem;
border-radius: 0.3rem;
}
 
#group-settings-form .input-file,
264,7 → 450,38
#group-settings-form .file-return,
#group-settings-form #new-fields .file-return {
font-style: italic;
font-size: 1.5rem;
font-size: 1rem;
font-weight: bold;
background-color: #fff;
padding: 2rem;
border-radius: 0.3rem;
}
 
#zone-appli #register-page #group-settings-form .widget-blocks input[type="date"],
#zone-appli #register-page #group-settings-form .widget-blocks input[type="number"],
#zone-appli #register-page #group-settings-form .widget-blocks input[type="email"] {
line-height: 1.15;
margin: 0;
padding: 1rem;
border: 0.1rem solid #ddd;
border-radius: 0.3rem;
width: 100%;
box-sizing: inherit;
}
 
/*************************************/
 
#signup_submit {
font-weight: 700;
}
 
.modal-header .close {
margin-top: -2rem !important;
}
 
@media screen and (min-width: 992px) {
div.widget-blocks {
position: sticky;
top: 20px;
}
}