Merci pour la rapidité et la précision de ta réponse.
J’ai bien évidemment googlé avant de vous soumette mon message, mais
mes recherches on principalement abouti à l’info bulle type google, ou
alors des tooltips “statiques” (créer le lien sur chaque mot). Étant
profondément convaincu que Ruby est de loin le plus beau langage de
l’univers, j’ai pensé au gsub mais j’espérais au fond de moi qu’un de
ces plugins qui vous mâchent et digèrent le travail existe pour mon
besoin.
Je vais tester ta méthode bourrine, qui bien commentée devrait être
relativement maintenable Je vais également découvrir Mootools sur
tes conseils.
Bon c’est sûrement loin d’être parfait ou idiomatique mais ça a pris
2 minutes et l’idée est là.
Une petite session IRB qui confirme que l’idée fonctionne :
Mots à tooltiper
words = [‘hop’, ‘plop’].join(‘|’)
Création de la regexp
re = Regexp.new(words)
Transformation du texte
original = “j’aime les plop et les hop”
tooltiped = original.gsub(re, ‘\0’)
=> "j’aime les plop et les <span
class=“tooltip”>hop"
A ce stade il n’y a plus qu’a rendre la vue et poser l’observeur JS
(sur tous les span.tooltip) qui ira rechercher la définition d’un mot
en fonction de son “nom” (contenu texte du span).
Excellent exemple. Merci beaucoup ! Même si le faite de donner les
propriétés a Element span.tooltip avant de l’assigner à l’objet new
Tips(‘span.tooltip’); me déroute un peu j’aurai naturelement
instancié cet objet plus tôt. En revanche dans cette exemple c’est
la class Tips qui posséde donc un Observer ?!
En fait, j’instancie après parce que c’est pas le Tips à qui on
affecte la propriété mais bien l’élément DOM. C’est une extension que
propose MooTools, tu peux stocker des données “dans” l’élément HTML.
Si on ne procéde pas de cette manière, il faut mettre les infos
“inline” dans l’élément avec les attribut “title” et “rel” (de mémoire).
Quand ensuite on instancie l’objet Tip, il vérifie si on stocke dans
l’élément un tip:text et un tip:title et l’utilise plutôt que
d’utiliser les info inline. Je préfére, je trouve ça plus propre,
moins intrusif.
Et c’est bien l’objet Tip qui utilise les observer. Je n’ai pas
regardé le code en interne mais ça doit faire quelque chose du genre :
var el = $(‘id_de_mon_span’);
el.addEvent(‘hover’, function(el) {
// On crée la structure HTML pour le tooltip
// On l’affiche avec un petit effet visuel
});
Encore merci pour le temps passé, je comprends mieux comment
formuler une requet AJAX
Comme l’a déjà fait Joël, je souhaitais à mon tour te remercier pour
cet exemple bien concret que l’on peut torturer à souhait Le fait
de partir de quelque chose qui fonctionne est toujours d’une grande
aide.
Ca fait plaisir de savoir que ça aide
[Break on this error] onSuccess: function(res) {
test (ligne 54
Aurais-tu une idée d’où cela pourrait venir ? Prototype surchargerait
des fonctions javascript standards ?
Prototype surcharge effectivement des fonctions JS standards. De plus
l’utilisation conjointe de proto + mootools est impossible. Il y a
conflit entre ces deux framework.
Sans entrer dans les détails, c’est soit Prototype, soit Mootools, pas
les deux.
Comme l’a déjà fait Joël, je souhaitais à mon tour te remercier pour
cet exemple bien concret que l’on peut torturer à souhait Le fait
de partir de quelque chose qui fonctionne est toujours d’une grande
aide.
J’aurai cependant un petit problème avec ton code. Le fait d’utiliser
prototype (<%= javascript_include_tag :defaults %>) provoque deux
erreurs et empêche le fonctionnement de l’observer :
this._each is not a function
[Break on this error] this._each(function(value) {
prototyp…229532005 (ligne 593)
Request is not a constructor
[Break on this error] onSuccess: function(res) {
test (ligne 54
Aurais-tu une idée d’où cela pourrait venir ? Prototype surchargerait
des fonctions javascript standards ?
Merci pour ton aide.
Hummm, ben j’ai pas de bol alors! Va falloir que je m’amuse à adapter
ton test pour l’utiliser avec proto, soit adapter tout ce que j’ai
fait pour que ça fonctionne avec Mootools… A moins de développer moi
même une librairie javascript pour les tips compatible avec proto…
Quoi qu’il en soit, je tâcherai de partager mes travaux si ça en vaut
la peine
Encore merci