Subversion Repositories eFlore/Applications.eflore-consultation

Rev

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

Rev Author Line No. Line
119 aurelien 1
/**-------------------------- Objets globaux -----------------------------------*/
2
/*
3
 * Les variables suivantes sont ajoutée automatiquement dans le squelette du moteur de
4
 * recherche par php, elles sont commentées ici pour qu'elles n'aient pas l'air
5
 * de sortir de la cuisse de Jupiter
6
 *
457 jpm 7
 * var AUTOCOMPLETION_ELEMENTS_NBRE : indique le nombre d'éléments à afficher dans la liste d'autocomplétion.
8
 *
9
 * var URL_SERVICE_AUTOCOMPLETION_NOM_SCI : url de base du service de complétion de noms scientifiques
119 aurelien 10
 * pour le projet en cours de consultation.
11
 * Exemple : http://localhost/service:eflore:0.1/bdtfx/noms?recherche=etendue&retour.format=min&masque=Ace%mo
12
 *
457 jpm 13
 * var URL_SERVICE_AUTOCOMPLETION_NOM_VERNA : url de base du service de complétion de noms vernaculaires
119 aurelien 14
 * pour le projet en cours de consultation.
131 delphine 15
 * Exemple : http://localhost/service:eflore:0.1/nvjfl/noms-vernaculaires?recherche=etendue&retour.format=oss&masque=aca&masque.lg=fra
119 aurelien 16
 *
457 jpm 17
 * var VALEUR_DEFAUT_NOM_SCI : Contient la valeur par défaut affichée dans le formulaire en mode sci
119 aurelien 18
 * Exemple: Rechercher un nom scientifique
457 jpm 19
 *
20
 * var VALEUR_DEFAUT_NOM_VERNA : Contient la valeur par défaut affichée dans le formulaire en mode verna
119 aurelien 21
 * Exemple: Recherche un nom commun
22
 */
23
 
724 mathilde 24
var champs_ts = ["#au","#and","#anf","#nom","#bib"];
25
 
457 jpm 26
$(document).ready(function() {
724 mathilde 27
	ajouterAutocompletion();
28
	ajouterActionClicSurTexteRecherche(champs_ts);
29
	gererAffichageValeursParDefaut(champs_ts);
30
	afficherValeurParDefaut(champs_ts);
457 jpm 31
});
119 aurelien 32
 
457 jpm 33
/**------------------- Fonctions de gestion de l'autocompletion ---------------------------------*/
724 mathilde 34
function ajouterAutocompletion(){
35
		ajouterAutocompletionNoms();
36
		$('.champ_autocomplete').each(function(index) {
37
			ajouterAutocompletionAvancee($(this));
38
		});
39
}
40
 
41
function ajouterAutocompletionAvancee(champs){
42
			champs.autocomplete({
43
				source: function(requete, add){
44
				// la variable de requête doit être vidée car sinon le parametre "term" est ajouté
45
					requete = "";
46
					var id = champs.attr('id');
47
					var url = getUrlAutocompletionAvancee(id);
48
						$.getJSON(url, requete, function(data) {
49
					var suggestions = [];
50
					suggestions = traiterRetourAvance(data,champs);
51
					add(suggestions);
52
					});
53
				},
54
	        	html: true
55
			});
56
 
57
}
457 jpm 58
function ajouterAutocompletionNoms() {
59
	$('#nom').autocomplete({
60
		source: function(requete, add){
61
			// la variable de requête doit être vidée car sinon le parametre "term" est ajouté
62
			requete = "";
63
			var url = getUrlAppelCompletion();
724 mathilde 64
			$.getJSON(url, requete, function(data) {
457 jpm 65
				var suggestions = [];
66
				if (nomVernaculaireEstDemande()) {
67
					suggestions = traiterRetourNomsVerna(data);
68
				} else if (nomSciEstDemande()) {
69
					suggestions = traiterRetourNomsSci(data);
70
				}
71
				add(suggestions);
72
            });
73
        },
74
        html: true
75
	});
105 aurelien 76
 
459 jpm 77
	$("#nom").bind("autocompleteselect", function(event, ui) {
457 jpm 78
		if (ui.item.retenu == true) {
79
			$("#nom").addClass('ns-retenu');
80
		} else {
81
			$("#nom").removeClass('ns-retenu');
82
		}
83
	});
105 aurelien 84
}
85
 
119 aurelien 86
function traiterRetourNomsSci(data) {
131 delphine 87
	var suggestions = [];
457 jpm 88
	if (data.resultat != undefined) {
131 delphine 89
		$.each(data.resultat, function(i, val) {
457 jpm 90
			val.nn = i;
91
			var nom = {label : '', value : '', retenu : false};
92
			if (suggestions.length >= AUTOCOMPLETION_ELEMENTS_NBRE) {
93
				nom.label = "...";
94
				nom.value = $('#nom').val();
95
				suggestions.push(nom);
96
				return false;
97
			} else {
98
				nom.label = val.nom_sci_complet;
99
				nom.value = val.nom_sci;
100
				nom.nn = val.nn;
720 delphine 101
				nom.retenu = (val.retenu == 'true') ? true : false;
457 jpm 102
				suggestions.push(nom);
103
			}
131 delphine 104
		});
119 aurelien 105
	}
106
	return suggestions;
107
}
108
 
724 mathilde 109
 
110
 
111
function traiterRetourAvance(data, champs) {
112
	var suggestions = [];
113
	if (jQuery.type(data) == "array") {
114
		$.each(data[1], function(i, val) {
115
			var ch = {label : '', value : ''};
116
			if (suggestions.length >= AUTOCOMPLETION_ELEMENTS_NBRE) {
117
				ch.label = "...";
118
				ch.value = champs.val();
119
				suggestions.push(ch);
120
				return false;
121
			} else {
122
				ch.label = val;
123
				ch.value = val;
124
				suggestions.push(ch);
125
			}
126
		});
127
	}
128
	return suggestions;
129
}
130
 
119 aurelien 131
function traiterRetourNomsVerna(data) {
131 delphine 132
	var suggestions = [];
457 jpm 133
	if (jQuery.type(data) == "array") {
131 delphine 134
		$.each(data[1], function(i, val){
457 jpm 135
			var nom = {label : '', value : ''};
136
			if (suggestions.length >= AUTOCOMPLETION_ELEMENTS_NBRE) {
137
				nom.label = "...";
138
				nom.value = $('#nom').val();
139
				suggestions.push(nom);
140
				return false;
141
			} else {
142
				nom.label = val;
143
				nom.value = val;
144
				suggestions.push(val);
145
			}
131 delphine 146
		});
119 aurelien 147
	}
148
	return suggestions;
149
}
150
 
105 aurelien 151
 
457 jpm 152
/**------------ Fonctions de gestion des urls d'autocompletion et des fiches ------------------*/
724 mathilde 153
 
154
function getUrlAutocompletionAvancee(parametre) {
155
	var valeur = getValeurMasque(parametre);
156
	var ns_str = getValeurNsStructure(parametre);
157
	var url = URL_SERVICE_AUTOCOMPLETION_NOM_SCI+"?recherche=etendue&"+
158
	"navigation.limite="+AUTOCOMPLETION_ELEMENTS_NBRE +'&masque.'+parametre+'='+valeur+
159
	'&retour.format=oss&distinct=1&ns.structure='+ns_str;
160
	return url;
161
}
162
 
163
function getValeurMasque(parametre) {
164
	var valeur = $('#'+parametre).val();
165
	if (parametre == 'au' ){
166
		valeur = valeur +',(' + valeur + ')';
167
	} else if (parametre == 'bib' ){
168
		valeur = valeur +', %; ' + valeur ;
169
	}
170
	return valeur;
171
}
172
 
173
function getValeurNsStructure(parametre) {
174
	var ns = '';
175
	if (parametre == 'au' || parametre == 'bib'){
176
		ns = parametre +'_ss';
177
	} else {
178
		ns = parametre;
179
	}
180
	return ns;
181
}
182
 
183
 
457 jpm 184
function getUrlAppelCompletion() {
185
	var url = '';
186
	var mots = $('#nom').val();
187
	if (nomSciEstDemande()) {
188
		url = getUrlAutocompletionNomsSci(mots);
189
	} else if (nomVernaculaireEstDemande()) {
190
		mots = mots.replace('  ',' ');
191
		mots = mots.replace(' ','_');
192
		url = getUrlAutocompletionNomsVerna(mots);
193
	}
194
	return url;
195
}
105 aurelien 196
 
457 jpm 197
function getUrlAutocompletionNomsSci(requete) {
198
	var url = getUrlAutocompletion(URL_SERVICE_AUTOCOMPLETION_NOM_SCI, requete, 'min')+
199
		"&ns.structure=au,an";
200
	return url;
119 aurelien 201
}
202
 
457 jpm 203
function getUrlAutocompletionNomsVerna(requete) {
204
	var url = getUrlAutocompletion(URL_SERVICE_AUTOCOMPLETION_NOM_VERNA, requete, 'oss')+
205
		"&masque.lg=fra";
206
	return url;
207
}
208
 
209
function getUrlAutocompletion(baseUrl, requete, format) {
210
	var url = baseUrl+"?"+
211
		"masque="+requete+"&"+
212
		"recherche=etendue&"+
213
		"retour.format="+format+"&"+
214
		"navigation.limite="+AUTOCOMPLETION_ELEMENTS_NBRE;
215
	return url;
216
}
217
 
218
/**------------ Fonctions de détection de l'état du formulaire ------------------*/
219
function nomSciEstDemande()  {
220
	var boutonRadioNomSci = $('#type_nom_scientifique');
221
	return (boutonRadioNomSci.attr("checked") != "undefined" && boutonRadioNomSci.attr("checked") == "checked");
222
}
223
 
224
function nomVernaculaireEstDemande()  {
225
	var boutonRadioNomSci = $('#type_nom_vernaculaire');
226
	return (boutonRadioNomSci.attr("checked") != "undefined" && boutonRadioNomSci.attr("checked") == "checked");
227
}
228
 
119 aurelien 229
/**------------ Fonctions de gestion de l'affichage des valeurs par defaut ----------------------*/
724 mathilde 230
function ajouterActionClicSurTexteRecherche(champs) {
231
	$.each(champs, function(index, value) {
232
		$(value).click(function() {
233
			if (formulaireAfficheValeurParDefaut(value)) {
234
				$(value).val('');
235
			}
236
			if ($(value).hasClass('valeur-defaut-recherche')) {
237
				$(value).removeClass('valeur-defaut-recherche');
238
			}
239
		});
119 aurelien 240
	});
241
}
242
 
724 mathilde 243
function formulaireAfficheValeurParDefaut(champ) {
244
	valeur_form = $(champ).val();
278 aurelien 245
	valeur_form = $.trim(valeur_form);
724 mathilde 246
	return ( valeur_form == '' || valeur_form == VALEUR_DEFAUT_NOM_SCI || valeur_form == VALEUR_DEFAUT_NOM_VERNA
247
			|| valeur_form == VALEUR_DEFAUT_AU || valeur_form == VALEUR_DEFAUT_BIB || valeur_form == VALEUR_DEFAUT_DATE );
119 aurelien 248
}
249
 
724 mathilde 250
function gererAffichageValeursParDefaut(champs) {
251
		$('input[name="type_nom"]').click(function() {
252
			afficherValeurParDefautNom();
253
		});
254
		$.each(champs, function(index, value) {
255
			$(value).focus(function() {
256
				$(value).removeClass('valeur-defaut-recherche');
257
				if (formulaireAfficheValeurParDefaut(value)) {
258
					$(value).val('');
259
				} else {
260
					$(value).select();
261
				}
262
			});
263
		});
264
}
265
 
266
function afficherValeurParDefaut(champs){
267
	$.each(champs, function(index, value) {
268
		if (value == '#nom') {
269
			afficherValeurParDefautNom();
270
		}else{
271
			afficherValeurParDefautAvance(value);
119 aurelien 272
		}
273
	});
274
}
275
 
724 mathilde 276
function afficherValeurParDefautNom() {
119 aurelien 277
	if($('#nom') != undefined && $('#nom').val() != undefined) {
278 aurelien 278
		valeur_form = $('#nom').val();
279
		valeur_form = $.trim(valeur_form);
724 mathilde 280
		if (formulaireAfficheValeurParDefaut('#nom')) {
457 jpm 281
			if (nomSciEstDemande()) {
282
	    		$('#nom').val(VALEUR_DEFAUT_NOM_SCI);
119 aurelien 283
	    	} else {
457 jpm 284
	    		$('#nom').val(VALEUR_DEFAUT_NOM_VERNA);
119 aurelien 285
	    	}
286
			$('#nom').addClass('valeur-defaut-recherche');
287
		}
466 aurelien 288
 
289
		if (nomSciEstDemande()) {
290
			$('#eflore_nomenclature_fiche').show();
291
		} else {
292
			$('#eflore_nomenclature_fiche').hide();
293
		}
119 aurelien 294
	}
295
}
296
 
724 mathilde 297
 
298
function afficherValeurParDefautAvance(champs) {
299
		if($(champs) != undefined && $(champs).val() != undefined) {
300
			valeur_form = $(champs).val();
301
			valeur_form = $.trim(valeur_form);
302
			if (formulaireAfficheValeurParDefaut(champs)) {
303
				if (champs == "#au") {
304
					$(champs).val(VALEUR_DEFAUT_AU);
305
 
306
				}else if (champs == "#bib" ) {
307
					$(champs).val(VALEUR_DEFAUT_BIB);
308
				} else {
309
					$(champs).val(VALEUR_DEFAUT_DATE);
310
				}
311
				$(champs).addClass('valeur-defaut-recherche');
312
			}
313
 
314
		}
315
 
316
 
317
}
318
 
319
 
320
 
321
 
322
 
119 aurelien 323
/*
324
 * jQuery UI Autocomplete HTML Extension
325
 *
326
 * Copyright 2010, Scott González (http://scottgonzalez.com)
327
 * Dual licensed under the MIT or GPL Version 2 licenses.
328
 *
329
 * http://github.com/scottgonzalez/jquery-ui-extensions
330
 *
331
 * Adaptation par Aurélien Peronnet pour la mise en gras des noms de taxons valides
332
 */
333
(function( $ ) {
457 jpm 334
	var proto = $.ui.autocomplete.prototype,
335
		initSource = proto._initSource;
336
 
337
	function filter( array, term ) {
338
		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
339
		return $.grep( array, function(value) {
340
			return matcher.test( $( "<div>" ).html( value.label || value.value || value ).text() );
341
		});
342
	}
343
 
344
	$.extend( proto, {
345
		_initSource: function() {
346
			if (this.options.html && $.isArray(this.options.source) ) {
347
				this.source = function( request, response ) {
348
					response( filter( this.options.source, request.term ) );
349
				};
350
			} else {
351
				initSource.call( this );
352
			}
353
		},
354
		_renderItem: function( ul, item) {
355
			if (item.retenu == true) {
356
				item.label = "<strong>"+item.label+"</strong>";
357
			}
358
 
359
			return $("<li></li>")
360
				.data("item.autocomplete", item)
361
				.append( $("<a></a>")[ this.options.html ? "html" : "text" ](item.label))
362
				.appendTo(ul);
363
		}
119 aurelien 364
	});
457 jpm 365
})( jQuery );