BUG : IE et le clonage de noeud texte vide
Encore un comportement curieux d'Internet Explorer...
Code, science & musings
Encore un comportement curieux d'Internet Explorer...
Une petite technique simple pour assurer la visibilité d'un élément lorsque celui-ci est descendant d'un élément qui peut defiler.
Petite présentation rapide, donc partielle, de l'écoute des événements DOM, et sur la manière dont je la gère ou que je contourne ses manques dans ma librairie javascript.
Un collègue m'a posé une question ce matin au boulot : comment récupérer le code source d'une page HTML en javascript ? Cerise sur le gâteau : cela doit fonctionner sous IE 6...
Petite précision sur la succession d'événements souris, ou pourquoi l'événement mouseout ne part pas dans certaines conditions...
Alors que j'ai besoin de développer un petit outil simple en javascript pour dessiner des graphiques, j'hésite encore entre les deux technologies actuellement disponibles : SVG et canvas...
Le site des extensions gnome-shell permet d'installer des extensions directement depuis Firefox via un plugin. Sauf qu'un bug javascript m'a empêché de l'utiliser pendant quelques jours...
Petite expérimentation sur la manière de contrôler une animation CSS à l'aide d'un objet javascript simple.
La librairie javascript rnb-js a subit quelques modifications importantes ces dernières semaines, notamment dans le support des anciens navigateurs...
Sébastien Sauvage publie un rappel fort utile pour tout les codeurs débutant qui seraient perturbés par la gestion des nombres décimaux dans leur langage de programmation préféré. Petit commentaire supplémentaire sur la manière d'éviter les problèmes en php et en javascript.
Quel est l'avantage/inconvénient d'un langage de structuration comme le HTML ou un langage de présentation comme le CSS, par rapport à des langages de programmation comme le php ou le java ?
Evolution de l'implémentation de la « syntaxe module » dans la librairie javascript rnb-js.
Un petit bout de code html/css/javascript tout simple pour filtrer l'affichage des items d'une liste à partir d'une valeur tapée dans un champ. A étendre pour appliquer à des besoins plus sépcifiques.
Apparition d'un nouveau module dans la librairie PHP, codetodoc, qui permet de générer une documentation de code javascript à partir des commentaires. Encore au stade alpha mais les premiers tests sont encourageants.
Deuxième (et dernier ?) rapport d'étape de la reconstruction de la librairie javascript rnb-js. Au menu : les composants en tant que modules et la surcharge du prototype des objets natifs.
De nombreux composants de ma librairie javascript sont en hibernation depuis pas mal de temps, certains depuis des années. C'est le cas de GeoScale, objet permettant de gérer une échelle de temps géologique. J'ai décidé de m'y remettre ces derniers jours, pour le faire évoluer vers ce qui me serait le plus utile...
En programmation, on doit toujours garder en tête les moyens d'améliorer les preformances de son code : chercher l'algorithme le plus efficace, éviter d'accéder trop souvent au DOM (en javascript), utiliser les méthodes natives des objets quand elles sont disponibles, garder des données en « cache » quand elles doivent être réutilisées, etc. Mais la quête de performance peut parfois se heurter à d'autres principes de programmation, comme la factorisation du code. Petit exemple pratique...
Durant les premières années de développement, la librairie javascript rnb-js se basait essentiellement sur la détection des navigateurs pour implémenter une action ou un comportement. Depuis plusieurs mois, j'applique plutôt une technique fortement recommandée : la détection de fonctionnalités.
Opera me surprendra toujours : souvent à la pointe de la technologie, il a plutôt bonne presse dans la communauté des développeurs web mais je l'utilise rarement ; trop rarement. Et c'est un tort, car en corrigeant un bug qui empêchait l'exécution du javascript, j'ai découvert qu'il était toujours plus en pointe que les autres, notamment dans la gestion des événements personnalisés.
Les mauvaises habitudes étant ce qu'il y a de plus dur à perdre, me voilà de nouveau atteint par une crise de « renommagïte aiguë ». Les victimes aujourd'hui : certains projets informatiques.
Premier rapport d'étape de la reconstruction de la librairie javascript rnb : les grandes lignes ont été définies ; reste a tout mettre en place.
A force de développer le site en continu, le code a fini par s'accumuler, parfois de manière un peu chaotique, sans que j'ai vraiment le temps de penser sa pertinence ou sa structure. Il est donc temps de faire un peu le ménage.
Quand on construit des applications ou des sites web, on associe toujours très étroitement CSS et javascript, a tel point qu'on oublie parfois que la présentation graphique peut être utile en dehors même de son utilisation dans un objet javascript...
L'extension Firebug pour Firefox a révolutionné le développement en javascript, à tel point qu'on se demande aujourd'hui comment nos prédécesseurs ont pu faire sans lui. Le revers de la médaille, c'est qu'on peut oublier qu'il n'est pas toujours présent, y compris sous Firefox ; l'utilisation de la console pour débuguer peut donc parfois entrainer des… bugs. Karl Dubost signale une solution pour éviter pareille erreur. Voilà pour ma part la méthode que j'utilise depuis plusieurs années dans ma librairie javascript rnb :
Curieux cri du coeur pour quelqu'un dont le boulot, c'est d'écrire du javascript. En fait, ce n'est pas le langage en lui-même qui insupporte (quoique certaines « subtilités » donnent envie de se taper la tête contre les murs), plutôt son utilisation de plus en plus outrancière...
Les nouvelle spécifications web (HTML 5 , DOM 3, CSS 3) sont de plus en plus implémentées dans les navigateurs web, à des degrés divers certes mais de manière suffisante pour pouvoir déjà être utilisées dans nos documents. Sauf qu'il faut encore et toujours faire attention : Le « browser implementation sniffing » n'est pas mort.
Petit exercice dans le cadre d'une uniformisation de mes outils de développement : l'écriture d'un même objet, une structure de noeuds hiérarchiques, dans trois langages différents : javascript, PHP et python.
Il existe plusieurs manières d'appliquer des styles aux éléments d'un document web à travers la notion de « sélecteurs ». On use (et abuse) souvent de deux d'entre eux, les sélecteurs de classes et les sélecteurs d'ID, mais pourrions-nous nous en passer ?
Je reviens depuis quelques semaines à mes premières amours, les sciences du vivant, d'abord par mes lectures, puis en essayant de développer quelques outils web aptent à présenter diverses données.
A quoi voit-on que le HTML 5, malgré tous ces défauts, est tout de même un language qui facilite la vie des développeurs ? Quand on s'apperçoit que des techniques que l'on utilise depuis des années sont dorénavant intégrées aux spécifications. Petit exemple avec la manipulation de l'attribut class.
Le web d'aujourd'hui, c'est ça : des Ogres (Google et Apple) cherchant à contrôler chaque jour un peu plus ce que l'on fait de nos vies numériques et des Hommes qui, seuls ou en groupe, préfèrent emprunter une autre voie.
Un petit utilitaire que j'utilise depuis près d'un an dans ma bibliothèque javascript et qui permet d'assurer une pseudo-internationalisation des messages d'objets.
Quand on atteint une certain degré de complexité dans son code, l'assistance d'un outliner ou de l'autocomplétion devient presque indispensable. Des outils qui font encore cruellement défaut dans Gedit, notamment pour le développement web (javascript).
Du neuf avec HTML 5, Firefox 3.5, la vidéo sur le web et les moteurs de rendu javascript ; du vieux avec - toujours et hélas - Internet Explorer 6.
Internet Explorer ne cessera jamais de m'étonner. Alors qu'on croit avoir fait plus ou moins le tour de toutes les tracasseries les plus évidentes et les plus courantes, que ce soit en css, en javascript ou en html, v'la ti pas qu'on peut encore tomber de sa chaise en déboguant du javascript au boulot. Ou pourquoi un élément fraîchement créé possède un noeud parent alors qu'il n'a encore été inséré nulle part.
Un point sur les projets en cours. Outre le nettoyage de la liste des tags qui poursuit son chemin afin de disposer d'un vocabulaire un peu mieux contrôlé, deux développement accaparent la majeure partie de mon temps libre : un outil de gestion de collections et un convertisseur d'outliners.
Imaginons : vous devez insérer un élément ou fragment de document lambda dans un document web via le DOM. Cet élément doit obéir à certaines règles CSS et, comme il n'a aucune raison d'être dans le dit document si la gestion du javascript est désactivée, vous insérez ces règles elles-aussi en manipulant le DOM. L'opération serait finalement triviale s'il n'y avait Internet Explorer.
La nouvelle architecture du site a nécessité de nombreuses adaptations techniques, notamment pour la mise en cache des pages.
Après quelques mois de latence, nous voilà replongés dans la réécriture des squelettes du site Framasoft, et plus particulièrement dans celle de la page d'accueil.
J'avais installé depuis quelque temps sur les pages index des fonctions javascript qui permettaient de modifier la liste des brèves ou des articles en fonction de la date ou de la catégorie de publication. Or, sans javascript, impossible d'accéder à ses fonctionnalités. J'ai donc traduit les fonctions en PHP.
Nouvelle bidouille javascript : j'ai enfin trouvé le moyen d'afficher les définitions tirées du glossaire de manière satisfaisante (ou presque) avec l'objet XMLHttpRequest.
Modification de la fonction javascript utilisée dans le formulaire des pages d'index, qui permettait de modifier la liste des articles ou des brèves en sélectionnant soit leur date de publication, soit leur catégorie. La nouvelle version permet de combiner les deux sélections.
Voici un outil qui pourrait être utile à beaucoup de gens : une collection de scripts javascript pour corriger les textes tapés dans des formulaires web.
Je n'avais pas mis les pieds sous Windows depuis plusieurs semaines déjà. Je l'ai fait ce midi pour vérifier comment se comportait la maquette du site avec Internet Explorer. Le résultat n'est pas brillant.
Evolution du glossaire du site avec l'expérimentation d'une technique faisant appel à l'objet xmlhttprequest chère aux tenants d'Ajax. Quoi ? Serais-je passé du côté obscur de la force ?! Pas tout à fait...
Voici une fonction javascript, NavTab, pour présenter le contenu d'une page web sous forme d'onglets, inspiré par le DomTab de Chris Heilmann.
Du nouveau dans la gestion du javascript, avec la découverte d'une astuce qui répond parfaitement aux besoins de ce site : appeler un fichier javascript à la manière des « include » PHP.
Du nouveau sur les notes de bas de page dans les documents web: d'un côté une solution javascript qui reprend le concept d'Andreas Bovens, de l'autre un outil surpuissant très séduisant.
Voilà une nouvelle évolution du switcher, cette liste de liens qui permet, en activant le script créé par Paul Sowden, de changer la feuille de styles appliquée aux pages.
Voilà finalement le nouveau moteur de recherche pour le site. Toujours en javascript, il s'appuie entièrement sur l'architecture de classification des documents, section, rubrique et mots-clés.
Nouvelle évolution du glossaire du site: la fenêtre popup qui apparaît lorsque l'on clique sur un lien-définition n'affiche plus l'ensemble du glossaire mais uniquement la définition demandée.
La reconstruction du site est terminée. Il faudra reboucher les trous de-ci de-là, mais la grosse oeuvre est finalement pliée avec la nouvelle page d'archive des brèves et ses deux formulaires de sélection.
Le chantier n'est pas encore terminé, mais je poursuis l'explication de texte des nouvelles fonctionnalités du site, avec un formulaire de recherche sur chaque page.
C'est une question qui me turlupine depuis un moment : comment présenter les notes de bas de page dans un document web de façon à ce qu'elles soient aisément consultables à l'écran, tout en respectant la construction logique du texte ?
Encore des modifications dans les quelques javascripts utilisés sur le site, notamment sur celui qui gère le style switcher.
J'ai modifié deux scripts utilisés sur le site suite à la publication des tutoriels d'Olivier Patry sur Alsacréations. Il s'agit de l'ouverture de certains liens sous forme de popup et de la gestion des galeries d'images.
La migration du site sur un nouvel hébergeur a aussi été l'occasion de modifier certains outils de gestion ou de publication.
Dans mon éternel bidouillage de la maquette du site, j'ai apporté deux modifications qui touchent à l'utilisation du javascript.
Le script utilisé pour le moteur de recherche est basé sur celui écrit pas Olivier Hondermarck pour javascript.com. Je l'ai modifié pour :
Après deux mois de tâtonnements, j'ai finalement obtenu une nouvelle maquette à peu près convenable. Voici les ultimes modifications du site.
Quelques petites techniques css et/ou javascript pour modifier le comportement par défaut des listes à puces ordonnées.
Comment gérer la création de l'écran d'une application web lorsque ces différents composants doivent être positionner par rapport à leur centre.
Analyse et tentative de d'harmonisation du comportement d'un élément select et de l'émission de l'événement change lors de la navigation au clavier sous différents navigateurs web. Où l'on voit que l'action la plus généralement adoptée n'est pas forcément la plus pertinente, surtout quand elle ne suis pas les recommendations W3C...
Comment déterminer en javascript qu'un événement click a eu lieu sur un pseudo-élément et pas ailleurs dans l'élément parent ?
Comment, dans une extension gnome-shell, permettre à un objet d'émettre des événements ; et comment se mettre à l'écoute de ces événements.
La délégation d'écoute d'événements est très préciseuse en javascript mais, dans certains cas, elle peut engendrer des comportements particuliers. C'est le cas si l'élément sur lequel on écoute les événements « click » possède un label.
Petite introduction à l'utilisation du nouvel élément HTML 5 meter et à la manière de lui assurer un rendu sur les navigateurs qui ne le supporte pas.
Comment automatiser la création d'un écran de configuration d'une extension gnome-shell en se basant sur son schéma de préférences GSettings.
Depuis Gnome 3, le stockage de la configuration d'une application se fait par l'intermédiaire de GSettings, une API « agnostique » dont l'utilisation dans un plugin Gedit ou une extension Gnome-shell pose de petits problèmes car elle nécessite les droits administrateurs. Voici quelques pistes pour l'utiliser « en local ».
Après une mise à jour avortée (la 7, prévue cet été), voici enfin que j'arrive à peu près au bout des modifications et évolutions que je souhaitais apporté au site cette année (2011).
Petite introduction à l'utilisation de l'élément progress, apparu dans les recommendations HTML 5.
Après plusieurs semaines passées dans un état lamentable, ou toute requête se terminait par une réponse 404 (même si la page était correctement affichée), voici la nouvelle version du site. Comme toujours, plus de chambardements dans l'arrière-cours qu'en vitrine...
Récupérer les enfants d'un noeud DOM est moins simple qu'il n'y paraît. Des solutions existent, et les récentes évolutions des spécifications W3C offrent de nouvelles perspectives mais un développeur web a encore besoin de créer ses propres outils. Petit tour de la question.
Et bien voilà : cela à pris plus de temps que prévu, tout n'est pas terminé, loin de là, mais nous lançons aujourd'hui une nouvelle page d'accueil de Framasoft, certains diraient en version « beta ».
L'utilisation des feuilles de styles en cascade pour mettre en page son site web n'est pas toujours évident, non que cette technique soit compliquée mais parce que, malgré l'existence de normes communes, chaque navigateur n'en fait un peu qu'à sa tête. Heureusement, des solutions existent. Cependant, leur utilisation ne risque-t-elle pas d'entretenir le statu quo ?!
Document de travail prélude à la création d'un ensemble de codes, html, css, javascript et wiki permettant de gérer une liste de tâches.
SimpleSlides est un projet tout simple, un POC pour illuster la manière dont on peut réaliser rapidement une visionneuses d'images avec du HTML, un peu de CSS et de javascript. Sa seule ambition est d'éventuellement servir de base à des projets plus aboutits et complets.
La librairie javascript rnb regroupe une série de fonctions et d'objets, développés sur le site http://omacronides.com depuis 2004, afin de les intégrer dans une structure commune.
JsValidator est un plugin pour l'éditeur de texte Gedit qui permet de valider la syntaxe d'un fichier javascript grâce à JSLint.
Projet abandonné ; étant devenu obsolète, il a été supprimé.
DMETHVIN. jQuery 2.0 Released. blog.jquery.com,
Jquery 2 abandonne le support IE 6/7/8 :-D.
KOCH, Peter-Paul. Blink. Quirks mode,
EICH, Brendan. Mozilla and Samsung Collaborate on Next Generation Web Browser Engine. The Mozilla Blog,
Donc, l'équipe de Chrome forke (à nouveau) le moteur webkit avec Blink. Donc, Mozilla et Samsung s'associent pour développer un nouveau moteur de rendu, Servo.

MOURIñO, Alvaro. Shiva – More than a RESTful API to your music collection. hacks.mozilla.org,
ZAKAS, Nicholas. Making an accessible dialog box. NCZOnline,
BERSAC, Étienne. Javascript comme langage par défaut pour GNOME. linuxfr.org,
TREITTER. Answering the question: "How do I develop an app for GNOME?". Let's Push Things Forward,
STEFANOV, Stoyan. Efficient HTML5 data- attributes. Performance Calendar,
HEILMANN, Christian. How to read performance articles. christianHeilmann.com,
NAIFEH, Justin. Decorating Your JavaScript. DailyJS,
Lancement de Web plateform Docs, un site communautaire chargé de réunir et de publier de la documentation autour des technologies web, soutenu par le W3C, Adobe, Facebook, Google, HP, Microsoft, Nokia, Mozilla et Opera (vous trouvez pas qu'il manque quelqu'un là...).
BRIGHT, Peter. Microsoft TypeScript: the JavaScript we need, or a solution looking for a problem ?. ars technica,
MEDEIROS, Miller. Namespaces are Old School. blog.millermedeiros.com,
ATKINS, Tab. A Standards-Compliant CSS Parser. Tab Completion,
YORIC. (re)introducing OS.File. Il y a du thé renversé au bord de la table,
BURKE, james. ES Modules: suggestions for improvement. Tagneto,
ROUGET, Paul. JavaScript awesomeness: Set, Map, Default arguments,.... paulrouget.com,
Map ; le getter renvoit une valeur par défaut spécififiable au lieu d'un undefined (get(key, defaultValue)).for...in, qui existe déjà) ou les valeurs (for...of) est aussi apréciable.PATONNIER, Jeremie. The Web Developer Toolbox: ThreeJS. hacks.mozilla.org,
CROLL, Angus. The JavaScript arguments object...and beyond. JavaScript, JavaScript...,
HEILMANN, Chris. Of parser-fetishists and semi-colons. christianheilmann.com,
BURKE, James. Simplicity and JavaScript modules. Tagneto,
DALE, Tom. AMD is Not the Answer. tomdale.net,
IEBLOG. Evolving ECMAScript. IEBlog,
Alors là, on applaudit bien fort l'équipe de développement d'Internet Explorer. Un bon tacle au niveau des oreilles contre Google et son Dart.
BRIGHT, Peter. JavaScript has problems. Do we need Dart to solve them ?. ars technica,
BEBENITA, Michael. Broadway.js - H.264 in JavaScript. haxpath.squarespace.com,
Après les pdf, c'est maintenant les vidéos au format h264 qui peuvent être lues directement en javascript. Enorme ! Bon, c'est juste une démonstration de faisabilité, mais tout de même...
CHUNG, Andy. Why AMD ?. requirejs.org,
KOCH, Peter-Paul. Dart; or Why JavaScript has already won. Quirksmode,
HEILMANN, Christian. A Quick Look Into The Math Of Animations With JavaScript. Smashing Magazine,
EICH, Brendan. New JavaScript Engine Module Owner. brendaneich.com,
PAUL, Ryan. Critics call foul as Google takes aim at JavaScript with Dart. arstechnica,
CROLL, Angus. Fixing the JavaScript typeof operator. Javascript, Javascript...,
LOUISREMI. Animating with javascript: from setInterval to requestAnimationFrame. hacks.mozilla.org,
BURKE, James. On inventing JS module formats and script loaders. Tagneto,
C'est RequireJs et son implémentation de la notion de modules en javascript qui m'a poussé à revoir la manière dont je gère les inclusions dans rnb-js. La librairie est d'ailleurs maintenant utilisée dans Firebug.
MICHAUX, Peter. JavaScript is Dead. Long Live JavaScript!. peter.michaux.ca,