Subversion Repositories eFlore/Applications.eflore-consultation

Compare Revisions

No changes between revisions

Ignore whitespace Rev 118 → Rev 119

/trunk/presentations/scripts/recherche.js
New file
0,0 → 1,226
/**-------------------------- Objets globaux -----------------------------------*/
 
/*
* Liste des noms scientifiques reçus pour la mise en gras des noms valide
* et l'accès direct aux fiches
*/
var listeNomsScientifiques = new Object();
/*
* Les variables suivantes sont ajoutée automatiquement dans le squelette du moteur de
* recherche par php, elles sont commentées ici pour qu'elles n'aient pas l'air
* de sortir de la cuisse de Jupiter
*
* var urlServiceAutocompletionNomsSci : url de base du service de complétion de noms scientifiques
* pour le projet en cours de consultation.
* Exemple : http://localhost/service:eflore:0.1/bdtfx/noms?recherche=etendue&retour.format=min&masque=Ace%mo
*
* var urlServiceAutocompletionNomsVerna : url de base du service de complétion de noms vernaculaires
* pour le projet en cours de consultation.
* Exemple : http://localhost/service:eflore:0.1/nvjfl/noms-vernaculaires?recherche=etendue&retour.format=oss&masque=aca&masque.lg=fra
*
* var urlBaseFicheTaxon : url de base de fiches des taxons afin de rediriger l'utilisateur sans
* faire de recherche dans le cas d'une selection d'un nom sci dans la liste d'autocompletion
* Exemple : http://localhost/eflore-consultation/index_botanique.php?referentiel=bdtfx&module=fiche&action=fiche&nn=127
*
*
* var valeurDefautNomSci : Contient la valeur par défaut affichée dans le formulaire en mode sci
* Exemple: Rechercher un nom scientifique
* var valeurDefautNomVerna : Contient la valeur par défaut affichée dans le formulaire en mode verna
* Exemple: Recherche un nom commun
*/
 
 
/**------------ Fonctions de détection de l'état du formulaire ------------------*/
function nomSciEstDemande() {
var boutonRadioNomSci = $('#type_nom_scientifique');
return (boutonRadioNomSci.attr("checked") != "undefined" && boutonRadioNomSci.attr("checked") == "checked");
}
 
function nomVernaculaireEstDemande() {
var boutonRadioNomSci = $('#type_nom_vernaculaire');
return (boutonRadioNomSci.attr("checked") != "undefined" && boutonRadioNomSci.attr("checked") == "checked");
}
 
/**------------ Fonctions de gestion des urls d'autocompletion et des fiches ------------------*/
function getUrlAutocompletion(baseUrl, requete, format) {
return baseUrl+"?recherche=etendue&retour.format="+format+"&navigation.limite=10&masque="+requete;
}
 
function getUrlAutocompletionNomsVerna(requete) {
return getUrlAutocompletion(urlServiceAutocompletionNomsVerna, requete, 'oss')+"&masque.lg=fra";
}
 
function getUrlAutocompletionNomsSci(requete) {
return getUrlAutocompletion(urlServiceAutocompletionNomsSci, requete, 'min');
}
 
function getUrlAppelCompletion(requete) {
var url = getUrlAutocompletionNomsSci(requete);
if(nomVernaculaireEstDemande()) {
requete = requete.replace(' ',' ');
requete = requete.replace(' ','_');
var url = getUrlAutocompletionNomsVerna(requete);
}
return url;
}
 
function getUrlFicheTaxon(num_nom) {
return urlBaseFicheTaxon.replace('{num_taxon}',num_nom).replace('&','&');
}
 
/**------------------- Fonctions de gestion de l'autocompletion ---------------------------------*/
function traiterRetourNomsSci(data) {
var suggestions = [];
if(data.resultat != undefined) {
$.each(data.resultat, function(i, val) {
val.num_tax = i;
listeNomsScientifiques[val.nom_sci] = val;
suggestions.push(val.nom_sci);
});
}
return suggestions;
}
 
function traiterRetourNomsVerna(data) {
var suggestions = [];
if(jQuery.type(data) == "array") {
$.each(data[1], function(i, val){
suggestions.push(val);
});
}
return suggestions;
}
 
function ajouterAutocompletionNoms() {
$('#nom').autocomplete({
source: function(req, add){
// la variable de requête doit être vidée car sinon le parametre "term" est ajouté
req = "";
$.getJSON(getUrlAppelCompletion($('#nom').val()), req, function(data) {
 
if(nomVernaculaireEstDemande()) {
suggestions = traiterRetourNomsVerna(data);
} else {
suggestions = traiterRetourNomsSci(data);
}
 
add(suggestions);
});
},
select: function(ui, item) {
var nom = item.item.value;
if(listeNomsScientifiques[nom] != undefined) {
// En cas de selection d'un nom scientifique de la liste
var num_tax = listeNomsScientifiques[nom].num_tax;
// On redirige automatique l'utilisateur vers sa fiche
window.location = getUrlFicheTaxon(num_tax);
}
},
html: true
});
}
 
/**------------ Fonctions de gestion de l'affichage des valeurs par defaut ----------------------*/
function ajouterActionClicSurTexteRecherche() {
$('#nom').click(function() {
if(formulaireAfficheValeurParDefaut()) {
$('#nom').val('');
}
if($('#nom').hasClass('valeur-defaut-recherche')) {
$('#nom').removeClass('valeur-defaut-recherche');
}
});
}
 
function formulaireAfficheValeurParDefaut() {
valeur_form = $('#nom').val().trim();
return valeur_form == '' || valeur_form == valeurDefautNomSci || valeur_form == valeurDefautNomVerna;
}
 
function gererAffichageValeursParDefaut() {
$('input[name="type_nom"]').click(function() {
afficherValeurParDefaut();
});
$('#nom').focus(function() {
$('#nom').removeClass('valeur-defaut-recherche');
if(formulaireAfficheValeurParDefaut()) {
$('#nom').val('');
} else {
$('#nom').select();
}
});
}
 
function afficherValeurParDefaut() {
if($('#nom') != undefined && $('#nom').val() != undefined) {
valeur_form = $('#nom').val().trim();
if(formulaireAfficheValeurParDefaut()) {
if(nomSciEstDemande()) {
$('#nom').val(valeurDefautNomSci);
} else {
$('#nom').val(valeurDefautNomVerna);
}
$('#nom').addClass('valeur-defaut-recherche');
}
}
}
 
$(document).ready(function() {
ajouterAutocompletionNoms();
ajouterActionClicSurTexteRecherche();
gererAffichageValeursParDefaut();
afficherValeurParDefaut();
});
 
/*
* jQuery UI Autocomplete HTML Extension
*
* Copyright 2010, Scott González (http://scottgonzalez.com)
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* http://github.com/scottgonzalez/jquery-ui-extensions
*
* Adaptation par Aurélien Peronnet pour la mise en gras des noms de taxons valides
*/
(function( $ ) {
 
var proto = $.ui.autocomplete.prototype,
initSource = proto._initSource;
 
function filter( array, term ) {
var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
return $.grep( array, function(value) {
return matcher.test( $( "<div>" ).html( value.label || value.value || value ).text() );
});
}
 
$.extend( proto, {
_initSource: function() {
if ( this.options.html && $.isArray(this.options.source) ) {
this.source = function( request, response ) {
response( filter( this.options.source, request.term ) );
};
} else {
initSource.call( this );
}
},
_renderItem: function( ul, item) {
if(listeNomsScientifiques[item.label] != undefined && listeNomsScientifiques[item.label].retenu == "true") {
item.label = "<b>"+item.label+"</b>";
}
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( $( "<a></a>" )[ this.options.html ? "html" : "text" ]( item.label ) )
.appendTo( ul );
}
});
 
})( jQuery );
Property changes:
Added: svn:executable
+*
\ No newline at end of property