Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 895 | 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"];
785 aurelien 25
var autocompletionFicheOuverte = false;
26
var elementAutocompletionSelectionne = null;
27
var nomRechercheEnCours = null;
724 mathilde 28
 
457 jpm 29
$(document).ready(function() {
724 mathilde 30
	ajouterAutocompletion();
31
	ajouterActionClicSurTexteRecherche(champs_ts);
32
	gererAffichageValeursParDefaut(champs_ts);
33
	afficherValeurParDefaut(champs_ts);
785 aurelien 34
	gererAccesFicheFlecheDroite();
905 aurelien 35
	gererClicIllustrationsResultats();
36
	gererAccesFicheBouton();
457 jpm 37
});
119 aurelien 38
 
457 jpm 39
/**------------------- Fonctions de gestion de l'autocompletion ---------------------------------*/
724 mathilde 40
function ajouterAutocompletion(){
41
		ajouterAutocompletionNoms();
42
		$('.champ_autocomplete').each(function(index) {
43
			ajouterAutocompletionAvancee($(this));
44
		});
45
}
46
 
47
function ajouterAutocompletionAvancee(champs){
48
			champs.autocomplete({
49
				source: function(requete, add){
50
				// la variable de requête doit être vidée car sinon le parametre "term" est ajouté
51
					requete = "";
52
					var id = champs.attr('id');
895 aurelien 53
					var url = encodeURI(getUrlAutocompletionAvancee(id));
724 mathilde 54
						$.getJSON(url, requete, function(data) {
55
					var suggestions = [];
56
					suggestions = traiterRetourAvance(data,champs);
57
					add(suggestions);
58
					});
59
				},
60
	        	html: true
61
			});
62
 
63
}
785 aurelien 64
 
457 jpm 65
function ajouterAutocompletionNoms() {
66
	$('#nom').autocomplete({
67
		source: function(requete, add){
68
			// la variable de requête doit être vidée car sinon le parametre "term" est ajouté
69
			requete = "";
895 aurelien 70
			var url = encodeURI(getUrlAppelCompletion());
724 mathilde 71
			$.getJSON(url, requete, function(data) {
457 jpm 72
				var suggestions = [];
73
				if (nomVernaculaireEstDemande()) {
74
					suggestions = traiterRetourNomsVerna(data);
75
				} else if (nomSciEstDemande()) {
76
					suggestions = traiterRetourNomsSci(data);
77
				}
78
				add(suggestions);
79
            });
80
        },
785 aurelien 81
        search: function(event, ui) {
82
        	nomRechercheEnCours = 'nom_sci';
83
        },
84
        focus: function(event, ui) {
85
        	elementAutocompletionSelectionne = ui.item;
86
        },
87
        open: function(event, ui) {
88
        	autocompletionFicheOuverte = true;
809 aurelien 89
        	var parent = $('.autocompletion_nom.ui-menu-item').parent();
90
        	parent.width(parent.width() + 10);
785 aurelien 91
        },
92
        close: function(event, ui) {
93
        	autocompletionFicheFermee = false;
94
        	nomRechercheEnCours = null;
95
        },
457 jpm 96
        html: true
97
	});
105 aurelien 98
 
459 jpm 99
	$("#nom").bind("autocompleteselect", function(event, ui) {
457 jpm 100
		if (ui.item.retenu == true) {
101
			$("#nom").addClass('ns-retenu');
102
		} else {
103
			$("#nom").removeClass('ns-retenu');
104
		}
105
	});
105 aurelien 106
}
107
 
785 aurelien 108
// gére l'acces direct à une fiche par l'appui sur droite
109
// dans la liste d'autocompletion des noms scientifiques
110
function gererAccesFicheFlecheDroite() {
111
	$(document).keypress(function(event) {
112
		// flèche droite
895 aurelien 113
		if(event.keyCode == 39) {
785 aurelien 114
			if(autocompletionFicheOuverte && elementAutocompletionSelectionne != null && nomSciEstDemande()) {
115
				$('#nom').val(elementAutocompletionSelectionne.value);
905 aurelien 116
				if(elementAutocompletionSelectionne.nn != undefined && elementAutocompletionSelectionne.nn != null) {
117
					var url_fiche_taxon = URL_BASE_FICHE_TAXON.replace('{num_taxon}',elementAutocompletionSelectionne.nn);
118
					window.location.href = url_fiche_taxon;
119
				}
785 aurelien 120
				$('#nom').autocomplete( "disable" );
121
				//TODO : ajout d'un message de chargement ?
122
			}
123
		}
895 aurelien 124
 
125
		if(event.keyCode == 13) {
126
			if(autocompletionFicheOuverte && elementAutocompletionSelectionne == null && $('#nom').is(":focus")) {
127
				$('#eflore_nomenclature_submit').click();
128
			}
129
		}
785 aurelien 130
	});
131
}
132
 
905 aurelien 133
function gererAccesFicheBouton() {
134
	$('#eflore_nomenclature_fiche').click(function(event) {
135
		if(elementAutocompletionSelectionne != null && nomSciEstDemande()) {
136
			$('#nom').val(elementAutocompletionSelectionne.value);
137
			if(elementAutocompletionSelectionne.nn != undefined && elementAutocompletionSelectionne.nn != null) {
138
				var url_fiche_taxon = URL_BASE_FICHE_TAXON.replace('{num_taxon}',elementAutocompletionSelectionne.nn);
139
				window.location.href = url_fiche_taxon;
140
			}
141
			event.preventDefault();
142
		}
143
	});
144
}
145
 
119 aurelien 146
function traiterRetourNomsSci(data) {
131 delphine 147
	var suggestions = [];
457 jpm 148
	if (data.resultat != undefined) {
131 delphine 149
		$.each(data.resultat, function(i, val) {
457 jpm 150
			val.nn = i;
151
			var nom = {label : '', value : '', retenu : false};
152
			if (suggestions.length >= AUTOCOMPLETION_ELEMENTS_NBRE) {
153
				nom.label = "...";
154
				nom.value = $('#nom').val();
155
				suggestions.push(nom);
156
				return false;
157
			} else {
158
				nom.label = val.nom_sci_complet;
159
				nom.value = val.nom_sci;
160
				nom.nn = val.nn;
720 delphine 161
				nom.retenu = (val.retenu == 'true') ? true : false;
457 jpm 162
				suggestions.push(nom);
163
			}
131 delphine 164
		});
119 aurelien 165
	}
166
	return suggestions;
167
}
168
 
724 mathilde 169
 
170
function traiterRetourAvance(data, champs) {
171
	var suggestions = [];
172
	if (jQuery.type(data) == "array") {
173
		$.each(data[1], function(i, val) {
174
			var ch = {label : '', value : ''};
175
			if (suggestions.length >= AUTOCOMPLETION_ELEMENTS_NBRE) {
176
				ch.label = "...";
177
				ch.value = champs.val();
178
				suggestions.push(ch);
179
				return false;
180
			} else {
181
				ch.label = val;
182
				ch.value = val;
183
				suggestions.push(ch);
184
			}
185
		});
186
	}
187
	return suggestions;
188
}
189
 
119 aurelien 190
function traiterRetourNomsVerna(data) {
131 delphine 191
	var suggestions = [];
457 jpm 192
	if (jQuery.type(data) == "array") {
131 delphine 193
		$.each(data[1], function(i, val){
457 jpm 194
			var nom = {label : '', value : ''};
195
			if (suggestions.length >= AUTOCOMPLETION_ELEMENTS_NBRE) {
196
				nom.label = "...";
197
				nom.value = $('#nom').val();
198
				suggestions.push(nom);
199
				return false;
200
			} else {
201
				nom.label = val;
202
				nom.value = val;
203
				suggestions.push(val);
204
			}
131 delphine 205
		});
119 aurelien 206
	}
207
	return suggestions;
208
}
209
 
105 aurelien 210
 
457 jpm 211
/**------------ Fonctions de gestion des urls d'autocompletion et des fiches ------------------*/
724 mathilde 212
 
213
function getUrlAutocompletionAvancee(parametre) {
214
	var valeur = getValeurMasque(parametre);
215
	var ns_str = getValeurNsStructure(parametre);
216
	var url = URL_SERVICE_AUTOCOMPLETION_NOM_SCI+"?recherche=etendue&"+
217
	"navigation.limite="+AUTOCOMPLETION_ELEMENTS_NBRE +'&masque.'+parametre+'='+valeur+
218
	'&retour.format=oss&distinct=1&ns.structure='+ns_str;
219
	return url;
220
}
221
 
222
function getValeurMasque(parametre) {
223
	var valeur = $('#'+parametre).val();
224
	if (parametre == 'au' ){
225
		valeur = valeur +',(' + valeur + ')';
226
	} else if (parametre == 'bib' ){
227
		valeur = valeur +', %; ' + valeur ;
228
	}
229
	return valeur;
230
}
231
 
232
function getValeurNsStructure(parametre) {
233
	var ns = '';
234
	if (parametre == 'au' || parametre == 'bib'){
235
		ns = parametre +'_ss';
236
	} else {
237
		ns = parametre;
238
	}
239
	return ns;
240
}
241
 
242
 
457 jpm 243
function getUrlAppelCompletion() {
244
	var url = '';
245
	var mots = $('#nom').val();
246
	if (nomSciEstDemande()) {
247
		url = getUrlAutocompletionNomsSci(mots);
248
	} else if (nomVernaculaireEstDemande()) {
249
		mots = mots.replace('  ',' ');
250
		mots = mots.replace(' ','_');
251
		url = getUrlAutocompletionNomsVerna(mots);
252
	}
253
	return url;
254
}
105 aurelien 255
 
457 jpm 256
function getUrlAutocompletionNomsSci(requete) {
257
	var url = getUrlAutocompletion(URL_SERVICE_AUTOCOMPLETION_NOM_SCI, requete, 'min')+
258
		"&ns.structure=au,an";
259
	return url;
119 aurelien 260
}
261
 
457 jpm 262
function getUrlAutocompletionNomsVerna(requete) {
263
	var url = getUrlAutocompletion(URL_SERVICE_AUTOCOMPLETION_NOM_VERNA, requete, 'oss')+
264
		"&masque.lg=fra";
265
	return url;
266
}
267
 
268
function getUrlAutocompletion(baseUrl, requete, format) {
269
	var url = baseUrl+"?"+
270
		"masque="+requete+"&"+
271
		"recherche=etendue&"+
272
		"retour.format="+format+"&"+
273
		"navigation.limite="+AUTOCOMPLETION_ELEMENTS_NBRE;
274
	return url;
275
}
276
 
277
/**------------ Fonctions de détection de l'état du formulaire ------------------*/
278
function nomSciEstDemande()  {
279
	var boutonRadioNomSci = $('#type_nom_scientifique');
280
	return (boutonRadioNomSci.attr("checked") != "undefined" && boutonRadioNomSci.attr("checked") == "checked");
281
}
282
 
283
function nomVernaculaireEstDemande()  {
284
	var boutonRadioNomSci = $('#type_nom_vernaculaire');
285
	return (boutonRadioNomSci.attr("checked") != "undefined" && boutonRadioNomSci.attr("checked") == "checked");
286
}
287
 
119 aurelien 288
/**------------ Fonctions de gestion de l'affichage des valeurs par defaut ----------------------*/
724 mathilde 289
function ajouterActionClicSurTexteRecherche(champs) {
290
	$.each(champs, function(index, value) {
291
		$(value).click(function() {
292
			if (formulaireAfficheValeurParDefaut(value)) {
293
				$(value).val('');
294
			}
295
			if ($(value).hasClass('valeur-defaut-recherche')) {
296
				$(value).removeClass('valeur-defaut-recherche');
297
			}
298
		});
119 aurelien 299
	});
300
}
301
 
724 mathilde 302
function formulaireAfficheValeurParDefaut(champ) {
303
	valeur_form = $(champ).val();
278 aurelien 304
	valeur_form = $.trim(valeur_form);
724 mathilde 305
	return ( valeur_form == '' || valeur_form == VALEUR_DEFAUT_NOM_SCI || valeur_form == VALEUR_DEFAUT_NOM_VERNA
306
			|| valeur_form == VALEUR_DEFAUT_AU || valeur_form == VALEUR_DEFAUT_BIB || valeur_form == VALEUR_DEFAUT_DATE );
119 aurelien 307
}
308
 
724 mathilde 309
function gererAffichageValeursParDefaut(champs) {
310
		$('input[name="type_nom"]').click(function() {
311
			afficherValeurParDefautNom();
312
		});
313
		$.each(champs, function(index, value) {
314
			$(value).focus(function() {
315
				$(value).removeClass('valeur-defaut-recherche');
316
				if (formulaireAfficheValeurParDefaut(value)) {
317
					$(value).val('');
318
				} else {
319
					$(value).select();
320
				}
321
			});
322
		});
323
}
324
 
325
function afficherValeurParDefaut(champs){
326
	$.each(champs, function(index, value) {
327
		if (value == '#nom') {
328
			afficherValeurParDefautNom();
329
		}else{
330
			afficherValeurParDefautAvance(value);
119 aurelien 331
		}
332
	});
333
}
334
 
724 mathilde 335
function afficherValeurParDefautNom() {
119 aurelien 336
	if($('#nom') != undefined && $('#nom').val() != undefined) {
278 aurelien 337
		valeur_form = $('#nom').val();
338
		valeur_form = $.trim(valeur_form);
724 mathilde 339
		if (formulaireAfficheValeurParDefaut('#nom')) {
457 jpm 340
			if (nomSciEstDemande()) {
341
	    		$('#nom').val(VALEUR_DEFAUT_NOM_SCI);
119 aurelien 342
	    	} else {
457 jpm 343
	    		$('#nom').val(VALEUR_DEFAUT_NOM_VERNA);
119 aurelien 344
	    	}
345
			$('#nom').addClass('valeur-defaut-recherche');
346
		}
466 aurelien 347
 
348
		if (nomSciEstDemande()) {
349
			$('#eflore_nomenclature_fiche').show();
350
		} else {
351
			$('#eflore_nomenclature_fiche').hide();
352
		}
119 aurelien 353
	}
354
}
355
 
724 mathilde 356
 
357
function afficherValeurParDefautAvance(champs) {
785 aurelien 358
	if($(champs) != undefined && $(champs).val() != undefined) {
359
		valeur_form = $(champs).val();
360
		valeur_form = $.trim(valeur_form);
361
		if (formulaireAfficheValeurParDefaut(champs)) {
362
			if (champs == "#au") {
363
				$(champs).val(VALEUR_DEFAUT_AU);
364
 
365
			}else if (champs == "#bib" ) {
366
				$(champs).val(VALEUR_DEFAUT_BIB);
367
			} else {
368
				$(champs).val(VALEUR_DEFAUT_DATE);
724 mathilde 369
			}
785 aurelien 370
			$(champs).addClass('valeur-defaut-recherche');
724 mathilde 371
		}
372
 
785 aurelien 373
	}
724 mathilde 374
}
375
 
864 aurelien 376
/**------------ Fonctions de gestion du zoom sur les images affichées dans les résultats de recherche ----------------------*/
377
function gererClicIllustrationsResultats() {
378
	$('.illustration_resultat_cel').click(function() {
379
		var url = $(this).attr('src')/*.replace('CS','XL')*/;
866 aurelien 380
		var titre = trouverNomTaxon($(this));
381
		console.log($(this).parent().parent().find('a.lien_fiche_eflore'));
864 aurelien 382
		ouvrirFenetreIllustrationResultat(url, titre, 400, 400);
383
	});
384
 
385
	$('.illustration_resultat_choro').click(function() {
386
		var url = $(this).attr('src').replace('108x101','432x404');
866 aurelien 387
		var titre = 'Chorologie du taxon '+trouverNomTaxon($(this));
864 aurelien 388
		ouvrirFenetreIllustrationResultat(url, titre, 432, 404);
389
	});
390
 
391
	$('.illustration_resultat_coste').click(function() {
392
		var url = $(this).attr('src');
866 aurelien 393
		var titre = 'Illustration de Coste du taxon '+trouverNomTaxon($(this));
864 aurelien 394
		ouvrirFenetreIllustrationResultat(url, titre, 400, 400);
395
	});
396
}
397
 
866 aurelien 398
function trouverNomTaxon(objet) {
399
	nom = "";
400
	if(nomVernaculaireEstDemande()) {
401
		nom = objet.parent().parent().find('a.lien_fiche_eflore').text();
402
	} else {
403
		nom = objet.parent().find('a.lien_fiche_eflore').text();
404
	}
405
	return nom;
406
}
407
 
864 aurelien 408
function ouvrirFenetreIllustrationResultat(url, titre, hauteur, largeur) {
409
	var fenetre = window.open('_blank', titre,'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no, width='+(largeur+17)+', height='+(hauteur+17));
410
	var tmp = fenetre.document;
411
	tmp.write('<html><head><title>'+titre+'</title>');
412
	tmp.write('</head><body>');
413
	tmp.write('<p style="height='+hauteur+'px;text-align:center;line-height='+hauteur+'px;"><img id="image_agrandie" height="'+hauteur+'" width="'+largeur+'" style="vertical-align:middle;" src="'+url+'" /></p>');
414
	tmp.write('</body></html>');
415
	tmp.close();
416
}
417
 
119 aurelien 418
/*
419
 * jQuery UI Autocomplete HTML Extension
420
 *
421
 * Copyright 2010, Scott González (http://scottgonzalez.com)
422
 * Dual licensed under the MIT or GPL Version 2 licenses.
423
 *
424
 * http://github.com/scottgonzalez/jquery-ui-extensions
425
 *
426
 * Adaptation par Aurélien Peronnet pour la mise en gras des noms de taxons valides
427
 */
428
(function( $ ) {
457 jpm 429
	var proto = $.ui.autocomplete.prototype,
430
		initSource = proto._initSource;
431
 
432
	function filter( array, term ) {
433
		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
434
		return $.grep( array, function(value) {
435
			return matcher.test( $( "<div>" ).html( value.label || value.value || value ).text() );
436
		});
437
	}
438
 
439
	$.extend( proto, {
440
		_initSource: function() {
441
			if (this.options.html && $.isArray(this.options.source) ) {
442
				this.source = function( request, response ) {
443
					response( filter( this.options.source, request.term ) );
444
				};
445
			} else {
446
				initSource.call( this );
447
			}
448
		},
449
		_renderItem: function( ul, item) {
450
			if (item.retenu == true) {
451
				item.label = "<strong>"+item.label+"</strong>";
452
			}
785 aurelien 453
			var classe = (nomRechercheEnCours == 'nom_sci' && nomSciEstDemande()) ? 'class="autocompletion_nom"' : '';
454
			return $("<li "+classe+"></li>")
457 jpm 455
				.data("item.autocomplete", item)
456
				.append( $("<a></a>")[ this.options.html ? "html" : "text" ](item.label))
457
				.appendTo(ul);
458
		}
119 aurelien 459
	});
457 jpm 460
})( jQuery );