Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 3166 Rev 3167
Line 1... Line -...
1
function nouveauChamps(html){
-
 
2
	var html =
-
 
3
		'<div>'+
-
 
4
			'<label for="nom_champs">Nom du champ</label>'+
-
 
5
			'<input type="text" value="Nom du Champs" id="nom_champs">'+
-
 
6
 
-
 
7
			'<label for="type_champ">Type de champ</label>'+
-
 
8
			'<select name="type_champ" id="type_champ">'+
-
 
9
				'<option value="text">Champ texte</option>'+
-
 
10
				'<option value="textarea">Champ rédaction</option>'+
-
 
11
				'<option value="select">Menu déroulant</option>'+
-
 
12
				'<option value="checkbox">Cases à cocher</option>'+
-
 
13
				'<option value="radio">Boutons radio</option>'+
-
 
14
				'<option value="date">Calendrier</option>'+
-
 
15
				'<option value="file">Téléchargement</option>'+
-
 
16
				'<option value="hidden">Caché</option>'+
-
 
17
				'<option value="button">Bouton</option>'+
-
 
18
			'</select>'+
1
"use strict";
19
		'<div>';
-
 
20
 
-
 
21
 
-
 
22
	$('#profile-details-fields-section').append(html);
-
 
23
}
-
 
24
 
-
 
25
function enregistrerNouveauChamps() {
-
 
26
	var $typeChamp = $('#type_champ'),
-
 
27
		$valeurNouveauChamp = [];
-
 
28
	$type_champ.change(function() {
-
 
29
		$valeurNouveauChamp = $(this).val();
-
 
30
		console.log($valeurNouveauChamp);
-
 
31
	});
-
 
32
}
-
 
Line -... Line 2...
-
 
2
 
-
 
3
/***************************
-
 
4
 *  Lancement des scripts  *
Line 33... Line 5...
33
 
5
 ***************************/
-
 
6
 
-
 
7
jQuery( document ).ready( function() {
-
 
8
 
Line 34... Line 9...
34
 
9
  // Initialisation d'un identifiant de champ
35
function inputFile() {
10
  var fieldId = 1;
Line 36... Line -...
36
 
-
 
37
	// ajout de la classe JS à HTML
-
 
38
		$('html').addClass('js');
-
 
39
 
-
 
40
		// initialisation des variables
-
 
41
		var $fileInput  = $( ".input-file" ),
-
 
42
		    $button     = $( ".label-file" );
-
 
43
 
-
 
44
		// action lorsque la "barre d'espace" ou "Entrée" est pressée
-
 
45
		$button.on( 'keydown', function( event ) {
-
 
46
		    if ( event.keyCode == 13 || event.keyCode == 32 ) {
-
 
47
		        $fileInput.focus();
-
 
48
		    }
-
 
49
		});
-
 
50
 
-
 
51
		// action lorsque le label est cliqué
-
 
52
		$button.click(function() {
-
 
53
			$fileInput.focus();
11
 
54
			return false;
-
 
55
		});
-
 
56
 
-
 
57
		// affiche un retour visuel dès que input:file change
-
 
58
		$fileInput.change( function(event) {
-
 
59
			var file = event.target.files[0]
-
 
60
			var $theReturn = $('.' + $(this).attr('id'));
-
 
61
 
-
 
62
			$theReturn.text(file.name);
-
 
63
 
-
 
64
			if(file.type.match('image')) {
-
 
65
				var tmppath = URL.createObjectURL(file);
-
 
66
				$theReturn.append('<img src="' + tmppath + '" width="50%">');
-
 
67
			}
-
 
68
		});
-
 
69
}
12
  // Ajout de nouveaux champs
70
 
-
 
71
jQuery(document).ready(function() {
-
 
72
 
-
 
73
	inputFile()
-
 
74
 
-
 
75
	// var $projet = $('#projet');
-
 
76
 
-
 
77
	// $projet.on('change', function( event ) {
-
 
78
	// 	console.log($projet.val());
-
 
79
	// 	$.ajax({
-
 
80
	// 		url : 'http://localhost/widget:cel:manager',
-
 
81
	// 		type : 'post',
-
 
82
	// 		datatype : 'mode=creation&projet='+ $projet.val()
-
 
83
	// 	});
-
 
84
	// });
-
 
85
 
-
 
Line 86... Line 13...
86
 
13
  onClickAddNewFields( fieldId );
-
 
14
 
-
 
15
  // Affichage des images ou nom des documents importés
-
 
16
  inputFile();
-
 
17
 
-
 
18
});
-
 
19
 
-
 
20
/***********************************************************
-
 
21
 *  Fonctions pour la création des champs supplémentaires  *
-
 
22
 ***********************************************************/
-
 
23
 
-
 
24
// Logique globale pour l'ajout de nouveaux champs
-
 
25
function onClickAddNewFields( fieldId ) {
-
 
26
 
-
 
27
  $( '#add-fields' ).click( function() {
-
 
28
 
-
 
29
    // Ajout d'un nouveau champ
-
 
30
    displayNewField( fieldId );
-
 
31
 
-
 
32
    // Suppression d'un champ
-
 
33
    onClickRemoveField();
-
 
34
 
-
 
35
    $('#submit-button').before(
-
 
36
      '<p>hello</p>'+
-
 
37
      '<input type="hidden" class="name-field-submit" name="name" data-id="' + fieldId+ '" value="">'
-
 
38
    );
-
 
39
 
-
 
40
    // Les images ou les nom des documents importés doivent aussi
-
 
41
    // s'afficher dans les champs ajoutés
-
 
42
    inputFile();
-
 
43
 
-
 
44
    fieldId++;
-
 
45
  });
-
 
46
}
-
 
47
 
-
 
48
// Création et logique pour un nouveau champ
-
 
49
function newField( fieldId ) {
-
 
50
 
-
 
51
  // Le html des nouveaux champs à insérer dans le dom
-
 
52
  var fieldsHtml =
-
 
53
    '<div data-id="' + fieldId + '" class="new-field">'+
-
 
54
      '<h3>Nouveau champ :<br><strong class="field-title"></strong></h3>'+
-
 
55
 
-
 
56
      // Nom du champ
-
 
57
      '<label for="nom-champs" title="Donnez titre à votre champ">Nom du champ</label>'+
-
 
58
      '<input type="text" class="nom-champs" placeholder="Donnez titre à votre champ" required>'+
-
 
59
 
-
 
60
      // Type de champ
-
 
61
      '<label for="type-champ" title="Quel type de champ">Type de champ</label>'+
-
 
62
      '<div class="select-wrapper add-field-select">'+
-
 
63
        '<select name="type-champ" class="type-champ" required>'+
-
 
64
          '<option value="text" selected="selected">Champ texte</option>'+
-
 
65
          '<option value="email">Champ email</option>'+
-
 
66
          '<option value="textarea">Champ rédaction</option>'+
-
 
67
          '<option value="select">Menu déroulant</option>'+
-
 
68
          '<option value="checkbox">Cases à cocher</option>'+
-
 
69
          '<option value="list-checkbox">liste Cases à cocher</option>'+
-
 
70
          '<option value="radio">Boutons radio</option>'+
-
 
71
          '<option value="date">Calendrier</option>'+
-
 
72
          '<option value="file">Téléchargement</option>'+
-
 
73
          '<option value="range">Curseur (curseur entre 2 bornes)</option>'+
-
 
74
          '<option value="number">Nombre</option>'+
-
 
75
        '</select>'+
-
 
76
      '</div>'+
-
 
77
 
-
 
78
      // Clé du champ
-
 
79
      '<label for="cle" title="Clé du champ (son nom dans la base de données)">'+
-
 
80
        'Clé du champ en camelCase (ecritureChameau)<br>'+
-
 
81
        '<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i> '+
-
 
82
        'Pas d\'accents ou de cédille, pas de caractères spéciaux.'+
-
 
83
      '</label>'+
-
 
84
      '<input type="text" name="cle" class="cle" placeholder="Clé du champ" required title="Clé du champ (son nom dans la base de données)">'+
-
 
85
 
-
 
86
      // Tooltip
-
 
87
      '<label for="field-tooltip" title="Ajoutez une info-bulle">Info-bulle</label>'+
-
 
88
      '<input type="text" name="field-tooltip" class="field-tooltip" placeholder="Quelques mots">'+
-
 
89
 
-
 
90
      // Import d'une image ou d'un pdf d'aide à afficher en popup
-
 
91
      '<div class="input-file-container">'+
-
 
92
        '<input type="file" class="input-file" name="help" id="help" accept="application/pdf, image/*, video/*">'+
-
 
93
        '<label for="help" class="label-file"><i class="fas fa-download"></i>Image ou pdf d\'aide (popup)</label>'+
-
 
94
      '</div>'+
-
 
95
      '<div class="file-return help"></div>'+
-
 
96
 
-
 
97
      '<div class="row">'+
-
 
98
 
-
 
99
        // Checkbox "champ requis"
-
 
100
        '<div class="col-md-5">'+
-
 
101
          '<label for="required-field" title="Ce champ est obligatoire">Champ requis ?</label>'+
-
 
102
          '<input type="checkbox" name="required-field" id="required-field">'+
-
 
103
        '</div>'+
-
 
104
 
-
 
105
        // Bouton supprimer le champ
-
 
106
        '<div class="col-md-5">'+
-
 
107
          '<label for="remove-field">Supprimer ce champ</label>'+
-
 
108
          '<div class="remove-field button" name="remove-field" data-id="' + fieldId + '" title="Supprimer un champ"><i class="fa fa-times" aria-hidden="true"></i></div>'
-
 
109
        '</div>'+
-
 
110
 
-
 
111
      '</div>'+
-
 
112
 
-
 
113
    '</div>';
-
 
114
 
-
 
115
  $( '#new-fields' ).append( fieldsHtml );
-
 
116
 
-
 
117
  // Le nom du champ est affiché dès qu'il est renseigné
-
 
118
  onChangeDisplayFieldName( fieldId );
-
 
119
 
-
 
120
  // En fonction du type de champ choisi on demande les informations correspondantes
-
 
121
  onChangeFieldTypeCollectDetails( fieldId );
-
 
122
}
-
 
123
 
-
 
124
// Un peu d'animation de l'affichage d'un nouveau champ
-
 
125
function displayNewField( fieldId ) {
-
 
126
 
-
 
127
  newField( fieldId );
-
 
128
  $( '.new-field[data-id="' + fieldId + '"]').hide().removeClass( 'hidden' ).show( 200 );
-
 
129
}
-
 
130
 
-
 
131
// Logique pour le bouton supprimer tout un champ
-
 
132
function onClickRemoveField() {
-
 
133
 
-
 
134
  $( '.remove-field.button' ).click( function() {
-
 
135
    $( '.new-field[data-id="' + $( this ).attr( 'data-id' ) + '"]').fadeOut( 200 , this.remove() );
-
 
136
  });
-
 
137
}
-
 
138
 
-
 
139
// Affichage du nom du champ dès qu'il est renseigné
-
 
140
function onChangeDisplayFieldName( fieldId ) {
-
 
141
 
-
 
142
  $('.new-field[data-id="' + fieldId + '"] .nom-champs').change( function() {
-
 
143
    var fieldName = $( this ).val();
-
 
144
    $( '.new-field[data-id="' + fieldId + '"] .field-title' ).text( fieldName );
-
 
145
    $( '.name-field-submit[data-id="' + fieldId + '"]' ).val( fieldName );
-
 
146
  });
-
 
147
}
-
 
148
 
-
 
149
/**** Recueil des informations et détails qui dépendent du type de champ choisi ****/
-
 
150
 
-
 
151
// Logique de recueil d'informations en fonction du type de champ choisi
-
 
152
function onChangeFieldTypeCollectDetails( fieldId ) {
-
 
153
 
-
 
154
    var fieldDetails =
-
 
155
      // Placeholder (champ type text par défaut)
-
 
156
      '<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>'+
-
 
157
      '<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">';
-
 
158
    // On insère les champs par défaut de recueil d'informations
-
 
159
    displayFieldDetailsCollect( fieldId , fieldDetails );
-
 
160
 
-
 
161
  $( '.new-field[data-id="' + fieldId + '"] .type-champ' ).change( function() {
-
 
162
 
-
 
163
    // on intialise L'id pour les listes la variable qui contiendra un id pour chaque option
-
 
164
    var valueId = 1;
-
 
165
 
-
 
166
    // Si on hésite on qu'on se trompe dans la liste :
-
 
167
    // les champs de détails de l'option précédente doivent être supprimés
-
 
168
    $( '.new-field[data-id="' + fieldId + '"] .field-details' ).remove();
-
 
169
 
-
 
170
    // $( this ).val() = le type de champ choisi dans select ".type-champ"
-
 
171
    switch( $( this ).val() ) {
-
 
172
 
-
 
173
      case 'number':
-
 
174
      case 'range':
-
 
175
        fieldDetails =
-
 
176
          // Placeholder
-
 
177
          '<label for="aide-saisie" title="Deux ou 3 mots ou chiffres à comprendre ce que doit contenir le champ (ex: min 20, 10 par 10, etc.)">Texte d\'aide à la saisie</label>'+
-
 
178
          '<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">'+
-
 
179
 
-
 
180
          // Valeur par défaut
-
 
181
          '<label for="default" title="Valeur par défaut">Valeur par défaut (1 par défaut)</label>'+
-
 
182
          '<input type="number" name="default" class="default" value="1">'+
-
 
183
 
-
 
184
          // Incrémentation ( attribut step="" )
-
 
185
          '<label for="pas" title="De 10 en 10, de 0.5 en 0.5, etc.">Le "pas" d\'incrémentation,<br>(attention, pas devirgule mais un point),<br>par defaut la valeur augmentera de 1 en 1</label>'+
-
 
186
          '<input type="number" name="pas" class="pas" value="1">';
-
 
187
 
-
 
188
          // Min
-
 
189
          '<label for="min" title="valeur min">Valeur minimale</label>'+
-
 
190
          '<input type="number" name="min" class="min" value="1">'+
-
 
191
 
-
 
192
          // Max
-
 
193
          '<label for="max" title="valeur max">Valeur maximale</label>'+
-
 
194
          '<input type="number" name="max" class="max" value="1">';
-
 
195
        break;
-
 
196
 
-
 
197
      case 'date':
-
 
198
        fieldDetails =
-
 
199
          // Date min
-
 
200
          '<label for="min" title="valeur min">Valeur minimale</label>'+
-
 
201
          '<input type="date" name="min" class="min" value="1">'+
-
 
202
 
-
 
203
          // Date max
-
 
204
          '<label for="max" title="valeur max">Valeur maximale</label>'+
-
 
205
          '<input type="date" name="max" class="max" value="1">';
-
 
206
        break;
-
 
207
 
-
 
208
      case 'select':
-
 
209
      case 'checkbox':
-
 
210
      case 'list-checkbox':
-
 
211
      case 'radio':
-
 
212
        fieldDetails =
-
 
213
          // Todo : afficher les noms donnés dans le select ".type-champ"
-
 
214
          // plutot que le nom des éléments html
-
 
215
          '<p class="message">Ajoutez les valeurs de ' + $( this ).val() + '</p>'+
-
 
216
 
-
 
217
          // Bouton ajout d'une valeur à la liste
-
 
218
          '<label for="add-value" class="add-value" title="Ajouter une valeur à la liste">Ajouter une valeur</label>'+
-
 
219
          '<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>'+
-
 
220
 
-
 
221
          // checkbox ajouter une valeur "Autre:"
-
 
222
          '<label for="option-other-value" title="Ajouter une option \'Autre:\' à la fin">Valeur "Autre"</label>'+
-
 
223
          '<input type="checkbox" class="option-other-value" name="option-other-value" title="Ajouter une option \'Autre\' à la fin">';
-
 
224
        break;
-
 
225
 
-
 
226
      case 'file':
-
 
227
        fieldDetails = '';
-
 
228
      case 'text':
-
 
229
      case 'textarea':
-
 
230
      case 'email':
-
 
231
      default:
-
 
232
        fieldDetails =
-
 
233
        // Placeholder
-
 
234
        '<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>'+
-
 
235
        '<input type="text" name="aide-saisie" class="aide-saisie" placeholder="Ce que doit contenir le champ">';
-
 
236
        break;
-
 
237
    }
-
 
238
 
-
 
239
    if( fieldDetails.length > 0 ) {
-
 
240
      //ne pas ajouer une div vide s'il n'y pas d'informations à demander
-
 
241
      displayFieldDetailsCollect( fieldId , fieldDetails );
-
 
242
    }
-
 
243
 
-
 
244
    // Ajout des valeurs possibles
-
 
245
    // lorsque le champ est une liste ou case à cocher
-
 
246
    onClickAddNewValueToList( fieldId , valueId );
-
 
247
 
-
 
248
  });
-
 
249
}
-
 
250
 
-
 
251
// Insertion dans le dom des champs de recueil d'informations
-
 
252
function displayFieldDetailsCollect( fieldId , fieldDetails ) {
-
 
253
 
-
 
254
  $( '.new-field[data-id="' + fieldId + '"] .add-field-select' ).after( '<div class="field-details">' + fieldDetails + '</div>' );
-
 
255
}
-
 
256
 
-
 
257
/**** Ajout des valeurs (options) des "champs de listes" (select, checkbox, radio, etc.) ****/
-
 
258
 
-
 
259
// Logique d'ajout des options des listes (deroulantes, cases à cocher etc.)
-
 
260
function onClickAddNewValueToList( fieldId , valueId ) {
-
 
261
 
-
 
262
  $( '.new-field[data-id="' + fieldId + '"] .add-value-button' ).click( function() {
-
 
263
 
-
 
264
    var valueHtml =
-
 
265
      '<div class="new-value" data-list-value-id="' + valueId +'">'+
-
 
266
 
-
 
267
        // Recueil d'une valeur de la liste
-
 
268
        '<label for="list-value">Valeur:</label>'+
-
 
269
        '<input type="text" name="list-value" class="list-value" placeholder="Une des valeurs de la liste">'+
-
 
270
 
-
 
271
        '<div class="row">'+
-
 
272
 
-
 
273
          '<div class="col-md-5">'+
-
 
274
 
-
 
275
            // Checkbox "valeur pas défaut" de la liste
-
 
276
            '<label for="is-defaut-value" title="Ceci est la valeur par défaut">Valeur par défaut</label>'+
-
 
277
            '<input type="checkbox" name="is-defaut-value" class="is-defaut-value">'+
-
 
278
 
-
 
279
          '</div>'+
-
 
280
 
-
 
281
          '<div class="col-md-5">'+
-
 
282
 
-
 
283
            // Bouton "supprimer la valeur" de la liste
-
 
284
            '<label for="remove-value">Supprimer valeur</label>'+
-
 
285
            '<div class="remove-value button" name="remove-value" data-list-value-id="' + valueId + '" title="Supprimer une valeur"><i class="fa fa-times" aria-hidden="true"></i></div>'
-
 
286
 
-
 
287
          '</div>'+
-
 
288
 
-
 
289
        '</div>'+
-
 
290
      '</div>';
-
 
291
 
-
 
292
    $( '.new-field[data-id="' + fieldId + '"] .add-value' ).before( valueHtml );
-
 
293
 
-
 
294
    // Pouvoir supprimer une valeur
-
 
295
    onClickRemoveListValue( fieldId );
-
 
296
 
-
 
297
    // s'assurer qu'il n'y a qu'une valeur par défaut cochée dans les listes
-
 
298
    onClickDefaultValueRemoveOthers( fieldId );
-
 
299
 
-
 
300
    valueId++;
-
 
301
  });
-
 
302
}
-
 
303
 
-
 
304
// Logique pour le bouton supprimer une valeur
-
 
305
function onClickRemoveListValue( fieldId ) {
-
 
306
 
-
 
307
  $('.new-field[data-id="' + fieldId + '"] .remove-value.button').click( function() {
-
 
308
    $( '.new-field[data-id="' + fieldId + '"] .new-value[data-list-value-id="' + $( this ).attr( 'data-list-value-id' ) + '"]' ).fadeOut( 200 , this.remove() );
-
 
309
  });
-
 
310
}
-
 
311
 
-
 
312
// Dans une liste il ne peut y avoir qu'une valeur pas défaut cochée
-
 
313
function onClickDefaultValueRemoveOthers( fieldId ) {
-
 
314
 
-
 
315
  $( '.new-field[data-id="' + fieldId + '"] .is-defaut-value' ).click( function() {
-
 
316
    $( '.new-field[data-id="' + fieldId + '"] .is-defaut-value' ).not( $( this ) ).removeAttr('checked');
-
 
317
  });
-
 
318
}
-
 
319
 
-
 
320
 
-
 
321
/****************************************
-
 
322
 *  Fonctions pour afficher les images  *
-
 
323
 *  ou les nom de fichers importés      *
-
 
324
 ****************************************/
-
 
325
 
-
 
326
// Logique d'affichage pour le input type=file
-
 
327
function inputFile() {
-
 
328
 
-
 
329
  // initialisation des variables
-
 
330
  var $fileInput  = $( ".input-file" ),
-
 
331
      $button     = $( ".label-file" );
-
 
332
 
-
 
333
  // action lorsque la "barre d'espace" ou "Entrée" est pressée
-
 
334
  $button.on( 'keydown', function( event ) {
-
 
335
    if ( event.keyCode == 13 || event.keyCode == 32 ) {
-
 
336
      $fileInput.focus();
-
 
337
    }
-
 
338
  });
-
 
339
 
-
 
340
  // action lorsque le label est cliqué
-
 
341
  $button.click(function() {
-
 
342
    $fileInput.focus();
-
 
343
    return false;
-
 
344
  });
-
 
345
 
-
 
346
  // affiche un retour visuel dès que input:file change
-
 
347
  $fileInput.change( function( event ) {
-
 
348
    var file = event.target.files[0],
-
 
349
      $theReturn = $( '.' + $( this ).attr( 'id' ) );
-
 
350
 
-
 
351
    // affichage du nom du fichier
-
 
352
    $theReturn.text( file.name );
-
 
353
 
-
 
354
    // si le fichier est une image on l'affiche
-
 
355
    if( file.type.match( 'image' ) ) {
-
 
356
      // temporairement retrouver le chemin
-
 
357
      // de l'image qui a été chagée, pour affichage
-
 
358
      var tmppath = URL.createObjectURL( file );