Jonathan Petitcolas - Les fantasques tribulations d’un geek déluré.

Archive for the ‘Javascript / Ajax’ Category

Réponse publicitaire d’Apple à Microsoft

Et voici une petite réponse d’Apple aux publicités promotionnelles de Windows Vista, dans lesquelles nous pouvions voir Bill Gates et Jerry Seinfeld. Des publicités des plus étranges, pour lesquelles je dois avouer ne pas avoir tout compris. Je vous laisse juger la réponse de la Pomme.

Pas complètement fictive cette publicité, vous ne trouvez pas ? :p

Je suis tombé aujourd’hui sur un script complètement inutile. Son but ? Mettre un effet miroir sur vos textes. Comment cela fonctionne-t-il ? Simplement en jouant avec les codes UTF-8 des différents caractères.

Il y a tant de caractères exotiques dont l’existence est inconnue… Pour vous amuser à les découvrir, c’est simple (du moins, sous Windows). Activez votre clavier numérique, laissez appuyé Alt gauche, et saisissez des séries de 4 chiffres. Le plus connu, le copyright.

Alt + 0169 = ©

 

WP Ajax Calendar, un calendrier bien sympa.

Comme indiqué dans un billet précédent, le calendrier est un widget sympathique que j’aime retrouver sur un blog. Il permet de cibler une période de l’année particulière (Noël, nouvel an, etc.). Cependant, force est de constater que le calendrier fourni par défaut par WordPress est plutôt lourd à utiliser.

Pourquoi s’amuser à recharger toute la page pour simplement changer de mois alors qu’une ancienne technologie appellée XMLHttpRequest existe ? C’est pourquoi, en cherchant sur la toile, je suis tombé sur un plugin répondant parfaitement à mes besoins : WP-Ajax-Calendar.

Pour le voir en action, regardez dans le menu à droite. Pour l’installer, c’est très simple. Il suffit de l’activer dans la partie d’administration (partie Plugins), et de remplacer la ligne d’appel de votre calendrier par :

  1. <?php ajax_calendar(); ?>

Il ne vous restera alors plus qu’à personnaliser votre feuille de style. Etape sans doute la plus difficile. ;)

Upload d’images en pseudo AJAX

Afin d’augmenter un maximum l’ergonomie de vos formulaires Web, il peut être utile de mettre en place un script d’upload d’images en Ajax. Celui-ci permettra, par exemple, de ne pas laisser attendre l’internaute sur une page tierce, ni de recharger entièrement la page actuelle. Cette technique, évitant des lourdeurs certaines, n’est cependant pas aussi simple que cela à mettre en place : Ajax ne permet pas d’uploader des images. C’est dit.

Si l’upload de photos n’est pas permis en Ajax, nous n’allons pas utiliser celui-ci. Nous nous contenterons du Javascript. Plutôt que de s’embarquer dans une théorie longue et imbuvable, regardons immédiatement un exemple.

On commence par la réalisation d’un formulaire classique d’upload d’image.

  1. <form method="POST" id="uploadImageForm" action="upload.php" target="iframe" enctype="multipart/form-data">
  2.         <input type="hidden" name="MAX_FILE_SIZE" value="1280000" />
  3.         <p>
  4.                 <label for="fileBrowser">Please select a file :</label>
  5.                 <input type="file" name="selectedFile" id="selectedFile" />
  6.         </p>
  7. </form>

Voici un formulaire tout ce qu’il y a de plus normal. On n’oublie surtout pas de spécifier l’attribut enctype dans la balise form, ainsi que la taille du fichier grâce à l’input hidden ci-dessus.

Notre upload d’images ergonomique réside en fait dans l’attribut target. On lui spécifie une iframe comme cible. Ainsi, plutôt que de recharger intégralement toute la page, le formulaire se contentera d’envoyer la page de résultat du script upload.php à l’intérieur de la frame concernée. Voyons donc le code de la frame en question…

  1. <iframe style="display: none;" id="iframe" name="iframe">
  2. </iframe>
  3.  
  4. <img id="img-original" />

Celle-ci est vide à l’origine. Et pour cause, elle ne servira qu’à récolter la réponse de l’envoi du formulaire. On remarque le display: none; permettant de ne pas polluer l’affichage.

On rajoute aussi une image, sans aucun attribut, si ce n’est un id. Cela n’est pas valide W3C, nous sommes d’accord. Remarquez que la frame n’est pas non plus très conseillée, mais bon, passons… Pour rendre votre code valide, il serait possible d’insérer dynamiquement l’image et la frame, lorsque vous en aurez besoin, via Javascript. Cependant, pour des raisons de simplicité d’explications, nous n’atteindrons pas un tel niveau de rigueur.

Le script upload.php nous retourne le code suivant :

  1. <script type="text/javascript">
  2.         var img = parent.document.getElementById(’img-original’);
  3.         img.src = ‘mon-image.jpg’;
  4. </script>

Et c’est tout. Ainsi, notre image verra sa source modifiée, et sera donc dynamiquement mise à jour. Le tout sans rechargement sauvage de toute la page. Mission accomplie !

A noter que je laisse le soin au lecteur de gérer de manière sécurisée le téléchargement de l’image du client vers le serveur, chacun ayant ses petites habitudes en la matière. ;)

Javascript : valider un formulaire avec entrée

Parfois, il peut-être utile d’envoyer un formulaire en appuyant sur la touche Enter. Cela est d’autant plus vrai que cela n’est pas tout le temps géré automatiquement. Par exemple, un formulaire sans bouton submit. Comment alors exécuter une action à la saisie de la touche Enter ?

Un peu de Javascript et de gestion des évènements nous y aidera. Tout d’abord, définissons une fonction.

  1. function onEnterPress(event, button)
  2. {
  3.      var enterPressed = (event.which && event.which == 13);
  4.      enterPressed |= (event.keyCode && event.keyCode == 13);
  5.  
  6.      if(enterPressed)    button.click();
  7. }

Il est important de gérer les propriétés event.which et event.keyCode dans un but de compatibilité maximale. De même, on spécifie l’évènement dans les paramètres, afin de ne pas oublier les navigateurs n’ayant pas de gestionnaire global d’évènements.

On appelle alors cette fonction très simplement. Exemple :

  1. <input type="text" onkeypressed="onEnterPressed(event, btnOK);" />
  2. <button id="btnOK" onclick="alert(’It works !’);">
  3.           OK
  4. </button>
  5.        
  6. <script type="text/javascript">
  7.      var btnOK = document.getElementById(’btnOK’);
  8. </script>

Il ne vous reste plus qu’à l’implémenter sur tous vos formulaires. A vos claviers ! Prêt ? Go !

Tags
Flux RSS Syndiquez ce blog
  • Blogs favoris