Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 596 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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