1,129 → 1,161 |
/**-------------------------- Objets globaux -----------------------------------*/ |
|
/* |
* Liste des noms scientifiques reçus pour la mise en gras des noms valide |
*/ |
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 |
* var AUTOCOMPLETION_ELEMENTS_NBRE : indique le nombre d'éléments à afficher dans la liste d'autocomplétion. |
* |
* var URL_SERVICE_AUTOCOMPLETION_NOM_SCI : 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 |
* var URL_SERVICE_AUTOCOMPLETION_NOM_VERNA : 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 valeurDefautNomSci : Contient la valeur par défaut affichée dans le formulaire en mode sci |
* var VALEUR_DEFAUT_NOM_SCI : 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 |
* |
* var VALEUR_DEFAUT_NOM_VERNA : Contient la valeur par défaut affichée dans le formulaire en mode verna |
* Exemple: Recherche un nom commun |
*/ |
|
$(document).ready(function() { |
ajouterAutocompletionNoms(); |
ajouterActionClicSurTexteRecherche(); |
gererAffichageValeursParDefaut(); |
afficherValeurParDefaut(); |
}); |
|
/**------------ 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=50&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); |
} |
/**------------------- Fonctions de gestion de l'autocompletion ---------------------------------*/ |
function ajouterAutocompletionNoms() { |
$('#nom').autocomplete({ |
source: function(requete, add){ |
// la variable de requête doit être vidée car sinon le parametre "term" est ajouté |
requete = ""; |
var url = getUrlAppelCompletion(); |
$.getJSON(url, requete, function(data) { |
var suggestions = []; |
if (nomVernaculaireEstDemande()) { |
suggestions = traiterRetourNomsVerna(data); |
} else if (nomSciEstDemande()) { |
suggestions = traiterRetourNomsSci(data); |
} |
add(suggestions); |
}); |
}, |
html: true |
}); |
|
return url; |
$("nom").bind("autocompleteselect", function(event, ui) { |
console.log('LA'); |
if (ui.item.retenu == true) { |
$("#nom").addClass('ns-retenu'); |
console.log('ici'); |
} else { |
$("#nom").removeClass('ns-retenu'); |
} |
}); |
} |
|
|
|
/**------------------- Fonctions de gestion de l'autocompletion ---------------------------------*/ |
function traiterRetourNomsSci(data) { |
|
var suggestions = []; |
if(data.resultat != undefined) { |
if (data.resultat != undefined) { |
$.each(data.resultat, function(i, val) { |
val.num_tax = i; |
listeNomsScientifiques[val.nom_sci] = val; |
suggestions.push(val.nom_sci); |
val.nn = i; |
var nom = {label : '', value : '', retenu : false}; |
if (suggestions.length >= AUTOCOMPLETION_ELEMENTS_NBRE) { |
nom.label = "..."; |
nom.value = $('#nom').val(); |
suggestions.push(nom); |
return false; |
} else { |
nom.label = val.nom_sci_complet; |
nom.value = val.nom_sci; |
nom.nn = val.nn; |
nom.retenu = (val.retenu == 'false') ? false : true; |
suggestions.push(nom); |
} |
}); |
} |
|
if(suggestions.length >= 50) { |
suggestions.push("..."); |
} |
|
return suggestions; |
} |
|
function traiterRetourNomsVerna(data) { |
|
var suggestions = []; |
if(jQuery.type(data) == "array") { |
if (jQuery.type(data) == "array") { |
$.each(data[1], function(i, val){ |
suggestions.push(val); |
var nom = {label : '', value : ''}; |
if (suggestions.length >= AUTOCOMPLETION_ELEMENTS_NBRE) { |
nom.label = "..."; |
nom.value = $('#nom').val(); |
suggestions.push(nom); |
return false; |
} else { |
nom.label = val; |
nom.value = val; |
suggestions.push(val); |
} |
}); |
} |
|
if(suggestions.length >= 50) { |
suggestions.push("..."); |
} |
|
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); |
} |
/**------------ Fonctions de gestion des urls d'autocompletion et des fiches ------------------*/ |
function getUrlAppelCompletion() { |
var url = ''; |
var mots = $('#nom').val(); |
if (nomSciEstDemande()) { |
url = getUrlAutocompletionNomsSci(mots); |
} else if (nomVernaculaireEstDemande()) { |
mots = mots.replace(' ',' '); |
mots = mots.replace(' ','_'); |
url = getUrlAutocompletionNomsVerna(mots); |
} |
return url; |
} |
|
add(suggestions); |
}); |
}, |
html: true |
}); |
function getUrlAutocompletionNomsSci(requete) { |
var url = getUrlAutocompletion(URL_SERVICE_AUTOCOMPLETION_NOM_SCI, requete, 'min')+ |
"&ns.structure=au,an"; |
return url; |
} |
|
function getUrlAutocompletionNomsVerna(requete) { |
var url = getUrlAutocompletion(URL_SERVICE_AUTOCOMPLETION_NOM_VERNA, requete, 'oss')+ |
"&masque.lg=fra"; |
return url; |
} |
|
function getUrlAutocompletion(baseUrl, requete, format) { |
var url = baseUrl+"?"+ |
"masque="+requete+"&"+ |
"recherche=etendue&"+ |
"retour.format="+format+"&"+ |
"navigation.limite="+AUTOCOMPLETION_ELEMENTS_NBRE; |
return url; |
} |
|
/**------------ 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 de l'affichage des valeurs par defaut ----------------------*/ |
function ajouterActionClicSurTexteRecherche() { |
$('#nom').click(function() { |
if(formulaireAfficheValeurParDefaut()) { |
if (formulaireAfficheValeurParDefaut()) { |
$('#nom').val(''); |
} |
|
if($('#nom').hasClass('valeur-defaut-recherche')) { |
if ($('#nom').hasClass('valeur-defaut-recherche')) { |
$('#nom').removeClass('valeur-defaut-recherche'); |
} |
}); |
132,7 → 164,7 |
function formulaireAfficheValeurParDefaut() { |
valeur_form = $('#nom').val(); |
valeur_form = $.trim(valeur_form); |
return valeur_form == '' || valeur_form == valeurDefautNomSci || valeur_form == valeurDefautNomVerna; |
return valeur_form == '' || valeur_form == VALEUR_DEFAUT_NOM_SCI || valeur_form == VALEUR_DEFAUT_NOM_VERNA; |
} |
|
function gererAffichageValeursParDefaut() { |
142,7 → 174,7 |
|
$('#nom').focus(function() { |
$('#nom').removeClass('valeur-defaut-recherche'); |
if(formulaireAfficheValeurParDefaut()) { |
if (formulaireAfficheValeurParDefaut()) { |
$('#nom').val(''); |
} else { |
$('#nom').select(); |
154,12 → 186,12 |
if($('#nom') != undefined && $('#nom').val() != undefined) { |
valeur_form = $('#nom').val(); |
valeur_form = $.trim(valeur_form); |
if(formulaireAfficheValeurParDefaut()) { |
if(nomSciEstDemande()) { |
$('#nom').val(valeurDefautNomSci); |
if (formulaireAfficheValeurParDefaut()) { |
if (nomSciEstDemande()) { |
$('#nom').val(VALEUR_DEFAUT_NOM_SCI); |
$('#eflore_nomenclature_fiche').show(); |
} else { |
$('#nom').val(valeurDefautNomVerna); |
$('#nom').val(VALEUR_DEFAUT_NOM_VERNA); |
$('#eflore_nomenclature_fiche').hide(); |
} |
$('#nom').addClass('valeur-defaut-recherche'); |
167,13 → 199,6 |
} |
} |
|
$(document).ready(function() { |
ajouterAutocompletionNoms(); |
ajouterActionClicSurTexteRecherche(); |
gererAffichageValeursParDefaut(); |
afficherValeurParDefaut(); |
}); |
|
/* |
* jQuery UI Autocomplete HTML Extension |
* |
185,41 → 210,35 |
* 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() ); |
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 (item.retenu == true) { |
item.label = "<strong>"+item.label+"</strong>"; |
} |
|
return $("<li></li>") |
.data("item.autocomplete", item) |
.append( $("<a></a>")[ this.options.html ? "html" : "text" ](item.label)) |
.appendTo(ul); |
} |
}); |
} |
|
$.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>"; |
} |
|
if(item.label == '...') { |
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 ); |
})( jQuery ); |