Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 119 | 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
/*
4
 * Liste des noms scientifiques reçus pour la mise en gras des noms valide
5
 */
6
var listeNomsScientifiques = new Object();
7
/*
8
 * Les variables suivantes sont ajoutée automatiquement dans le squelette du moteur de
9
 * recherche par php, elles sont commentées ici pour qu'elles n'aient pas l'air
10
 * de sortir de la cuisse de Jupiter
11
 *
12
 * var urlServiceAutocompletionNomsSci : url de base du service de complétion de noms scientifiques
13
 * pour le projet en cours de consultation.
14
 * Exemple : http://localhost/service:eflore:0.1/bdtfx/noms?recherche=etendue&retour.format=min&masque=Ace%mo
15
 *
16
 * var urlServiceAutocompletionNomsVerna : url de base du service de complétion de noms vernaculaires
17
 * pour le projet en cours de consultation.
131 delphine 18
 * Exemple : http://localhost/service:eflore:0.1/nvjfl/noms-vernaculaires?recherche=etendue&retour.format=oss&masque=aca&masque.lg=fra
119 aurelien 19
 *
20
 * var valeurDefautNomSci : Contient la valeur par défaut affichée dans le formulaire en mode sci
21
 * Exemple: Rechercher un nom scientifique
22
 * var valeurDefautNomVerna : Contient la valeur par défaut affichée dans le formulaire en mode verna
23
 * Exemple: Recherche un nom commun
24
 */
25
 
26
 
27
/**------------ Fonctions de détection de l'état du formulaire ------------------*/
28
function nomSciEstDemande()  {
105 aurelien 29
	var boutonRadioNomSci = $('#type_nom_scientifique');
30
	return (boutonRadioNomSci.attr("checked") != "undefined" && boutonRadioNomSci.attr("checked") == "checked");
31
}
32
 
33
function nomVernaculaireEstDemande()  {
34
	var boutonRadioNomSci = $('#type_nom_vernaculaire');
35
	return (boutonRadioNomSci.attr("checked") != "undefined" && boutonRadioNomSci.attr("checked") == "checked");
36
}
37
 
119 aurelien 38
/**------------ Fonctions de gestion des urls d'autocompletion et des fiches ------------------*/
39
function getUrlAutocompletion(baseUrl, requete, format) {
40
	return baseUrl+"?recherche=etendue&retour.format="+format+"&navigation.limite=10&masque="+requete;
105 aurelien 41
}
42
 
43
function getUrlAutocompletionNomsVerna(requete) {
119 aurelien 44
	return getUrlAutocompletion(urlServiceAutocompletionNomsVerna, requete, 'oss')+"&masque.lg=fra";
105 aurelien 45
}
46
 
47
function getUrlAutocompletionNomsSci(requete) {
119 aurelien 48
	return getUrlAutocompletion(urlServiceAutocompletionNomsSci, requete, 'min');
105 aurelien 49
}
50
 
51
function getUrlAppelCompletion(requete) {
52
	var url = getUrlAutocompletionNomsSci(requete);
53
	if(nomVernaculaireEstDemande()) {
54
		requete = requete.replace('  ',' ');
55
		requete = requete.replace(' ','_');
56
		var url = getUrlAutocompletionNomsVerna(requete);
57
	}
58
 
59
	return url;
60
}
61
 
119 aurelien 62
 
131 delphine 63
 
119 aurelien 64
/**------------------- Fonctions de gestion de l'autocompletion ---------------------------------*/
65
function traiterRetourNomsSci(data) {
66
 
131 delphine 67
	var suggestions = [];
68
	if(data.resultat != undefined) {
69
		$.each(data.resultat, function(i, val) {
70
			val.num_tax = i;
71
			listeNomsScientifiques[val.nom_sci] = val;
72
			suggestions.push(val.nom_sci);
73
		});
119 aurelien 74
	}
75
 
76
	return suggestions;
77
}
78
 
79
function traiterRetourNomsVerna(data) {
80
 
131 delphine 81
	var suggestions = [];
82
	if(jQuery.type(data) == "array") {
83
		$.each(data[1], function(i, val){
84
			suggestions.push(val);
85
		});
119 aurelien 86
	}
87
 
88
	return suggestions;
89
}
90
 
91
function ajouterAutocompletionNoms() {
105 aurelien 92
	$('#nom').autocomplete({
131 delphine 93
		source: function(req, add){
94
			// la variable de requête doit être vidée car sinon le parametre "term" est ajouté
95
			req = "";
96
			$.getJSON(getUrlAppelCompletion($('#nom').val()), req, function(data) {
105 aurelien 97
 
131 delphine 98
				if(nomVernaculaireEstDemande()) {
99
					suggestions = traiterRetourNomsVerna(data);
100
				} else {
101
					suggestions = traiterRetourNomsSci(data);
102
				}
105 aurelien 103
 
131 delphine 104
				add(suggestions);
105 aurelien 105
            });
119 aurelien 106
        },
107
        html: true
105 aurelien 108
	});
119 aurelien 109
}
110
 
111
/**------------ Fonctions de gestion de l'affichage des valeurs par defaut ----------------------*/
112
function ajouterActionClicSurTexteRecherche() {
113
	$('#nom').click(function() {
114
		if(formulaireAfficheValeurParDefaut()) {
115
			$('#nom').val('');
116
		}
117
 
118
		if($('#nom').hasClass('valeur-defaut-recherche')) {
119
			$('#nom').removeClass('valeur-defaut-recherche');
120
		}
121
	});
122
}
123
 
124
function formulaireAfficheValeurParDefaut() {
125
	valeur_form = $('#nom').val().trim();
126
	return valeur_form == '' || valeur_form == valeurDefautNomSci || valeur_form == valeurDefautNomVerna;
127
}
128
 
129
function gererAffichageValeursParDefaut() {
130
	$('input[name="type_nom"]').click(function() {
131
		afficherValeurParDefaut();
132
	});
133
 
134
	$('#nom').focus(function() {
135
		$('#nom').removeClass('valeur-defaut-recherche');
136
		if(formulaireAfficheValeurParDefaut()) {
137
			$('#nom').val('');
138
		} else {
139
			$('#nom').select();
140
		}
141
	});
142
}
143
 
144
function afficherValeurParDefaut() {
145
	if($('#nom') != undefined && $('#nom').val() != undefined) {
146
		valeur_form = $('#nom').val().trim();
147
		if(formulaireAfficheValeurParDefaut()) {
148
			if(nomSciEstDemande()) {
149
	    		$('#nom').val(valeurDefautNomSci);
150
	    	} else {
151
	    		$('#nom').val(valeurDefautNomVerna);
152
	    	}
153
			$('#nom').addClass('valeur-defaut-recherche');
154
		}
155
	}
156
}
157
 
158
$(document).ready(function() {
159
	ajouterAutocompletionNoms();
160
	ajouterActionClicSurTexteRecherche();
161
	gererAffichageValeursParDefaut();
162
	afficherValeurParDefaut();
105 aurelien 163
});
164
 
119 aurelien 165
/*
166
 * jQuery UI Autocomplete HTML Extension
167
 *
168
 * Copyright 2010, Scott González (http://scottgonzalez.com)
169
 * Dual licensed under the MIT or GPL Version 2 licenses.
170
 *
171
 * http://github.com/scottgonzalez/jquery-ui-extensions
172
 *
173
 * Adaptation par Aurélien Peronnet pour la mise en gras des noms de taxons valides
174
 */
175
(function( $ ) {
176
 
177
var proto = $.ui.autocomplete.prototype,
178
	initSource = proto._initSource;
179
 
180
function filter( array, term ) {
181
	var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
182
	return $.grep( array, function(value) {
183
		return matcher.test( $( "<div>" ).html( value.label || value.value || value ).text() );
184
	});
185
}
186
 
187
$.extend( proto, {
188
	_initSource: function() {
189
		if ( this.options.html && $.isArray(this.options.source) ) {
190
			this.source = function( request, response ) {
191
				response( filter( this.options.source, request.term ) );
192
			};
193
		} else {
194
			initSource.call( this );
195
		}
196
	},
197
	_renderItem: function( ul, item) {
198
		if(listeNomsScientifiques[item.label] != undefined && listeNomsScientifiques[item.label].retenu == "true") {
199
			item.label = "<b>"+item.label+"</b>";
200
		}
201
 
202
		return $( "<li></li>" )
203
			.data( "item.autocomplete", item )
204
			.append( $( "<a></a>" )[ this.options.html ? "html" : "text" ]( item.label ) )
205
			.appendTo( ul );
206
	}
207
});
208
 
209
})( jQuery );