Subversion Repositories eFlore/Applications.eflore-consultation

Rev

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

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