Mot-clé - javascript

Fil des billets - Fil des commentaires

lundi, septembre 25 2006

Un peu de javascript sur mailman

Mailman est un outil bien connu pour gérer les listes de discussion. Son interface web pour la modération des messages est un brin... simpliste, pas du tout accessible. Bref, ne pas tirer sur l'ambulance, ceci dit, ce n'est pas le pied quand vous avez une centaine de clics à faire pour supprimer les spams.

Neo avait déjà donné une astuce pour automatiquement sélectionner Discard pour tous les messages (il est préférable que cette case soit cochée car 99% de nos messages à modérer sont du spam). En fait, il s'agit d'un scriptlet. Enregistré en tant que bookmark, le code Javascript sera exécuté sur la page en cours. Voici le code proposé par Neo :

javascript:var el=document.forms[0].elements;for (var i=0; i<el.length;i++) if(el[i].type=='radio' && el[i].value==3) void(el[i].checked=true);

En gros, il va regarder tous les éléments du premier formulaire de la page. Il cochera automatiquement chaque bouton radio dont la valeur est 3... donc le bouton Discard.

Je viens d'installer spamassassin sur le serveur et je cherche à récupérer les spams qui ont passé au travers de son filet sur mon adresse pour éduquer spamassassin. Pour cela, je dois cliquer sur une case à cocher et remplir un champ texte avec mon adresse email... toujours chiant si j'ai cent fois à le saisir et à cliquer. L'informatique, c'est fait pour vous débarasser des tâches ingrates. Alors hop, un nouveau petit coup de javascript. Voici le HTML en question :

<tr>
  <td COLSPAN="2"><INPUT name="senderforward-rccqfl%40monspam.com" type="CHECKBOX" value="1" >&nbsp;Forward messages (individually) to:</td>
</tr>
<tr>
  <td COLSPAN="2"><INPUT name="senderforwardto-rccqfl%40monspam.com" type="TEXT" value="maliste@monorganisation.org" size="40" ></td>
</tr>

Il faut donc cliquer automatiquement sur la case à cocher dont le nom commence par sendforward et modifier la valeur du champ dont le nom commence par sendforwardto. Heureusement, JavaScript accepte les expressions rationnelles. Voici le code javascript qui fait tout le boulot (sur plusieurs lignes pour que ce soit lisible) :

javascript:var el=document.forms[0].elements;
var retx = new RegExp('@monorganisation.org');
var reck = new RegExp('senderforward');
for (var i=0; i<el.length;i++)
{
  if(el[i].type=='radio' && el[i].value==3)
    void(el[i].checked=true);
  if(el[i].type=='text' && el[i].value.match(retx))
    void(el[i].value='spam@monorganisation.org');
  if(el[i].type=='checkbox' && el[i].name.match(reck))
    void(el[i].checked=true)
};

C'est certainement un peu crade mais ça fonctionne tout bien... encore du temps de gagné :)