Skip navigation.

digital-nation

Blog-note d'un informaticien procrastinate...

Posts tagged with "cookies"

Changer la taille de la police (ou texte) par Javascript

, , , ...

Comme vu (encore) précédement, il existait de très beau script pouvant faire changer de feuille de style par javascript.

Passons maintenant à une autre méthode : le changement de la taille de la police ou du texte par un Javascript.

Malheureusement, ce n'est pas directement possible avec une quelconque manière de le faire (nativement). De fait, une personne nommée Dustin Diaz a créé une nouvelle fonctionnalité : getElementsByClass().
Cette fonctionnalité permet de travailler sur une classe précise et uniquement celle-ci. Ce qui est plutôt pratique car si nous disposons d'une mise en page précise et que nous ne souhaitons pas voir déformée par un agrandissement global de la page (nous augmenterons donc que la taille de la police d'un conteneur spécifique par exemple).

// Création : Dustin Diaz
//Site : http://www.dustindiaz.com/getelementsbyclass
function getElementsByClass(searchClass, node, tag) { 
var classElements = new Array(); 
if ( node == null ) 
node = document; 
if ( tag == null ) 
tag = '*'; 
var els = node.getElementsByTagName(tag); 
var elsLen = els.length; 
var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)"); 
for (i = 0, j = 0; i < elsLen; i++) { 
if ( pattern.test(els[i].className) ) { 
classElements[j] = els[i]; 
j++; 
} 
} 
return classElements; 
} 


Encore une fois, si vous êtes un lecteur fidèle sur les articles concernant le Javascript, j'insiste pour dire que le Javascript est un langage interprété par le navigateur. L'internaute a le choix ou non d'utiliser cette technologie. A utiliser avec parcimonie donc.
Pour l'accessibilité directe, rien ne vaut de passer par l'interface du navigateur (le plus souvent Ctrl + Molette de la souris ou Menu Affichage et choisir les différentes tailles...).


Il est bien entendu possible (et plus aisé) d'agrandir la police de toute une page... Cela peut se faire tout aussi bien par Javascript. Point besoin d'utiliser la fonction décrite ci-dessus mais utilisons simplement une autre feuille de style (Cf. article précédent) ou une ligne de Javascript (utilisation de document.getElementByTag sur la balise Body par exemple).

Mais pourquoi faire simple lorsqu'il est plus aisé de faire complèxe.
Complèxe ne serait pas le bon mot vu que quelques personnes se sont déjà penchées sur le sujet et qu'il ne nous reste plus qu'à utiliser simplement et de manière pratique ce qu'elles ont développé. Nous pouvons même l'améliorer.

Une méthode que j'apprécie plus particulièrement et qui utilise justement getElementsByClass() est celle faite par Le Journal du Developpeur (Xavier Borderie).
Elle permet de fait à spécifier une classe sur laquelle est portée la fonction ainsi que la taille.
        // Xavier Borderie
function tailleFonte(classe, taille) { 
cibles = getElementsByClass(classe); 
for (i = 0; i < cibles.length; i++) { 
        cibles[i].style.fontSize = taille; 
        } 
    } 


Maintenant que nous avons nos deux fonctions, il ne nous reste plus qu'a faire le (x)HTML et la CSS...

Du coté CSS :
  h1 {
font-family: "Times New Roman", Times, serif;
font-size: medium;
font-weight: bold;
font-variant: small-caps;
color: #0099FF;
background-color: #CCCCCC;
width: 100%;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #FFFFFF;
}
  #conteneur {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: small;
color: #FFFFFF;
background-color: #0099FF;
width: 100%;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #0033FF;
  }
  #conteneur #entete {
  
  }
  
  #conteneur #corps {
font-size: x-small;
  }
  #conteneur #corps #zonetest {
font-size: small;
  }
  .serif {
font-family: serif; 
font-size: x-small; }
  li {
display: inline;
  }
  li:before { 
content: "|";
  }
  li:after {
content: "|";
  }


Du coté HTML :
<div id="conteneur">

<div id="entete">
<h1>Changer la taille de police par Javascript</h1>
</div>

<div id="corps">
<p>Augmenter ou diminuer la taille de la police</p>
<ul>
<li><a href="javascript:tailleFonte('serif', 'small');">Augmenter la taille</a></li>
<li><a href="javascript:tailleFonte('serif', 'x-small');">Diminuer la taille</a></li>
</ul>
<div id="zonetest">
<p id="nickname" title="monnickname" class="serif">Mon nickname est Groumphy</p>
</div>

</div>

</div>


Evidence même... Une classe, une taille avec les inconvéniants et avantages que j'ai cité ci-dessus.

Création de cookies en javascript

, , , ...

Dans un post précédent je vous indiquais comment changer le style "à la volée" grâce à un styleswitcher (en javascript).
Je vous informais aussi que pour avoir une valeur permanente, il nous fallais enregistrer le choix dans un cookies.

De fait, voyons comment créer un cookies dans ce post.

La création d'un cookies se fait aisément par document.cookies.
Pour la création il nous faut aussi quelques paramètres. Ces paramètres sont :
  1. Name : permet de donner un nom (un identifiant unique), sa valeur est une chaine de caractère (string) ;
  2. Contenu : le contenu à inscrire dans le cookies ;
  3. Expires : détermine via l'objet Date une date d'expiration du cookies ;
  4. Path : indique le répertoire où le cookies est valide, c'est à dire que toute page se trouvant dans le répertoire et ayant une fonction de lecture du cookies sera prise en compte ;
  5. Domaine : indique le nom d'hote dans lequel le cookies est valide ;
  6. Secure : informe que le cookies ne sera lu que sur un protocole HTTPS ;


Passons maintenant à une petite fonction simple :

function monCookie(nomCookies, valeurCookies, dateCookies) {
  document.cookie = nomCookies + "=" + 
      escape(valeurCookies) + (( dateCookies == null) ? "" : ("; dateCookies = " + 
      dateCookies.toGMTString())); }


Petite explication :
  • toGMTString() : transforme la chaine de caractère date en valeur date au format GMT ;
  • dateCookies == null : vérifie que la date du cookies est renseigné, à défaut, ne renseigne pas de date d'expiration ;
  • escape(valeurCookies) : transforme la valeur du cookies en valeur ASCII, son contraire est unescape(valeurCookies) et cette fonction sera utilisée dans la lecture du cookies ;
  • document.cookie : crée le cookies ;


Comme annoncé précédement, vu que nous utilisons ici la fonction escape(), nous devons évidement utiliser une fonction unescape(). Le principe est simple, nous trouvons le cookies, nous lisons le contenu du cookies et nous "décryptons" le cookies.

Faisons le point :

function decryptCookies(valeurDecrypt){
  var chaineCookies = document.cookie.indexOf (";", valeurDecrypt);
  if (chaineCookies == -1)  { chaineCookies = document.cookie.length; }
  return unescape(document.cookie.substring(valeurDecrypt, chaineCookies));  }


Que se passe t'il ici ?
Simplement que par un transfers d'une valeur dans la fonction (par la variable valeurDecrypt), je demande que l'on sépare à chaque ";" du contenu de la variable valeurDecrypt en une sous-chaine de caractère lisible (donc "décrypté" par unescape()).

Ceci n'est que pour décoder le contenu du cookies. Maintenant il nous faut accéder à ce cookies, et cela se fait via une autre petite fonction en Javascript (que nous baptiserons pourquoi pas : lireCookies).
Identiquement, à la création du cookies, cette fonction doit comporter un nombre certain de paramètre toutefois beaucoup plus restreint car je ne dois connaitre que le nom. Le restant des informations étant lu, je n'ai qu'à les extraires.

function lireCookies(nomCookies) {
  var argumentCookies = nomCookies + "=";
  var argumentLongeur = argumentCookies.length;
  var cookiesLongueur = document.cookie.length;
  var i = 0;
  while (i < cookiesLongueur){
    var j = i + argumentLongueur;
    if (document.cookie.substring(i, j) == argumentCookies) { 
        return decryptCookies(j); i = document.cookie.indexOf(" ",i) + 1; }
    if (i == 0) { break; } } return null;  }


A nouveau passons en détail la fonction :
  • nomCookies : est le nom du cookies que je dois lire... C'est la seule chose que l'on doit vraiment connaitre ;
  • cookiesLongueur : est le nombre de sous-structure que comporte le contenu du cookies, c'est la valeur structurée en zone de mémoire que nous devrons "décrypter" via la fonction decryptCookies ;
  • i : est la variable d'initialisation du compteur pour une boucle ;
  • while (i < cookiesLongueur) : est la boucle informant que tant que la valeur de i est plus petite que le nombre maximum de la zone mémoire, il doit y avoir instruction contenu dans la boucle de la fonction de décryptage du cookies (via la fonction decryptCookies(valeur_a_decrypter) qui est ici j (le nombre de la zone mémoire à décrypter) ;


Ces 3 fonctions sont dissociable en 2 parties : écriture, lecture + décryptage.

Lorsque ces 3 fonctions sont connues, maitrisée et "installée", nous pouvons donc les utiliser dans de très simples appels javascript :

dateExpiration = new Date();
dateExpiration.setDate(dateExpiration.getDay() + 15); // expire dans quinze jour
monCookies("nomDuCookies", "valeurDuCookies", dateExpiration);


Identiquement pour lire le cookie, j'emploierais donc la syntaxe suivante :

var o;
o = lireCookies('nomDuCookies');


N'oublions pas que le Javascript (je ne le répèterais jamais assez) est un langage client, donc pas obligatoirement exécuté par le logiciel du visiteur et même si ce langage est interprété par l'internaute, ce dernier peut avoir configuré le navigateur pour qu'il n'accepte pas les cookies.
Ce type de fonction est donc à interpréter avec parcimonie.

Source des codes : fr.selfhtml.org, Conseil-Creations.com, CommentCaMarche.com, etc. ; remanié par Groumphy.
December 2009
M T W T F S S
November 2009January 2010
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31