Overlay menu contextuel adresse email dans Thunderbird

Vous vous penchez sur le développement d'applications ou d'extensions pour Mozilla ? C'est alors vers ce forum que se dirigeront naturellement vos requêtes...
Répondre
Blueicefield
Arias
Messages : 8
Inscription : 27 avr. 2011, 14:05

Overlay menu contextuel adresse email dans Thunderbird

Message par Blueicefield »

Bonjour à tous,

J'essaie de coder une tout petit addon pour Thunderbird mais je me retrouve coincé dès le début. En effet, je cherche comment faire pour ajouter une entrée dans le menu contextuel des adresses email (dans le header d'un email en lecture).

J'ai trouvé de nombreux exemple d'overlay de menu contextuel mais il semble s'agir de menus contextuels génériques, moi je ne voudrais qu'overlayer que ceux relatifs aux clique droit sur une adressse email d'un des expéditeurs du mail.

Merci de m'aider !

PS/ J'ai effectué une recherche sur le forum avant de poster mon message et je n'ai pas trouvé de questions similaires.
Pastisman
Tyrannosaurus Rex
Messages : 2137
Inscription : 27 juin 2008, 15:18

Re: Overlay menu contextuel adresse email dans Thunderbird

Message par Pastisman »

Salut,

C'est la fenêtre message.xul qu'il faut "overlayer".
L'Id du popup dans lequel il faut ajouter ton item est "emailAddressPopup".

J'espère que cela t'aidera, sinon, n'hésite pas à revenir nous voir :)
Ma devise : Etre convaincu (en 3 mots)
Mes extensions
Blueicefield
Arias
Messages : 8
Inscription : 27 avr. 2011, 14:05

Re: Overlay menu contextuel adresse email dans Thunderbird

Message par Blueicefield »

Merci beaucoup pour ta réponse, que confirme que cela fonctionne, j'avais trouvé ça en fin de soirée hier. Mon application marche assez correctement maintenant mais je pense lui ajouter des features. Chose qui ne sera pas très simple mais cela doit être techniquement possible.
Blueicefield
Arias
Messages : 8
Inscription : 27 avr. 2011, 14:05

Re: Overlay menu contextuel adresse email dans Thunderbird

Message par Blueicefield »

Par contre, là je cherche comment faire la même chose pour le menu contextuel des adresses mail contenues dans le corps d'un email mais là je ne trouve pas, cela n'est pas dans le fichier messenger.xul, je cherche ailleurs mais sans succès.

Si vous pouvez me dire où trouver le popup menu des adresses mails ainsi que des URL dans les coprs de email cela serait génial. Merci à tous !
Pastisman
Tyrannosaurus Rex
Messages : 2137
Inscription : 27 juin 2008, 15:18

Re: Overlay menu contextuel adresse email dans Thunderbird

Message par Pastisman »

Le popup s'appelle mailContext mais il te faudra gérer l'apparition de ton item suivant que le target soit un lien ou pas.
Cela est fait dans nsContextMenu.js à la ligne 173 pour l'item "Ouvrir le lien dans le navigateur".
Je pense que le plus simple, plutôt que de surcharger la fonction de nsContextMenu, est un eventListener sur l'ouverture du popup.
Voir : https://developer.mozilla.org/en/XUL/Po ... enu_Events le paragraphe "Determining what was Context Clicked"
Ma devise : Etre convaincu (en 3 mots)
Mes extensions
Blueicefield
Arias
Messages : 8
Inscription : 27 avr. 2011, 14:05

Re: Overlay menu contextuel adresse email dans Thunderbird

Message par Blueicefield »

J'ai essayé de m'inspirer des informations du lien que tu m'as donné mais cela ne semble pas fonctionner, j'pense que je n'ai pas compris comment l'utiliser. J'veux juste ajouter une entrée dans le menu contextuel du clique droit sur les liens de sites web et mailto.
Pastisman
Tyrannosaurus Rex
Messages : 2137
Inscription : 27 juin 2008, 15:18

Re: Overlay menu contextuel adresse email dans Thunderbird

Message par Pastisman »

Si tu as réussi à ajouter une entrée pour le menu contextuel sur les adresses, as tu réussi a en ajouter une dans le menu contextuel du mail (c'est tout pareil sauf l'id du popup) ?

Une fois que tu as ton entrée, elle est active toujours normalement (dès que tu fais un clic-droit), or tu veux la masquer si le curseur n'est pas sur un lien (ou un mail).
Il faut donc ajouter ensuite dans le code de ton extension :

Code : Tout sélectionner

function MaskEntry()
{
  var element = document.popupNode;
  if( !element.getAttribute("URL")) 
  {
    document.getElementById("MonEntree").hidden = true;
  }
}

document.getElementById("mailContext").addEventListener("popupshowing", MaskEntry, false);
Pour peu que ton item s'appelle MonEntree, ça devrait à peu près être ça.
Ma devise : Etre convaincu (en 3 mots)
Mes extensions
Blueicefield
Arias
Messages : 8
Inscription : 27 avr. 2011, 14:05

Re: Overlay menu contextuel adresse email dans Thunderbird

Message par Blueicefield »

Excuse moi, j'ai été stupide... j'essayais d'overlayer "mailContext" mais cela ne marchait pas car j'avais tout bêtement oublié de mettre à jour le fichier "chrome.manifest".

Maintenant effectivement mon entrée est visible partout dans les menus contextuels, je vais donc utiliser un javascript tel que celui que tu as posté pour masquer les entées dans le menus contextuels qui ne sont pas relatifs aux mailto ou aux URL de sites.

Par contre, j'ai une question de débutant et de non expert JavaScript (j'suis plus langage Python) :
Existe-t-il une fonction pour visualiser la structure d'un objet ? Cela me serait bien pratique pour savoir les attributs que je peux récupérer des objets qui me sont rendus, j'ai été notamment obligé de chercher dans le code pour savoir à quoi ressemble la structure de l'objet renvoyé par:
findEmailNodeFromPopupNode(document.popupNode, 'emailAddressPopup')

Donc ce qu'on peut obtenir en php avec un var_dump() ou print_r() ou encore dir() en Python.

Merci à toi pour toute l'aide que tu m'apportes !
Blueicefield
Arias
Messages : 8
Inscription : 27 avr. 2011, 14:05

Re: Overlay menu contextuel adresse email dans Thunderbird

Message par Blueicefield »

Salut,

J'ai donc essayé de mettre en pratique ton script mais les menus contextuels ne s'affichent plus, j'ai cette erreur dans la console de debug :

Code : Tout sélectionner

Erreur : gContextMenu is undefined
Fichier Source : chrome://messenger/content/mailContextMenus.js
Ligne : 87
J'ai bidouillé en retirant la ligne :

Code : Tout sélectionner

document.getElementById("mailContext").addEventListener("popupshowing", HideEntry, false);
Là les menus contextuels s'affichent mais bizarrement ils contiennent une grosse liste d'éléments, c'est comme-ci tout les éléments des différents menus contextuels s'affichaient en même temps.

J'ai aussi remarqué que cette instruction ne fonctionne pas :

Code : Tout sélectionner

if( !element.getAttribute("URL")) 
Visiblement il n'existe pas d'attribut "URL" dans les objets en question, par contre, j'ai plus ou moins réussi à dumper l'objet et visiblement il y a un attribut "href", j'ai donc bossé avec ça pour masquer ou pas mes éléments dans le menu contextuel.
Par contre, j'ai toujours un amalgame d'éléments... Donc ce n'est pas encore bon !

C'est tout de même dommage de ne pas pouvoir overlayer les menus contextuels de liens de sites et d'adresses email.

Merci !!!
Pastisman
Tyrannosaurus Rex
Messages : 2137
Inscription : 27 juin 2008, 15:18

Re: Overlay menu contextuel adresse email dans Thunderbird

Message par Pastisman »

J'ai galéré mais j'y suis arrivé.

fichier PopLinkTb.js :

Code : Tout sélectionner

function MaskEntry()
{
  var element = document.popupNode;
  document.getElementById("MonEntree").hidden = !element.href;
}
Fichier PopLinkTb.xul

Code : Tout sélectionner

<overlay id="PopLinkTb"
	xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

    <popup id="mailContext" 
	       onpopupshowing="MaskEntry();return fillMailContextMenu(event);"
		   onpopuphiding="mailContextOnPopupHiding(event);">
		<menuitem id="MonEntree"
              label="Mon entree"/>
	</popup>
	
   <!-- include our javascript file -->
   <script type="text/javascript" src="chrome://PopLinkTb/content/PopLinkTb.js"/> 

</overlay>
Fichier manifest

Code : Tout sélectionner

content   PopLinkTb                 jar:chrome/PopLinkTb.jar!/content/

overlay chrome://messenger/content/mailWindowOverlay.xul chrome://PopLinkTb/content/PopLinkTb.xul
C'est effectivement moins trivial que la doc.
Ma devise : Etre convaincu (en 3 mots)
Mes extensions
Blueicefield
Arias
Messages : 8
Inscription : 27 avr. 2011, 14:05

Re: Overlay menu contextuel adresse email dans Thunderbird

Message par Blueicefield »

J'ai aussi réussi en m'inspirant simplement du code source d'un addon qui ajoute aussi une entrée dans les mêmes menus contextuels. Merci beaucoup de ton aide, je posterai ma version dans la soirée.
Blueicefield
Arias
Messages : 8
Inscription : 27 avr. 2011, 14:05

Re: Overlay menu contextuel adresse email dans Thunderbird

Message par Blueicefield »

Bonjour,

J'ai enfin fini la première release de mon application. Celle-ci se nomme Scan'Mail et elle permet de générer des QR code d'un simple clique droit sur une adresse email, un lien, un sélection de texte ou une image ce qui permet de recopier le contenu sur son smartphone (iPhone ou Android) simplement en pointant son écran de PC. Il existe une panoplie de lecteurs de QR code gratuits ou payants sous différentes plateformes (iOS, Android, Blackberry...).

La prochaine release intégrera le support du format vCard pour pouvoir complément copier un contact vers son téléphone, je m'amuse aussi avec le framework Rhodes (Ruby) pour mettre au point un scanner de QR code multiplateforme qui pourra prendre en charge une plus large palette de formats.

Le plugin est toujours en phase de contrôle par l'équipe Mozila mais vous pouvez déjà le télécharger ici :
https://addons.mozilla.org/fr/thunderbi ... /scanmail/

Un grand merci à Pastisman pour son aide !!!
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 10 invités