New file |
0,0 → 1,397 |
/**-------------------------- Objets globaux -----------------------------------*/ |
/* |
* 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 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 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 VALEUR_DEFAUT_NOM_SCI : Contient la valeur par défaut affichée dans le formulaire en mode sci |
* Exemple: Rechercher un nom scientifique |
* |
* var VALEUR_DEFAUT_NOM_VERNA : Contient la valeur par défaut affichée dans le formulaire en mode verna |
* Exemple: Recherche un nom commun |
* |
* var URL_BASE_POPUP : url de base pour les popup contenant du code un peu complexe |
*/ |
|
var champs_ts = ["#au","#and","#anf","#nom","#bib"]; |
var autocompletionFicheOuverte = false; |
var elementAutocompletionSelectionne = null; |
var nomRechercheEnCours = null; |
|
$(document).ready(function() { |
initialiserMoteur(); |
}); |
|
function initialiserMoteur() { |
ajouterAutocompletion(); |
gererAffichageValeursParDefaut(); |
gererAccesFicheFlecheDroite(); |
gererClicIllustrationsResultats(); |
gererAccesFicheBouton(); |
} |
|
/**------------------- Fonctions de gestion de l'autocompletion ---------------------------------*/ |
function ajouterAutocompletion(){ |
ajouterAutocompletionNoms(); |
$('.champ_autocomplete').each(function(index) { |
ajouterAutocompletionAvancee($(this)); |
}); |
} |
|
function ajouterAutocompletionAvancee(champs){ |
champs.autocomplete({ |
source: function(requete, add){ |
// la variable de requête doit être vidée car sinon le parametre "term" est ajouté |
requete = ""; |
var id = champs.attr('id'); |
var url = encodeURI(getUrlAutocompletionAvancee(id)); |
$.getJSON(url, requete, function(data) { |
var suggestions = []; |
suggestions = traiterRetourAvance(data,champs); |
add(suggestions); |
}); |
}, |
html: true |
}); |
} |
|
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 = encodeURI(getUrlAppelCompletion()); |
$.getJSON(url, requete, function(data) { |
var suggestions = []; |
if (nomVernaculaireEstDemande()) { |
suggestions = traiterRetourNomsVerna(data); |
} else if (nomSciEstDemande()) { |
suggestions = traiterRetourNomsSci(data); |
} |
add(suggestions); |
}); |
}, |
search: function(event, ui) { |
nomRechercheEnCours = 'nom_sci'; |
}, |
focus: function(event, ui) { |
elementAutocompletionSelectionne = ui.item; |
}, |
open: function(event, ui) { |
autocompletionFicheOuverte = true; |
var parent = $('.autocompletion_nom.ui-menu-item').parent(); |
parent.width(parent.width() + 10); |
}, |
close: function(event, ui) { |
autocompletionFicheFermee = false; |
nomRechercheEnCours = null; |
}, |
html: true |
}); |
|
$("#nom").bind("autocompleteselect", function(event, ui) { |
if (ui.item.retenu == true) { |
$("#nom").addClass('ns-retenu'); |
} else { |
$("#nom").removeClass('ns-retenu'); |
} |
}); |
} |
|
// gére l'acces direct à une fiche par l'appui sur droite |
// dans la liste d'autocompletion des noms scientifiques |
function gererAccesFicheFlecheDroite() { |
$(document).keypress(function(event) { |
// flèche droite |
if(event.keyCode == 39) { |
if(autocompletionFicheOuverte && elementAutocompletionSelectionne != null && nomSciEstDemande()) { |
$('#nom').val(elementAutocompletionSelectionne.value); |
if(elementAutocompletionSelectionne.nn != undefined && elementAutocompletionSelectionne.nn != null) { |
var url_fiche_taxon = URL_BASE_FICHE_TAXON.replace('{num_taxon}',elementAutocompletionSelectionne.nn); |
window.location.href = url_fiche_taxon; |
} |
$('#nom').autocomplete( "disable" ); |
//TODO : ajout d'un message de chargement ? |
} |
} |
|
if(event.keyCode == 13) { |
if(autocompletionFicheOuverte && elementAutocompletionSelectionne == null && $('#nom').is(":focus")) { |
$('#eflore_nomenclature_submit').click(); |
} |
} |
}); |
} |
|
function gererAccesFicheBouton() { |
$('#eflore_nomenclature_fiche').click(function(event) { |
if(elementAutocompletionSelectionne != null && nomSciEstDemande()) { |
$('#nom').val(elementAutocompletionSelectionne.value); |
if(elementAutocompletionSelectionne.nn != undefined && elementAutocompletionSelectionne.nn != null) { |
var url_fiche_taxon = URL_BASE_FICHE_TAXON.replace('{num_taxon}',elementAutocompletionSelectionne.nn); |
window.location.href = url_fiche_taxon; |
} |
event.preventDefault(); |
} |
}); |
} |
|
function traiterRetourNomsSci(data) { |
var suggestions = []; |
if (data.resultat != undefined) { |
$.each(data.resultat, function(i, val) { |
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; |
if(val.retenu != "absent") { |
nom.retenu = (val.retenu == 'true') ? true : false; |
suggestions.push(nom); |
} |
} |
}); |
} |
return suggestions; |
} |
|
|
function traiterRetourAvance(data, champs) { |
var suggestions = []; |
if (jQuery.type(data) == "array") { |
$.each(data[1], function(i, val) { |
var ch = {label : '', value : ''}; |
if (suggestions.length >= AUTOCOMPLETION_ELEMENTS_NBRE) { |
ch.label = "..."; |
ch.value = champs.val(); |
suggestions.push(ch); |
return false; |
} else { |
ch.label = val; |
ch.value = val; |
suggestions.push(ch); |
} |
}); |
} |
return suggestions; |
} |
|
function traiterRetourNomsVerna(data) { |
var suggestions = []; |
if (jQuery.type(data) == "array") { |
$.each(data[1], function(i, 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); |
} |
}); |
} |
return suggestions; |
} |
|
|
/**------------ Fonctions de gestion des urls d'autocompletion et des fiches ------------------*/ |
|
function getUrlAutocompletionAvancee(parametre) { |
var valeur = getValeurMasque(parametre); |
var ns_str = getValeurNsStructure(parametre); |
var url = URL_SERVICE_AUTOCOMPLETION_NOM_SCI+"?recherche=etendue&"+ |
"navigation.limite="+AUTOCOMPLETION_ELEMENTS_NBRE +'&masque.'+parametre+'='+valeur+ |
'&retour.format=oss&distinct=1&ns.structure='+ns_str; |
return url; |
} |
|
function getValeurMasque(parametre) { |
var valeur = $('#'+parametre).val(); |
if (parametre == 'au' ){ |
valeur = valeur +',(' + valeur + ')'; |
} else if (parametre == 'bib' ){ |
valeur = valeur +', %; ' + valeur ; |
} |
return valeur; |
} |
|
function getValeurNsStructure(parametre) { |
var ns = ''; |
if (parametre == 'au' || parametre == 'bib'){ |
ns = parametre +'_ss'; |
} else { |
ns = parametre; |
} |
return ns; |
} |
|
|
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; |
} |
|
function getUrlAutocompletionNomsSci(requete) { |
var url = getUrlAutocompletion(URL_SERVICE_AUTOCOMPLETION_NOM_SCI, requete, 'min')+ |
"&ns.structure=au,an"+ |
"&retour.tri=retenu"; |
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 (($('#type_nom_vernaculaire').length <= 0) || (boutonRadioNomSci != null && boutonRadioNomSci.attr("checked") != "undefined" && boutonRadioNomSci.attr("checked") == "checked")); |
} |
|
function nomVernaculaireEstDemande() { |
var boutonRadioNomSci = $('#type_nom_vernaculaire'); |
return (boutonRadioNomSci.length > 0 && boutonRadioNomSci.attr("checked") != "undefined" && boutonRadioNomSci.attr("checked") == "checked"); |
} |
|
/**------------ Fonctions de gestion de l'affichage des valeurs par defaut ----------------------*/ |
function gererAffichageValeursParDefaut() { |
$('input[name="type_nom"]').click(function() { |
changerPlaceHolderNom(); |
}); |
changerPlaceHolderNom(); |
$('input').click(function() { |
$(this).attr('placeholder', ''); |
}); |
} |
|
function changerPlaceHolderNom() { |
if(nomSciEstDemande()) { |
$('#nom').attr('placeholder',VALEUR_DEFAUT_NOM_SCI); |
} else { |
$('#nom').attr('placeholder',VALEUR_DEFAUT_NOM_VERNA); |
} |
} |
|
/**------------ Fonctions de gestion du zoom sur les images affichées dans les résultats de recherche ----------------------*/ |
function gererClicIllustrationsResultats() { |
$('.illustration_resultat_cel').click(function() { |
var url = $(this).attr('src'); |
var titre = trouverNomTaxon($(this)); |
var url = URL_BASE_POPUP+"?module=popup-galerie&action=fiche&num_nom="+$(this).attr('data-num-nom')+"&titre="+titre+"&referentiel="+REFERENTIEL; |
window.open(url, '', 'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no, width='+(700)+', height='+(650)); |
}); |
|
$('.illustration_resultat_choro').click(function() { |
var url = $(this).attr('src').replace('108x101','432x404'); |
var titre = 'Chorologie du taxon '+trouverNomTaxon($(this)); |
ouvrirFenetreIllustrationResultat(url, titre, 432, 404); |
}); |
|
$('.illustration_resultat_coste').click(function() { |
var url = $(this).attr('src'); |
var titre = 'Illustration de Coste du taxon '+trouverNomTaxon($(this)); |
ouvrirFenetreIllustrationResultat(url, titre, 400, 400); |
}); |
} |
|
function trouverNomTaxon(objet) { |
nom = ""; |
if(nomVernaculaireEstDemande()) { |
nom = objet.parent().parent().find('a.lien_fiche_eflore').text(); |
} else { |
nom = objet.parent().find('.nom-sci a.lien_fiche_eflore').text(); |
} |
return nom; |
} |
|
function ouvrirFenetreIllustrationResultat(url, titre, hauteur, largeur) { |
var fenetre = window.open('_blank', '','directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no, width='+(largeur+17)+', height='+(hauteur+17)); |
var tmp = fenetre.document; |
tmp.write('<html><head><title>'+titre+'</title>'); |
tmp.write('</head><body>'); |
tmp.write('<p style="height='+hauteur+'px;text-align:center;line-height='+hauteur+'px;"><img id="image_agrandie" height="'+hauteur+'" width="'+largeur+'" style="vertical-align:middle;" src="'+url+'" /></p>'); |
tmp.write('</body></html>'); |
tmp.close(); |
} |
|
/* |
* 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 (item.retenu == true) { |
item.label = "<strong>"+item.label+"</strong>"; |
} |
var classe = (nomRechercheEnCours == 'nom_sci' && nomSciEstDemande()) ? 'class="autocompletion_nom"' : ''; |
return $("<li "+classe+"></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 |