Subversion Repositories eFlore/Applications.eflore-consultation

Rev

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

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