Subversion Repositories eFlore/Applications.eflore-consultation

Rev

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