SlideShare ist ein Scribd-Unternehmen logo
1 von 32
HTML 5 Presented by David CHAU
Sommaire ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Il était une fois, HTML ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Quoi de neuf chez HTML 5? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
La syntaxe ,[object Object],<!doctype html> <html> <head> <meta charset=&quot;UTF-8&quot;> <title>Example document</title> </head> <body> <p>Example paragraph</p> </body> </html> <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;> <head> <title>Example document</title> </head> <body> <p>Example paragraph</p> </body> </html>
La syntaxe - quelques balises  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
La syntaxe - quelques balises  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
La syntaxe - quelques balises ,[object Object],[object Object],[object Object],[object Object]
La syntaxe - quelques balises ,[object Object],[object Object],[object Object],[object Object],[object Object]
La syntaxe ,[object Object]
Extensions & APIs - WebSocket ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Extensions & APIs - WebSocket ,[object Object],[object Object],[object Object],Var wSocket=new WebSoket(“ws://www.websoket.org”); wSocket.onopen=function(evt){alert(“open…”);} wSocket.onmessage=function(evt){alert(“receive…”);} wSocket.onclose=function(evt){alert(“close…”);} wSocket.postMessage(“coucou”); wSocket.disconnect();
Extensions & APIs - WebSocket ,[object Object],[object Object],[object Object],[object Object],<form> <div id=&quot;repeatformcontainer&quot;> <div id=&quot;tem1&quot;  repeat=&quot;template&quot; repeat-min=&quot;2&quot; repeat-max=&quot;5&quot; > <label>Features</label><input type=&quot;text&quot; name=&quot;product.[tem1]&quot; value=&quot;E.g, Nice eyes&quot;> <button type=remove> Remove</button> <button type=move-up> Move Up</button> <button type=move-down> Move Down</button><br /> </div> <div class=&quot;button&quot;> <button type=add template=tem1> Add</button><br /><br /></div> </div> </form> search number range color tel url email date month week time datetime datetime-local
Extensions & APIs - GéoLocalisation ,[object Object],[object Object],[object Object],// tester s’il est possible d’utiliser la geoloc If (!!navigator.geolocation) { navigator.geolocation.getCurrentPosition( function(position) { //definir la fonction capable de gerer les positions var info = “Latitude = “+position.coords.latitude +”<br/>Longitude = ”+position.coords.longitude +”<br/>Altitude = “+position.coords.altitude; alert(info); } ); } else { alert(“navigateur non compatible geo loc”); }
Extensions & APIs - Canvas ,[object Object],[object Object],[object Object],// tester si le navigateur implémente la spécification fucntion supportCanvas(){ return !!document.createElement(‘canvas’).getContext; } function draw(canvas) { var ctx = canvas.getContext(“2d”); ctx.strokeStyle=&quot;rgb(155,255,188)&quot;; ctx.lineWidth=10; ctx.arc(50, 50,Math.PI/180*60, Math.PI/180*50, false);  ctx.stroke(); } if (supportCanvas()) { var canvas = document.createElement(‘canvas’); // définir la dimension de zone canvas.height=100; canvas.weidth=100; draw(canvas); document.getElementById('container').appendChild(canvas); }
Extensions & APIs ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Extensions & APIs ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Démonstrations ,[object Object],[object Object],[object Object],[object Object]
A vous de jouer! ,[object Object]
A vous de jouer! ,[object Object],<!DOCTYPE HTML> <html> <head> <meta  charset= &quot;UTF-8&quot; > <link  rel= &quot;stylesheet&quot;   href= &quot;twitter.css&quot; > <title> Twitter public timeline reader </title> </head> <body> <menu> <button  id= &quot;load&quot; > &#8635; Refresh </button> </menu> <article  id= &quot;timeline&quot; ></article> <script  type= &quot;text/javascript&quot;   src= &quot;twitter.js&quot; ></script> <script  type= &quot;text/javascript&quot; > <!-- window.onload   = function() { Twitter.load (); document.getElementById ( 'load' ) . onclick   = function() { Twitter.load (); } } --> </script> </body> </html>
[object Object],[object Object],[object Object],[object Object],[object Object],A vous de jouer!
[object Object],A vous de jouer! load : function() { console.log('load'); //Remove JSONP scripts var head = document.getElementsByTagName('head')[0]; var scripts = null; scripts = head.getElementsByTagName('script'); for(var l=scripts.length; l--;) { head.removeChild(scripts[l]); }  document.getElementById('load').innerHTML = 'Refreshing...';  var url='http://www.twitter.com/statuses/public_timeline.json?callback= Twitter.twitterCallback ’ var script = document.createElement('script'); script.setAttribute(src', url); script.onload = function() {  document.getElementById('load').innerHTML = '&#8635; Refresh'; } console.log(script); head.appendChild(script); },
[object Object],A vous de jouer! twitterCallback : function(obj) { console.log('callback'); for (var i=0, l=obj.length; i<l; i++) { Twitter.display ({ 'id' : obj[i].id, 'username' : obj[i].user.screen_name, 'text' : obj[i].text, 'created_at' : obj[i].created_at, 'avatar' : obj[i].user.profile_image_url }); } },
[object Object],A vous de jouer! display : function(row) { console.log('display'); var timeline = document.getElementById('timeline'); var section = document.createElement('section'); var d = new Date(); d.setTime(Date.parse(row['created_at'])); section.innerHTML = '<img src=&quot;'+row['avatar']+'&quot; alt=&quot;&quot; height=&quot;24&quot; widht=&quot;24&quot;/>'+ '<span class=&quot;user&quot;>'+row['username'] + '</span> ' + row['text'] + ' <span class=&quot;date&quot;>' + prettyDate(d) + '</span>'; timeline.appendChild(section); },
[object Object],A vous de jouer!
[object Object],A vous de jouer! var db = null; try { if (window.openDatabase) { db = openDatabase(&quot;Twitter&quot;, &quot;1.0&quot;, &quot;Twitter Feed&quot;, 200000); } } catch(err) { }
[object Object],A vous de jouer! //Create table init : function() { console.log('init'); if (db) { //Have database? Read data db.transaction(function(tx) {  tx.executeSql( &quot;CREATE TABLE IF NOT EXISTS status (id REAL UNIQUE, username TEXT, created_at TEXT, text TEXT, avatar TEXT)&quot;,  [],  function(result) { Twitter.readStatus(); },  function(tx, error) { Twitter.readStatus();  } ); }); } else { //No database? Just load data and display Twitter.load(); } },
[object Object],A vous de jouer! //Read statuses readStatus : function() { console.log('read'); db.transaction(function(tx) { tx.executeSql(&quot;SELECT id, username, created_at, text, avatar FROM status ORDER BY id DESC&quot;, [], function(tx, result) { var timeline = document.getElementById('timeline'); timeline.innerHTML = ''; for (var i = 0; i < result.rows.length; ++i) { var row = result.rows.item(i); Twitter.display(row); } }, function(tx, error) { // Couldn't retrieve tweets  return; }); }); },
[object Object],A vous de jouer! twitterCallback : function(obj) { console.log('callback'); if (db) { var inserts = []; for (var i=0, l=obj.length; i<l; i++) { var status = [ obj[i].id, obj[i].user.screen_name, obj[i].text, obj[i].created_at, obj[i].user.profile_image_url ] inserts.push(status); } Twitter.insert(inserts, Twitter.readStatus); } else { //No database? just display for (var i=0, l=obj.length; i<l; i++) { Twitter.display({ 'id' : obj[i].id, 'username' : obj[i].user.screen_name, 'text' : obj[i].text,  'created_at' : obj[i].created_at, 'avatar' : obj[i].user.profile_image_url});} } },
[object Object],A vous de jouer! //Synchronous insert insert : function(arStatus, callback) { var status = arStatus.pop(); var sql = &quot;INSERT INTO status (id, username, text, created_at, avatar) VALUES (?,?,?,?,?)&quot;; db.transaction( function (tx) { tx.executeSql( sql, status, function(tx, result){ if (arStatus.length > 0) { Twitter.insert(arStatus, callback); } else { callback(); }}, function(tx, error){ if (arStatus.length > 0) { Twitter.insert(arStatus, callback); } else { callback(); }} ); } ); }
[object Object],[object Object],[object Object],[object Object],Conclusion
[object Object],Questions?

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (9)

Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenir
 
Html 5
Html 5Html 5
Html 5
 
PHP (Partie II) Par Mahdi Ben Alaya
PHP (Partie II) Par Mahdi Ben AlayaPHP (Partie II) Par Mahdi Ben Alaya
PHP (Partie II) Par Mahdi Ben Alaya
 
Les bases du CSS3
Les bases du CSS3Les bases du CSS3
Les bases du CSS3
 
Html
HtmlHtml
Html
 
Découverte HTML5/CSS3
Découverte HTML5/CSS3Découverte HTML5/CSS3
Découverte HTML5/CSS3
 
Initiation au html
Initiation au htmlInitiation au html
Initiation au html
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Bootstrap 3
 
Advanced html5
Advanced html5Advanced html5
Advanced html5
 

Andere mochten auch

HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)
HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)
HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)Khaled Djebloun
 
Formation HTML5/CSS3
Formation HTML5/CSS3Formation HTML5/CSS3
Formation HTML5/CSS3G²FOSS ENIT
 
Télétravail et égilité : un mariage impossible ?
Télétravail et égilité : un mariage impossible ?Télétravail et égilité : un mariage impossible ?
Télétravail et égilité : un mariage impossible ?Jean David Olekhnovitch
 
Introduction rapide à 'objet et à UML
Introduction rapide à 'objet et  à UML Introduction rapide à 'objet et  à UML
Introduction rapide à 'objet et à UML Mireille Blay-Fornarino
 
Java - JDBC - 2 - Intructions SQL
Java - JDBC - 2 - Intructions SQLJava - JDBC - 2 - Intructions SQL
Java - JDBC - 2 - Intructions SQLNoël
 
Application Java swing : Gestion des réunion
Application Java swing : Gestion des réunionApplication Java swing : Gestion des réunion
Application Java swing : Gestion des réunionOussama Bessrour
 
Java Server Faces (JSF)
Java Server Faces (JSF)Java Server Faces (JSF)
Java Server Faces (JSF)Heithem Abbes
 
Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)G²FOSS ENIT
 
Programmation réseau en JAVA
Programmation réseau en JAVAProgrammation réseau en JAVA
Programmation réseau en JAVABachir Benyammi
 
LPIC1 11 01 sécurité réseaux
LPIC1 11 01 sécurité réseauxLPIC1 11 01 sécurité réseaux
LPIC1 11 01 sécurité réseauxNoël
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...ENSET, Université Hassan II Casablanca
 

Andere mochten auch (20)

HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)
HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)
HTML 5, CSS 3 au service du web | Semaine du web Alger (Algérie)
 
Formation HTML5/CSS3
Formation HTML5/CSS3Formation HTML5/CSS3
Formation HTML5/CSS3
 
Télétravail et égilité : un mariage impossible ?
Télétravail et égilité : un mariage impossible ?Télétravail et égilité : un mariage impossible ?
Télétravail et égilité : un mariage impossible ?
 
Uml interactions
Uml interactionsUml interactions
Uml interactions
 
Introduction rapide à 'objet et à UML
Introduction rapide à 'objet et  à UML Introduction rapide à 'objet et  à UML
Introduction rapide à 'objet et à UML
 
Genielogiciel
GenielogicielGenielogiciel
Genielogiciel
 
Html5
Html5Html5
Html5
 
Java - JDBC - 2 - Intructions SQL
Java - JDBC - 2 - Intructions SQLJava - JDBC - 2 - Intructions SQL
Java - JDBC - 2 - Intructions SQL
 
Application Java swing : Gestion des réunion
Application Java swing : Gestion des réunionApplication Java swing : Gestion des réunion
Application Java swing : Gestion des réunion
 
De l'analyse à la conception
De l'analyse à la conceptionDe l'analyse à la conception
De l'analyse à la conception
 
Java Server Faces (JSF)
Java Server Faces (JSF)Java Server Faces (JSF)
Java Server Faces (JSF)
 
Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
 
Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)
 
JAVA, JDBC et liaison base de données
JAVA, JDBC et liaison base de donnéesJAVA, JDBC et liaison base de données
JAVA, JDBC et liaison base de données
 
Programmation réseau en JAVA
Programmation réseau en JAVAProgrammation réseau en JAVA
Programmation réseau en JAVA
 
LPIC1 11 01 sécurité réseaux
LPIC1 11 01 sécurité réseauxLPIC1 11 01 sécurité réseaux
LPIC1 11 01 sécurité réseaux
 
Uml & cas d'utilisation
Uml & cas d'utilisationUml & cas d'utilisation
Uml & cas d'utilisation
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 

Ähnlich wie Jump Camp - HTML5

Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
Structurer ses travaux SAS à l'aide de pages HTML, Joël Rivest
Structurer ses travaux SAS à l'aide de  pages HTML, Joël RivestStructurer ses travaux SAS à l'aide de  pages HTML, Joël Rivest
Structurer ses travaux SAS à l'aide de pages HTML, Joël Rivestsasreference
 
Glenn Jones : "Réutiliser les data existantes des médias sociaux"
Glenn Jones : "Réutiliser les data existantes des médias sociaux"Glenn Jones : "Réutiliser les data existantes des médias sociaux"
Glenn Jones : "Réutiliser les data existantes des médias sociaux"Christophe Ducamp
 
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
 
Publication de documents sur le Web
Publication de documents sur le WebPublication de documents sur le Web
Publication de documents sur le WebSaïd Radhouani
 
C5 Javascript French
C5 Javascript FrenchC5 Javascript French
C5 Javascript FrenchVlad Posea
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Mickael Perraud
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVCNathaniel Richand
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applicationsgoldoraf
 
TD : un chat geolocalise (mashup)
TD : un chat geolocalise (mashup)TD : un chat geolocalise (mashup)
TD : un chat geolocalise (mashup)Stéphane Rouilly
 
Android Lab Test : La connectivité réseau avec HTTP (français)
Android Lab Test : La connectivité réseau avec HTTP (français)Android Lab Test : La connectivité réseau avec HTTP (français)
Android Lab Test : La connectivité réseau avec HTTP (français)Bruno Delb
 
Rest pour l'interopérabilité
Rest pour l'interopérabilitéRest pour l'interopérabilité
Rest pour l'interopérabilitépeportier
 
Conception Web Avec Dreamweaver
Conception Web Avec DreamweaverConception Web Avec Dreamweaver
Conception Web Avec Dreamweaverdavidbx
 

Ähnlich wie Jump Camp - HTML5 (20)

Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Structurer ses travaux SAS à l'aide de pages HTML, Joël Rivest
Structurer ses travaux SAS à l'aide de  pages HTML, Joël RivestStructurer ses travaux SAS à l'aide de  pages HTML, Joël Rivest
Structurer ses travaux SAS à l'aide de pages HTML, Joël Rivest
 
Glenn Jones : "Réutiliser les data existantes des médias sociaux"
Glenn Jones : "Réutiliser les data existantes des médias sociaux"Glenn Jones : "Réutiliser les data existantes des médias sociaux"
Glenn Jones : "Réutiliser les data existantes des médias sociaux"
 
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
 
Publication de documents sur le Web
Publication de documents sur le WebPublication de documents sur le Web
Publication de documents sur le Web
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
C5 Javascript
C5 JavascriptC5 Javascript
C5 Javascript
 
C5 Javascript French
C5 Javascript FrenchC5 Javascript French
C5 Javascript French
 
Présentation WPF
Présentation  WPFPrésentation  WPF
Présentation WPF
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
 
TD : un chat geolocalise (mashup)
TD : un chat geolocalise (mashup)TD : un chat geolocalise (mashup)
TD : un chat geolocalise (mashup)
 
Paris Web
Paris WebParis Web
Paris Web
 
Documents intéractifs
Documents intéractifsDocuments intéractifs
Documents intéractifs
 
Android Lab Test : La connectivité réseau avec HTTP (français)
Android Lab Test : La connectivité réseau avec HTTP (français)Android Lab Test : La connectivité réseau avec HTTP (français)
Android Lab Test : La connectivité réseau avec HTTP (français)
 
Cours Php
Cours PhpCours Php
Cours Php
 
Cours Php
Cours PhpCours Php
Cours Php
 
Rest pour l'interopérabilité
Rest pour l'interopérabilitéRest pour l'interopérabilité
Rest pour l'interopérabilité
 
Conception Web Avec Dreamweaver
Conception Web Avec DreamweaverConception Web Avec Dreamweaver
Conception Web Avec Dreamweaver
 

Jump Camp - HTML5

  • 1. HTML 5 Presented by David CHAU
  • 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.
  • 32.

Hinweis der Redaktion

  1. HTML a toujours été le langage utilisé pour le web. Il a tout d’abord été conçu comme un langage sémantique afin de décrire des documents scientifiques. Au cours des années, le langage a beaucoup évolué, tout d’abord grâce aux différents navigateurs qui implémentaient de nouvelles fonctionnalités, puis au W3C rédigeant des spécifications permettant de standardiser le langage. Cependant, on s’est aperçu que HTML répondait mal aux exigences des applications web. La spécification de HTML 5 permet de rectifier ce manque ainsi que de mettre à jour les spécifications afin d’apporter des corrections aux différents problèmes mis en avant durant ces dernières années.
  2. Tim Berners-Lee annonce publiquement le web sur Usenet, il ne cite que le langage SGML, mais donne l’URL d’un document de suffixe .html. Techniquement, il trouvait SGML trop complexe, mais il voulait attirer la communauté hypertexte qui considérait que SGML était le langage le plus prometteur pour standardiser le format des documents hypertexte. De plus, SGML était déjà utilisé par son employeur, le CERN. A l’époque, les premiers éléments du langage HTML comprennent le titre du document, les hyperliens, la structuration du texte en titres, sous-titres, listes ou texte brut, et un mécanisme rudimentaire de recherche par index. La description de HTML est alors assez informelle et principalement définie par le support des web divers navigateurs. Avec le navigateur NCSA Mosaic, HTML connaît deux inventions majeures. D’abord l’invention de l’élément IMG permet d’intégrer des images (dans un premier temps, uniquement des GIF et des XBM) aux pages web (Mosaic 0.10). Ensuite l’invention des formulaires (Mosaic 2.0pre5) rend le web interactif en permettant aux visiteurs de saisir des données dans les pages et de les envoyer au serveur web. Cette invention permet notamment de passer des commandes, donc d’utiliser le web pour faire du commerce électronique. Netscape ajoute le support sur la présentation (clignotement, centrage…) En mars 1995, le World Wide Web Consortium (W3C) nouvellement fondé propose le résultat de ses recherches sur HTML+ : le brouillon HTML 3.0. Il comprend notamment le support des tables, des figures et des expressions mathématiques. Ce brouillon expire le 28 septembre 1995 sans donner de suites directes. Fin 1995, le RFC 1866 décrivant HTML 2.0 est finalisé. Le principal éditeur est Dan Connolly. Ce document décrit HTML tel qu’il existait avant juin 1994, donc sans les nombreuses additions de Netscape Navigator. Le 14 janvier 1997, le W3C publie la spécification HTML 3.2. Elle décrit la pratique courante observée début 1996 , donc avec une partie des additions de Netscape Navigator et d’Internet Explorer. Ses plus importantes nouveautés sont la standardisation des tables et de nombreux éléments de présentation. HTML 3.2 précède de peu HTML 4.0 et contient des éléments en prévision du support des styles et des scripts. Le 18 décembre, le W3C publie la spécification HTML 4.0 qui standardise de nombreuses extensions supportant les styles et les scripts, les cadres (frames) et les objets (inclusion généralisée de contenu). HTML 4.0 apporte également différentes améliorations pour l’accessibilité des contenus dont principalement la possibilité d’une séparation plus explicite entre structure et présentation du document, ou le support d’informations supplémentaires sur certains contenus complexes tels que les formulaires, les tableaux ou les sigles. HTML 4.0 introduit trois variantes du format, destinées à favoriser l’évolution vers un balisage plus signifiant, tout en tenant compte des limites temporaires des outils de production : la variante stricte (strict) exclut des éléments et attributs dits « de présentation », destinés à être remplacés par les styles CSS, ainsi que les éléments pour inclure applet et frame qui sont remplacés par l’élément object réputé plus apte à l’interopérabilité et à l’accessibilité. la variante transitoire (transitional) étend la variante stricte en reprenant les éléments et attributs dépréciés de HTML 3.2, dont les éléments de présentation sont couramment utilisés par les éditeurs HTML de l’époque. la variante frameset normalise la technique des jeux de cadres composant une ressource unique à partir de plusieurs pages web assemblées par le navigateur. Ces variantes perdurent par la suite sans modifications notables en HTML 4.01 et dans le format de transition XHTML 1.0 issu de HTML. La dernière spécification de HTML est la 4.01 datant du 24 décembre 1999. Elle n’apporte que des corrections mineures à la version 4.0. Le développement de HTML en tant qu’application du Standard Generalized Markup Language (SGML) est officiellement abandonné au profit de XHTML, application de Extensible Markup Language (XML). Cependant, en 2004, des fabricants de navigateurs web créent le web Hypertext Application Technology Working Group (WHATWG) dans le but, notamment, de relancer le développement du format HTML et de répondre aux nouveaux besoins sur une base technologique jugée plus aisément implémentable que celle du XHTML 2.0 en cours de conception. Ceci s’inscrit dans le contexte d’une contestation plus générale du mode de fonctionnement du W3C, réputé trop fermé par une partie des développeurs et designers web En mars 2007, tirant la conséquence des réticences d’une partie de l’industrie et des concepteurs de contenus web face à XHTML 2.0, le W3C relance le développement de HTML et crée un nouveau groupe de travail encadré par Chris Wilson (Microsoft) et initialement Dan Connolly (W3C), maintenant Michael Smith (W3C). Il s’agit notamment :de faire évoluer HTML pour décrire la sémantique des documents mais aussi les applications en ligne ;de parvenir à un langage extensible via XML tout en maintenant une version non XML compatible avec les parseurs HTML des navigateurs actuels ;et d’enrichir les interfaces utilisateurs avec des contrôles spécifiques : barres de progrès, menus, champs associés à des types de données spécifiques.Les travaux du WHATWG ont été formellement adoptés en mai 2007 comme point de départ d’une nouvelle spécification HTML 5. Ce document a été publié sous forme de Working Draft le 22 janvier 2008. Parmi les principes de conception évoqués par le groupe de travail figurent en particulier :la compatibilité des futures implémentations HTML avec le contenu web existant, et la possibilité pour d’anciens agents utilisateurs d’exploiter les futurs contenus HTML 5 ;une approche pragmatique, préférant les évolutions aux modifications radicales, et adoptant les technologies ou pratiques déjà largement partagées par les auteurs de contenus actuels ;la priorité donnée, en cas de conflit d’intérêt, aux besoins des utilisateurs sur ceux des auteurs, et par suite, à ceux des auteurs sur les contraintes d’implémentation par les navigateurs ;le compromis entre la richesse sémantique du langage et l’utilité pratique des solutions disponibles pour remplir l’objectif majeur d’indépendance envers le media de restitution. Le développement de XHTML 2.0 est initialement poursuivi en parallèle, en réponse aux besoins d’autres secteurs du web, tels que les périphériques mobiles, les applications d’entreprise et les applications serveurs. Puis, en juillet 2009, le W3C décide la non-reconduction du XHTML 2 Working Group à la fin 2009.
  3. HTML5 est tout d’abord le successeur de html4 Cette spécification de la W3C permet de définir la nouvelle version du langage HTML ainsi que le xHTML. Elle a pour objectif de passer des documents web vers le web des applications. L’ambition de cette nouvelle itération est donc de supprimer les balises obsolètes, d’en remplacer certaines et d’en introduire de nouvelles afin de donner une structure sémantique plus cohérente aux applications web. HTML s’accompagne des Web Forms 2.0 qui ajoutent de nouvelles fonctionnalités: Le contrôle rudimentaire de type et de la validité des champs une extension considérable des type pour les éléments input Des extensions aux boutons submit Des procédures pour traiter des éléments et des valeurs inattendus un modèle d’évènements générés à partir des composants d’un formulaire Une mise a jour des spécifications de la soumission d’un formulaire De nouvelles API vont ainsi standardiser un certain nombre d’interactions : - L’accès hors ligne et le stockage sur le disque dur (pour une exploitation en mode déconnecté) ; - L’édition en ligne, le drag&amp;drop ; - L’accès à l’historique de navigation… Le travail de séparation entre les données et la présentation continue. Ainsi nous pouvons voir disparaitres certains éléments comme font, center, strike ou u ainsi que les attributs align, background, bgcolor etc.
  4. HTML 5 nous offre 2 syntaxes possibles: le standard html ou le xhtml. Selon la syntaxe, il faudra indiquer respectivement le type MIME text/html ou application/xml L’encodage des caractères est simplifié coté html. Il peut cependant être indiquer via le header html ou grâce au BOM (Byte Order Mark) en début de fichier. Le doctype défini est case-insensitive. Il permet de s’assurer que le navigateur effectue un rendu en mode standard. Notez que la définition est maintenant très succinte. En effet, les versions précédentes du langage HTML étant basés sur le SGML, une DTD était requise.
  5. Par exemple un article peut contenir plusieurs sections.
  6. HTML5 introduit de nouveaux éléments visant à structurer le contenu. Ainsi nous pouvons voir apparaître les éléments section, header, footer, nav, article Prenons l’exemple suivant: Avec HTML 4, l’élément DIV était fortement utilisé afin de structurer une page HTML comme le touilleur-express. Nous aurions donc concu la page de la facon suivante. En HTML 5, la structure de la page change. Ainsi cette page deviendrait ceci.
  7. Connexion établie au premier contact avec le serveur compatible websocket. Après un accord réciproque des deux parties et certaines vérifications de sécurité la connexion est promu en TCP standard. Concernant le protocole de transport, L’entete ne fait plus que 1 octet. On passe d’un overhead de quelques octets contre les 900 octets associés aux requetes traditionnelles. Les trames son identifiées grâce au seul octet en entete. Dans le cas d’une trame binaire, la longueur de la trame est indiquées dans l’entete. Coté implémentation, pour l’instant je ne connais que Jetty et Chromium. Il me semble que webkit devrait bientôt suivre.
  8. La spécification html 5 introduit l’interface websoket
  9. HTML 5 s’accompagne des Web Forms 2.0 qui ajoutent de nouvelles fonctionnalités: Tout d’abord une extension considérable des types de l’élément input. Le type color nous permet d’obtenir une palette de couleurs et un date picker pour le type date. De plus, il offre un contrôle rudimentaire de types et de la validité des champs grâce aux types, mais aussi aux attributs tels que l’attribut pattern, le required ou bien le min et max notamment pour le type number
  10. Pour tester si le navigateur supporte les canvas, vous pouvez ajouter ce test. Si le navigateur ne supporte pas les canvas, getContext sera indefini.
  11. Dans ce TP, il faudra juste faire attention à ne pas trop rafraichir les tweets. En effet, Twitter restreints les requetes avec des quotas.
  12. Tout d’abord, créons notre structure HTML. Inserons le doctype, et l’encodage. Notre page comporte un titre, un menu constitué d’un bouton, d’un élément article vide et de deux balises script. Qui peux me dire pourquoi il existe une balise article vide? Une idée? Cette balise me sert de place-holder afin d’y injecter les tweets. Notez bien que les balises scripts se trouvent dans le body de la page et non dans le head. Je vous expliquerai pourquoi dans les slides suivants.
  13. Nous en avons fini au niveau HTML pour le moment. Passons maintenant au JavaScript. Le JavaScript va nous permettre de récupérer les données de Twitter, puis de les afficher grâce à une fonction callback qui sera bien évidemment exécuter au retour de l’appel.
  14. Cette fonction permet de récupérer les feeds publiques de twitter. Tout d’abord, un peu de nettoyage. On récupère l’élément head de la page afin d’y supprimer tous les éléments script qui pourrait s’y trouver grâce à la boucle for. On change le texte du bouton. O n constitue enfin un élément script ayant comme URL l’appel à Twitter à l’aide de l’API JSONP. Dans l’URL, on passe comme paramètre un callback=Twitter.twitterCallback. Au chargement du script, on rajoute une fonction permettant de changer le texte du bouton. Enfin, on accroche notre nouvel élément script à l’élément head.
  15. Il faut maintenant créer la fonction de callback. Cette fonction est vraiment très simple. Elle itère sur les résultats donnés par la variable obj, et pour chaque élément nous allons faire un affichage grâce à la fonction display.
  16. Ici, rien de très difficile, Tout d’abord, on récupère notre élément ayant l’id timeline. Dans notre page HTML, cet élément nous sert de place-holder ce qui nous permet d’inserer de nouveaux éléments. Nous créons ensuite un élément section auquel nous y placon une image correspondant à l’avatar de l’auteur du tweet, son message, ainsi que la date. Et voici donc la première version de notre page. Mais où intervient la base de données? Nullepart  . Nous ne l’avons pas encore créer.
  17. Afin d’utiliser la base de données nous allons apporter une petite modification sur la page HTML. Nous allons remplacer le Twitter.load par Twitter.init.
  18. Nous allons créer une variable globale db contenant notre accès à la base de données. Le test sur window.openDatabase permet de déterminer si le navigateur supporte la base de données. Si oui, nous ouvrons une instance à l’aide de cette fonction.
  19. Si la variable db n’est pas nulle, nous allons exécuter un script permettant de créer la table dans laquelle seront stockés les messages. La fonction executeSql prends ici 4 paramètres, la requetes SQL, un tableau d’objets correspondant aux variables de la requete. Ici, nous n’avons pas de variable. U ne fonction à exécuter lorsque l’exécution du SQL s’est bien passée et une autre lorqu’il y a eu une erreur. Donc l’instruction dit: dans les 2 cas, exécute la méthod. S i la variable db est nulle, le support a la base de données n’a pas été implémenté. On appelle alors la méthode de récupération des tweets.
  20. Cette méthode est seulement appelé si le navigateur supporte les base de données. Elle permet de récupérer les entrées de la table. Si la requete s’est bien passée, on vide les entrées dans notre place-holder afin des les recréer. Sinon, on ne fait rien. Mais comment les résultats sont-ils insérés en base? Il faut d’abord modifier la fonction callback.
  21. Il faut maintenant créer la fonction de callback. Cette fonction est vraiment très simple. Elle itère sur les résultats donnés par la variable obj, et pour chaque élément nous allons faire un affichage grâce à la fonction display.
  22. Nous avons déjà vu la fonction executeSQL. La fonction insert est récursive. arStatus est une LIFO. Nous dépilons l’élément puis exécutons l’insersion. Quelque soit le résultat, nous rappellons la fonction tant que la pile n’est pas vide. Enfin si elle se retrouve vide, nous appelons la fonction de callback qui est Twitter.readStatus. Maintenant, vous pouvez a nouveau tester. Vous remarquerez que la liste des entrées augmentent å chaque rafraichissement.