Mini code Encoder/Decoder en Base64 pour Javascript [programmation]

[niveau débutant]

Il existe plusieurs scripts sur le Net pour encoder/decoder en Base64 avec Javascript, mais c’est sur http://140byt.es/ que j’ai trouvé les plus courts, car ils font moins de 140 caractères !
Cependant, je les ai modifié légèrement pour qu’ils fonctionnent avec IE7 (et plus vieux) :

function b64_decode(d,b,c,u,r,q,x){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(r=q=x='';c=d.charAt(x++);~c&&(u=q%4?u*64+c:c,q++%4)?r+=String.fromCharCode(255&u>>(-2*q&6)):0)c=b.indexOf(c);return r}
function b64_encode(a,b,c,d,e,f){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";c="=";for(d=f='';e&=3,a.charAt(d++)||(b='=',e);f+=b.charAt(63&c>>++e*2))c=c<<8|a.charCodeAt(d-=!e);return f}

Soit un total de 436 bytes pour les deux fonctions.

Pour l'utiliser :

alert(decode_b64(encode_b64("foobar")));

A noter qu'il existe aussi window.btoa() qui fait pareil, mais qui n'est disponible qu'à partir de IE10.

Evénement sur la fermeture d’une fenêtre (window close) [javascript]

[niveau: intermédiaire]

Il est possible d’effectuer une action sur la page avant que l’utilisateur ne quitte la page (en la fermant, la rechargeant, en navigant dans l’historique, ou en cliquant sur un lien). Pour cela utilisez la méthode ci-dessous (via MDN) :

window.onbeforeunload = function (e) {
  e = e || window.event;
  // For IE and Firefox prior to version 4
  if (e) e.returnValue = 'Any string';

  // For Safari
  return 'Any string';
};

Si vous ne voulez pas ce comportement pour un clic sur un lien, alors il faudra gérer une variable qui sera activée lors d’un clic sur un tag A (exemple avec jQuery) :

__okForClosing = false;
window.onbeforeunload = function (e) {
  if (!__okForClosing) {
    e = e || window.event;
    // For IE and Firefox prior to version 4
    if (e) e.returnValue = 'Any string';

    // For Safari
    return 'Any string';
  }
};
$('a').click(function() { __okForClosing=true; });

Simple effet highlight sur un element avec jQuery [javascript]

[niveau: intermédiaire]

Si vous souhaitez créer un effet highlight sur un élément (en passant le background en jaune par exemple), voici comment il faut s’y prendre :

jQuery.prototype.highlight = function() { 
  jQuery(this).css("background-color","yellow").fadeTo('slow', 0.1, function() {
    jQuery(this).fadeTo('slow', 1.0, function() {
      jQuery(this).css("background-color","white");
    });
  });
};

jQuery('#mon-element').highlight();

A tester ici :

Hello, I’m an example Highlight
Total 31337 Highlight

Ceci est pour le test. Highlight

Retour à la ligne dans le body d’un email via le mailto [astuce]

[niveau débutant]

Si vous utilisez la commande mailto dans un lien avec le paramètre body, alors sachez que vous pouvez remplacer les caractères spéciaux par leur équivalent en codage d’URL. Par exemple l’espace  »  » pourra se faire avec %20.
En suivant ce principe, le retour à la ligne se fera avec %0D%0A

Limite de caractères dans un mailto/href sous IE [internet explorer limit]

[niveau débutant]

Je me suis retrouvé dans la situation où dans un mailto je devais inscrire plusieurs informations (subject, cc, body) afin de créer une sorte de template qui s’ouvrirait avec Outlook. Je l’avais incorporé dans un href d’un lien classique. Si le lien fonctionnait parfaitement sous Firefox, il apparait que sous Internet Explorer j’avais droit à une page blanche (about:blank)… Après quelques recherches, j’ai découvert qu’IE en « Protected Mode: Off » se limite à 508 caractères pour le mailto…. allez savoir d’où vient cette limite ?!

Pour outrepasser ce problème, vous avez deux solutions :
1) Demander à vos utilisateurs de passer en « Protected Mode: On » (non envisageable)
2) Utiliser Javascript en associant un window.location.href à votre ligne mailto:email?subject=xxx&cc=xxx&body=xxxx, qui fonctionnera pour tout le monde !

Filtrer une liste Sharepoint sur un champ de plusieurs lignes [Sharepoint Astuce]

[niveau expert]

Lorsqu’on veut filtrer une liste Sharepoint sur un champ qui contient plusieurs lignes, Sharepoint va vous forcer à utiliser « contains » ou « begins with » comme critère :
That filter type you selected cannot be used with this field. To filter fields that contain multiple lines of text, use the 'contains' or 'begins with' operators. You cannot use the 'begins with' operator if rich HTML is allowed for the field.

Cependant, quoi faire lorsqu’on souhaite filtrer sur ce champ qui ne contient aucune valeur ? Si on utilise « contains » avec un critère vide, alors cela ne fonctionne pas.
Pour contrer cette mesure et avoir un filtre qui fonctionne, il faut sélectionner :
Field is equal to nothing

Ensuite regarder le code source de la page et trouvez la valeur du champ. Cela devrait commencer par « tp_ » suivi par le nom XSL du champ (par exemple « Mon Titre » donnera « Mon_x0020_Titre »). Avec l’exemple donné dans l’image précédente la valeur est « tp_Material_x0020_Web_x0020_link_x0 ».
Maintenant dans la barre d’adresse de votre explorateur internet (sur la page de l’EditView), tapez la ligne suivante :

javascript:function byPass() { g_FieldType["tp_Material_x0020_Web_x0020_link_x0"] = ""; }; byPass();

Maintenant vous pouvez cliquer sur OK, et le filtre sera correctement appliqué.

Forcer l’IPv4 au lieu de l’IPv6 sur Linux [astuce]

[niveau intermédiaire]

J’ai constaté que l’utilisation de la commande apt-get étant devenue lente, dû au fait qu’il essaie de se connecter en ipv6 au lieu d’ipv4.

Pour modifier ce comportement, et forcer votre Linux à résoudre en ipv4 de manière générale, il suffit de modifier le fichier /etc/gai.conf en enlevant le commentaire sur la ligne :
precedence ::ffff:0:0/96 100

Ajout/Suppression/Modification d’un SELECT dans IE6 qui ne se rafraîchit pas [IE6 Exception]

[niveau: débutant]

J’ai remarqué la chose suivante : j’utilise jQuery pour ajouter/supprimer des éléments dans une liste déroulante SELECT, cependant sous IE6 le rendu de la liste n’est pas mis à jour, et de fait les modifications apparaissent de façon partielle. Pour résoudre ce problème j’ai découvert qu’il faut ajouter un élément FRAME sur la page pour que le rendu soit mis à jour ! Si on utilise jQuery, cela ne fonctionne pas, il faut donc utiliser la bonne vieille méthode :

if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) == 6) {
      var f=document.createElement('frame');
      f.display="none";
      document.body.appendChild(f);
 }

Ainsi après ma modification, j’ajoute une FRAME invisible qui va forcer IE6 à rafraîchir le rendu de la page et ainsi à mettre à jour la dropdown box.