Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation...

54
Programmation Web Avancée Cours 1 Yacine Bouzidi ? ? [email protected] IG2I, Centrale Lille.

Transcript of Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation...

Page 1: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Programmation Web AvanceacuteeCours 1

Yacine Bouzidi

yacinebouzidiinriafr

IG2I Centrale Lille

Objectif du cours

bull Initiation agrave la programmation web cocircteacute client

bull Conception de sites web efficaces

bull Acquisition de bonnes pratiques + culture du web

bull Conception drsquoapplications internet riches

bull Compleacutementaire agrave lrsquoUE application web cocircteacute serveur

Yacine Bouzidi Cours Seacuteance 1

Organisation

Enseignement

bull Deux heures de cours par semaine

bull Deux heures de TP par semaine

Le cours preacutesente diffeacuterents concepts dans un cadre geacuteneacuteral les TPspermettent une application plus ou moins directe

Evaluation

bull Rendu de code agrave chaque TP

bull Tp noteacute (2h)

bull Projet en groupe

Yacine Bouzidi Cours Seacuteance 1

Plan de la seacuteance

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Le Web en quelques mots

bull (au commencement) Protocole drsquoeacutechange de documents (les pages Web)

bull Le format de fichier est HTML (on va revenir dessus) speacutecifieacute par le W3C

bull Les fichiers sont stockeacutes sur des serveurs Web

bull Des clients (les navigateurs Web) se connectent au serveur en utilisant leprotocole HTTP (protocole drsquoapplication au dessus de TCPIP)

bull Les ressources sont identifieacutees par des URLs (des chaicircnes de caractegraveresau format protomachineportcheminverslaressource)

bull Les documents HTML contiennent des liens hypertexte qui permettent denaviguer de pages en pages via des URLs Les ressources drsquoune page(images scripts feuilles de style ) sont aussi deacutenoteacutees par des URLs

bull Le navigateur Web reacutecupegravere les ressources et assure le rendu (souventgraphique) de la page

Yacine Bouzidi Cours Seacuteance 1

Comment ccedila marche

Yacine Bouzidi Cours Seacuteance 1

Programmation web clientserveur

bull Cocircteacute serveur

Execution reacutealiseacutee sur le serveur (PHP Servlet)Resultat de lrsquoexeacutecution page HTML envoyeacutee par le serveur aunavigateur

bull Cocircteacute client

Execution reacutealiseacutee sur le clientNavigateur capable de realiser lrsquoexeacutecutionTransfert du code EMBARQUEacuteS dans la page HTML depuis leserveur vers le client (HTML-embedded scripting)Exemples Scripts Javascript Applets Java ActiveX Ajax

Yacine Bouzidi Cours Seacuteance 1

Exemple

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

HTMLbull HyperText Markup Language langage de mise en forme dedocuments hypertextes (texte + liens vers drsquoautres documents)Deacuteveloppeacute au CERN en 1989 par Tim Berners-Lee

bull 1991 premier navigateur en mode texte

bull 1993 premier navigateur graphique (mosaic) deacuteveloppeacute au NCSA(National Center for Supercomputing Applications)

Yacine Bouzidi Cours Seacuteance 1

Document HTML

bull Est un document semi-structureacute

bull Dont la structure est donneacutee par des balises

Exemple Rendu par deacutefautUn texte ltbgten grasltbgt Un texte en gras

lta href=httpwwwig2ifrgtUn lienltagt Un lien

ltul gtltligtPoint 1ltligtltligtPoint 2ltligt

ltulgt

bull Point 1bull Point 2

bull On dit que lttotogt est une balise ouvrante et lttotogt une balisefermante On peut eacutecrire lttotogt comme raccourci pour lttotogtlttotogt

Yacine Bouzidi Cours Seacuteance 1

Un peu drsquohistoire

1973 GML Generalised Markup Language deacuteveloppeacute chez IBMIntroduction de la notion de balise

1980 SGML Standardised GML adopteacute par lrsquoISO

1989 HTML baseacute sur SGML Plusieurs entreprises (microsoftnetscape )interpregravetent le standard de maniegravere diffeacuterente

1996 XML eXtensible Markup Language norme pour les documentssemistructureacutes (SGML simplifieacute)

2000 XHTML version de HTML suivant les conventions XML

2008 Premiegravere proposition pour le nouveau standard HTML5

2014 Standardisation de HTML5

Yacine Bouzidi Cours Seacuteance 1

XHTML vs HTML

bull XHTML version laquo XML raquo de HTML Principales diffeacuterences

Les balises sont bien parentheacuteseacutees (ltagt ltcgt ltcgt ltbgt est interdit)

Les balises sont en minuscules

bull Les avantages sont les suivants

HTML autorise les meacutelanges majusculeminuscule de ne pas fermercertaines balise Les navigateurs corrigent ces erreurs de maniegraveresdiffeacuterentes

Le document est structureacute comme un programme informatique (lesbalises ouvrantesfermantes correspondent agrave et ) Plus simple agravedeacutebugger

Yacine Bouzidi Cours Seacuteance 1

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 2: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Objectif du cours

bull Initiation agrave la programmation web cocircteacute client

bull Conception de sites web efficaces

bull Acquisition de bonnes pratiques + culture du web

bull Conception drsquoapplications internet riches

bull Compleacutementaire agrave lrsquoUE application web cocircteacute serveur

Yacine Bouzidi Cours Seacuteance 1

Organisation

Enseignement

bull Deux heures de cours par semaine

bull Deux heures de TP par semaine

Le cours preacutesente diffeacuterents concepts dans un cadre geacuteneacuteral les TPspermettent une application plus ou moins directe

Evaluation

bull Rendu de code agrave chaque TP

bull Tp noteacute (2h)

bull Projet en groupe

Yacine Bouzidi Cours Seacuteance 1

Plan de la seacuteance

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Le Web en quelques mots

bull (au commencement) Protocole drsquoeacutechange de documents (les pages Web)

bull Le format de fichier est HTML (on va revenir dessus) speacutecifieacute par le W3C

bull Les fichiers sont stockeacutes sur des serveurs Web

bull Des clients (les navigateurs Web) se connectent au serveur en utilisant leprotocole HTTP (protocole drsquoapplication au dessus de TCPIP)

bull Les ressources sont identifieacutees par des URLs (des chaicircnes de caractegraveresau format protomachineportcheminverslaressource)

bull Les documents HTML contiennent des liens hypertexte qui permettent denaviguer de pages en pages via des URLs Les ressources drsquoune page(images scripts feuilles de style ) sont aussi deacutenoteacutees par des URLs

bull Le navigateur Web reacutecupegravere les ressources et assure le rendu (souventgraphique) de la page

Yacine Bouzidi Cours Seacuteance 1

Comment ccedila marche

Yacine Bouzidi Cours Seacuteance 1

Programmation web clientserveur

bull Cocircteacute serveur

Execution reacutealiseacutee sur le serveur (PHP Servlet)Resultat de lrsquoexeacutecution page HTML envoyeacutee par le serveur aunavigateur

bull Cocircteacute client

Execution reacutealiseacutee sur le clientNavigateur capable de realiser lrsquoexeacutecutionTransfert du code EMBARQUEacuteS dans la page HTML depuis leserveur vers le client (HTML-embedded scripting)Exemples Scripts Javascript Applets Java ActiveX Ajax

Yacine Bouzidi Cours Seacuteance 1

Exemple

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

HTMLbull HyperText Markup Language langage de mise en forme dedocuments hypertextes (texte + liens vers drsquoautres documents)Deacuteveloppeacute au CERN en 1989 par Tim Berners-Lee

bull 1991 premier navigateur en mode texte

bull 1993 premier navigateur graphique (mosaic) deacuteveloppeacute au NCSA(National Center for Supercomputing Applications)

Yacine Bouzidi Cours Seacuteance 1

Document HTML

bull Est un document semi-structureacute

bull Dont la structure est donneacutee par des balises

Exemple Rendu par deacutefautUn texte ltbgten grasltbgt Un texte en gras

lta href=httpwwwig2ifrgtUn lienltagt Un lien

ltul gtltligtPoint 1ltligtltligtPoint 2ltligt

ltulgt

bull Point 1bull Point 2

bull On dit que lttotogt est une balise ouvrante et lttotogt une balisefermante On peut eacutecrire lttotogt comme raccourci pour lttotogtlttotogt

Yacine Bouzidi Cours Seacuteance 1

Un peu drsquohistoire

1973 GML Generalised Markup Language deacuteveloppeacute chez IBMIntroduction de la notion de balise

1980 SGML Standardised GML adopteacute par lrsquoISO

1989 HTML baseacute sur SGML Plusieurs entreprises (microsoftnetscape )interpregravetent le standard de maniegravere diffeacuterente

1996 XML eXtensible Markup Language norme pour les documentssemistructureacutes (SGML simplifieacute)

2000 XHTML version de HTML suivant les conventions XML

2008 Premiegravere proposition pour le nouveau standard HTML5

2014 Standardisation de HTML5

Yacine Bouzidi Cours Seacuteance 1

XHTML vs HTML

bull XHTML version laquo XML raquo de HTML Principales diffeacuterences

Les balises sont bien parentheacuteseacutees (ltagt ltcgt ltcgt ltbgt est interdit)

Les balises sont en minuscules

bull Les avantages sont les suivants

HTML autorise les meacutelanges majusculeminuscule de ne pas fermercertaines balise Les navigateurs corrigent ces erreurs de maniegraveresdiffeacuterentes

Le document est structureacute comme un programme informatique (lesbalises ouvrantesfermantes correspondent agrave et ) Plus simple agravedeacutebugger

Yacine Bouzidi Cours Seacuteance 1

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 3: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Organisation

Enseignement

bull Deux heures de cours par semaine

bull Deux heures de TP par semaine

Le cours preacutesente diffeacuterents concepts dans un cadre geacuteneacuteral les TPspermettent une application plus ou moins directe

Evaluation

bull Rendu de code agrave chaque TP

bull Tp noteacute (2h)

bull Projet en groupe

Yacine Bouzidi Cours Seacuteance 1

Plan de la seacuteance

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Le Web en quelques mots

bull (au commencement) Protocole drsquoeacutechange de documents (les pages Web)

bull Le format de fichier est HTML (on va revenir dessus) speacutecifieacute par le W3C

bull Les fichiers sont stockeacutes sur des serveurs Web

bull Des clients (les navigateurs Web) se connectent au serveur en utilisant leprotocole HTTP (protocole drsquoapplication au dessus de TCPIP)

bull Les ressources sont identifieacutees par des URLs (des chaicircnes de caractegraveresau format protomachineportcheminverslaressource)

bull Les documents HTML contiennent des liens hypertexte qui permettent denaviguer de pages en pages via des URLs Les ressources drsquoune page(images scripts feuilles de style ) sont aussi deacutenoteacutees par des URLs

bull Le navigateur Web reacutecupegravere les ressources et assure le rendu (souventgraphique) de la page

Yacine Bouzidi Cours Seacuteance 1

Comment ccedila marche

Yacine Bouzidi Cours Seacuteance 1

Programmation web clientserveur

bull Cocircteacute serveur

Execution reacutealiseacutee sur le serveur (PHP Servlet)Resultat de lrsquoexeacutecution page HTML envoyeacutee par le serveur aunavigateur

bull Cocircteacute client

Execution reacutealiseacutee sur le clientNavigateur capable de realiser lrsquoexeacutecutionTransfert du code EMBARQUEacuteS dans la page HTML depuis leserveur vers le client (HTML-embedded scripting)Exemples Scripts Javascript Applets Java ActiveX Ajax

Yacine Bouzidi Cours Seacuteance 1

Exemple

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

HTMLbull HyperText Markup Language langage de mise en forme dedocuments hypertextes (texte + liens vers drsquoautres documents)Deacuteveloppeacute au CERN en 1989 par Tim Berners-Lee

bull 1991 premier navigateur en mode texte

bull 1993 premier navigateur graphique (mosaic) deacuteveloppeacute au NCSA(National Center for Supercomputing Applications)

Yacine Bouzidi Cours Seacuteance 1

Document HTML

bull Est un document semi-structureacute

bull Dont la structure est donneacutee par des balises

Exemple Rendu par deacutefautUn texte ltbgten grasltbgt Un texte en gras

lta href=httpwwwig2ifrgtUn lienltagt Un lien

ltul gtltligtPoint 1ltligtltligtPoint 2ltligt

ltulgt

bull Point 1bull Point 2

bull On dit que lttotogt est une balise ouvrante et lttotogt une balisefermante On peut eacutecrire lttotogt comme raccourci pour lttotogtlttotogt

Yacine Bouzidi Cours Seacuteance 1

Un peu drsquohistoire

1973 GML Generalised Markup Language deacuteveloppeacute chez IBMIntroduction de la notion de balise

1980 SGML Standardised GML adopteacute par lrsquoISO

1989 HTML baseacute sur SGML Plusieurs entreprises (microsoftnetscape )interpregravetent le standard de maniegravere diffeacuterente

1996 XML eXtensible Markup Language norme pour les documentssemistructureacutes (SGML simplifieacute)

2000 XHTML version de HTML suivant les conventions XML

2008 Premiegravere proposition pour le nouveau standard HTML5

2014 Standardisation de HTML5

Yacine Bouzidi Cours Seacuteance 1

XHTML vs HTML

bull XHTML version laquo XML raquo de HTML Principales diffeacuterences

Les balises sont bien parentheacuteseacutees (ltagt ltcgt ltcgt ltbgt est interdit)

Les balises sont en minuscules

bull Les avantages sont les suivants

HTML autorise les meacutelanges majusculeminuscule de ne pas fermercertaines balise Les navigateurs corrigent ces erreurs de maniegraveresdiffeacuterentes

Le document est structureacute comme un programme informatique (lesbalises ouvrantesfermantes correspondent agrave et ) Plus simple agravedeacutebugger

Yacine Bouzidi Cours Seacuteance 1

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 4: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Plan de la seacuteance

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Le Web en quelques mots

bull (au commencement) Protocole drsquoeacutechange de documents (les pages Web)

bull Le format de fichier est HTML (on va revenir dessus) speacutecifieacute par le W3C

bull Les fichiers sont stockeacutes sur des serveurs Web

bull Des clients (les navigateurs Web) se connectent au serveur en utilisant leprotocole HTTP (protocole drsquoapplication au dessus de TCPIP)

bull Les ressources sont identifieacutees par des URLs (des chaicircnes de caractegraveresau format protomachineportcheminverslaressource)

bull Les documents HTML contiennent des liens hypertexte qui permettent denaviguer de pages en pages via des URLs Les ressources drsquoune page(images scripts feuilles de style ) sont aussi deacutenoteacutees par des URLs

bull Le navigateur Web reacutecupegravere les ressources et assure le rendu (souventgraphique) de la page

Yacine Bouzidi Cours Seacuteance 1

Comment ccedila marche

Yacine Bouzidi Cours Seacuteance 1

Programmation web clientserveur

bull Cocircteacute serveur

Execution reacutealiseacutee sur le serveur (PHP Servlet)Resultat de lrsquoexeacutecution page HTML envoyeacutee par le serveur aunavigateur

bull Cocircteacute client

Execution reacutealiseacutee sur le clientNavigateur capable de realiser lrsquoexeacutecutionTransfert du code EMBARQUEacuteS dans la page HTML depuis leserveur vers le client (HTML-embedded scripting)Exemples Scripts Javascript Applets Java ActiveX Ajax

Yacine Bouzidi Cours Seacuteance 1

Exemple

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

HTMLbull HyperText Markup Language langage de mise en forme dedocuments hypertextes (texte + liens vers drsquoautres documents)Deacuteveloppeacute au CERN en 1989 par Tim Berners-Lee

bull 1991 premier navigateur en mode texte

bull 1993 premier navigateur graphique (mosaic) deacuteveloppeacute au NCSA(National Center for Supercomputing Applications)

Yacine Bouzidi Cours Seacuteance 1

Document HTML

bull Est un document semi-structureacute

bull Dont la structure est donneacutee par des balises

Exemple Rendu par deacutefautUn texte ltbgten grasltbgt Un texte en gras

lta href=httpwwwig2ifrgtUn lienltagt Un lien

ltul gtltligtPoint 1ltligtltligtPoint 2ltligt

ltulgt

bull Point 1bull Point 2

bull On dit que lttotogt est une balise ouvrante et lttotogt une balisefermante On peut eacutecrire lttotogt comme raccourci pour lttotogtlttotogt

Yacine Bouzidi Cours Seacuteance 1

Un peu drsquohistoire

1973 GML Generalised Markup Language deacuteveloppeacute chez IBMIntroduction de la notion de balise

1980 SGML Standardised GML adopteacute par lrsquoISO

1989 HTML baseacute sur SGML Plusieurs entreprises (microsoftnetscape )interpregravetent le standard de maniegravere diffeacuterente

1996 XML eXtensible Markup Language norme pour les documentssemistructureacutes (SGML simplifieacute)

2000 XHTML version de HTML suivant les conventions XML

2008 Premiegravere proposition pour le nouveau standard HTML5

2014 Standardisation de HTML5

Yacine Bouzidi Cours Seacuteance 1

XHTML vs HTML

bull XHTML version laquo XML raquo de HTML Principales diffeacuterences

Les balises sont bien parentheacuteseacutees (ltagt ltcgt ltcgt ltbgt est interdit)

Les balises sont en minuscules

bull Les avantages sont les suivants

HTML autorise les meacutelanges majusculeminuscule de ne pas fermercertaines balise Les navigateurs corrigent ces erreurs de maniegraveresdiffeacuterentes

Le document est structureacute comme un programme informatique (lesbalises ouvrantesfermantes correspondent agrave et ) Plus simple agravedeacutebugger

Yacine Bouzidi Cours Seacuteance 1

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 5: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Le Web en quelques mots

bull (au commencement) Protocole drsquoeacutechange de documents (les pages Web)

bull Le format de fichier est HTML (on va revenir dessus) speacutecifieacute par le W3C

bull Les fichiers sont stockeacutes sur des serveurs Web

bull Des clients (les navigateurs Web) se connectent au serveur en utilisant leprotocole HTTP (protocole drsquoapplication au dessus de TCPIP)

bull Les ressources sont identifieacutees par des URLs (des chaicircnes de caractegraveresau format protomachineportcheminverslaressource)

bull Les documents HTML contiennent des liens hypertexte qui permettent denaviguer de pages en pages via des URLs Les ressources drsquoune page(images scripts feuilles de style ) sont aussi deacutenoteacutees par des URLs

bull Le navigateur Web reacutecupegravere les ressources et assure le rendu (souventgraphique) de la page

Yacine Bouzidi Cours Seacuteance 1

Comment ccedila marche

Yacine Bouzidi Cours Seacuteance 1

Programmation web clientserveur

bull Cocircteacute serveur

Execution reacutealiseacutee sur le serveur (PHP Servlet)Resultat de lrsquoexeacutecution page HTML envoyeacutee par le serveur aunavigateur

bull Cocircteacute client

Execution reacutealiseacutee sur le clientNavigateur capable de realiser lrsquoexeacutecutionTransfert du code EMBARQUEacuteS dans la page HTML depuis leserveur vers le client (HTML-embedded scripting)Exemples Scripts Javascript Applets Java ActiveX Ajax

Yacine Bouzidi Cours Seacuteance 1

Exemple

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

HTMLbull HyperText Markup Language langage de mise en forme dedocuments hypertextes (texte + liens vers drsquoautres documents)Deacuteveloppeacute au CERN en 1989 par Tim Berners-Lee

bull 1991 premier navigateur en mode texte

bull 1993 premier navigateur graphique (mosaic) deacuteveloppeacute au NCSA(National Center for Supercomputing Applications)

Yacine Bouzidi Cours Seacuteance 1

Document HTML

bull Est un document semi-structureacute

bull Dont la structure est donneacutee par des balises

Exemple Rendu par deacutefautUn texte ltbgten grasltbgt Un texte en gras

lta href=httpwwwig2ifrgtUn lienltagt Un lien

ltul gtltligtPoint 1ltligtltligtPoint 2ltligt

ltulgt

bull Point 1bull Point 2

bull On dit que lttotogt est une balise ouvrante et lttotogt une balisefermante On peut eacutecrire lttotogt comme raccourci pour lttotogtlttotogt

Yacine Bouzidi Cours Seacuteance 1

Un peu drsquohistoire

1973 GML Generalised Markup Language deacuteveloppeacute chez IBMIntroduction de la notion de balise

1980 SGML Standardised GML adopteacute par lrsquoISO

1989 HTML baseacute sur SGML Plusieurs entreprises (microsoftnetscape )interpregravetent le standard de maniegravere diffeacuterente

1996 XML eXtensible Markup Language norme pour les documentssemistructureacutes (SGML simplifieacute)

2000 XHTML version de HTML suivant les conventions XML

2008 Premiegravere proposition pour le nouveau standard HTML5

2014 Standardisation de HTML5

Yacine Bouzidi Cours Seacuteance 1

XHTML vs HTML

bull XHTML version laquo XML raquo de HTML Principales diffeacuterences

Les balises sont bien parentheacuteseacutees (ltagt ltcgt ltcgt ltbgt est interdit)

Les balises sont en minuscules

bull Les avantages sont les suivants

HTML autorise les meacutelanges majusculeminuscule de ne pas fermercertaines balise Les navigateurs corrigent ces erreurs de maniegraveresdiffeacuterentes

Le document est structureacute comme un programme informatique (lesbalises ouvrantesfermantes correspondent agrave et ) Plus simple agravedeacutebugger

Yacine Bouzidi Cours Seacuteance 1

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 6: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Le Web en quelques mots

bull (au commencement) Protocole drsquoeacutechange de documents (les pages Web)

bull Le format de fichier est HTML (on va revenir dessus) speacutecifieacute par le W3C

bull Les fichiers sont stockeacutes sur des serveurs Web

bull Des clients (les navigateurs Web) se connectent au serveur en utilisant leprotocole HTTP (protocole drsquoapplication au dessus de TCPIP)

bull Les ressources sont identifieacutees par des URLs (des chaicircnes de caractegraveresau format protomachineportcheminverslaressource)

bull Les documents HTML contiennent des liens hypertexte qui permettent denaviguer de pages en pages via des URLs Les ressources drsquoune page(images scripts feuilles de style ) sont aussi deacutenoteacutees par des URLs

bull Le navigateur Web reacutecupegravere les ressources et assure le rendu (souventgraphique) de la page

Yacine Bouzidi Cours Seacuteance 1

Comment ccedila marche

Yacine Bouzidi Cours Seacuteance 1

Programmation web clientserveur

bull Cocircteacute serveur

Execution reacutealiseacutee sur le serveur (PHP Servlet)Resultat de lrsquoexeacutecution page HTML envoyeacutee par le serveur aunavigateur

bull Cocircteacute client

Execution reacutealiseacutee sur le clientNavigateur capable de realiser lrsquoexeacutecutionTransfert du code EMBARQUEacuteS dans la page HTML depuis leserveur vers le client (HTML-embedded scripting)Exemples Scripts Javascript Applets Java ActiveX Ajax

Yacine Bouzidi Cours Seacuteance 1

Exemple

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

HTMLbull HyperText Markup Language langage de mise en forme dedocuments hypertextes (texte + liens vers drsquoautres documents)Deacuteveloppeacute au CERN en 1989 par Tim Berners-Lee

bull 1991 premier navigateur en mode texte

bull 1993 premier navigateur graphique (mosaic) deacuteveloppeacute au NCSA(National Center for Supercomputing Applications)

Yacine Bouzidi Cours Seacuteance 1

Document HTML

bull Est un document semi-structureacute

bull Dont la structure est donneacutee par des balises

Exemple Rendu par deacutefautUn texte ltbgten grasltbgt Un texte en gras

lta href=httpwwwig2ifrgtUn lienltagt Un lien

ltul gtltligtPoint 1ltligtltligtPoint 2ltligt

ltulgt

bull Point 1bull Point 2

bull On dit que lttotogt est une balise ouvrante et lttotogt une balisefermante On peut eacutecrire lttotogt comme raccourci pour lttotogtlttotogt

Yacine Bouzidi Cours Seacuteance 1

Un peu drsquohistoire

1973 GML Generalised Markup Language deacuteveloppeacute chez IBMIntroduction de la notion de balise

1980 SGML Standardised GML adopteacute par lrsquoISO

1989 HTML baseacute sur SGML Plusieurs entreprises (microsoftnetscape )interpregravetent le standard de maniegravere diffeacuterente

1996 XML eXtensible Markup Language norme pour les documentssemistructureacutes (SGML simplifieacute)

2000 XHTML version de HTML suivant les conventions XML

2008 Premiegravere proposition pour le nouveau standard HTML5

2014 Standardisation de HTML5

Yacine Bouzidi Cours Seacuteance 1

XHTML vs HTML

bull XHTML version laquo XML raquo de HTML Principales diffeacuterences

Les balises sont bien parentheacuteseacutees (ltagt ltcgt ltcgt ltbgt est interdit)

Les balises sont en minuscules

bull Les avantages sont les suivants

HTML autorise les meacutelanges majusculeminuscule de ne pas fermercertaines balise Les navigateurs corrigent ces erreurs de maniegraveresdiffeacuterentes

Le document est structureacute comme un programme informatique (lesbalises ouvrantesfermantes correspondent agrave et ) Plus simple agravedeacutebugger

Yacine Bouzidi Cours Seacuteance 1

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 7: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Comment ccedila marche

Yacine Bouzidi Cours Seacuteance 1

Programmation web clientserveur

bull Cocircteacute serveur

Execution reacutealiseacutee sur le serveur (PHP Servlet)Resultat de lrsquoexeacutecution page HTML envoyeacutee par le serveur aunavigateur

bull Cocircteacute client

Execution reacutealiseacutee sur le clientNavigateur capable de realiser lrsquoexeacutecutionTransfert du code EMBARQUEacuteS dans la page HTML depuis leserveur vers le client (HTML-embedded scripting)Exemples Scripts Javascript Applets Java ActiveX Ajax

Yacine Bouzidi Cours Seacuteance 1

Exemple

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

HTMLbull HyperText Markup Language langage de mise en forme dedocuments hypertextes (texte + liens vers drsquoautres documents)Deacuteveloppeacute au CERN en 1989 par Tim Berners-Lee

bull 1991 premier navigateur en mode texte

bull 1993 premier navigateur graphique (mosaic) deacuteveloppeacute au NCSA(National Center for Supercomputing Applications)

Yacine Bouzidi Cours Seacuteance 1

Document HTML

bull Est un document semi-structureacute

bull Dont la structure est donneacutee par des balises

Exemple Rendu par deacutefautUn texte ltbgten grasltbgt Un texte en gras

lta href=httpwwwig2ifrgtUn lienltagt Un lien

ltul gtltligtPoint 1ltligtltligtPoint 2ltligt

ltulgt

bull Point 1bull Point 2

bull On dit que lttotogt est une balise ouvrante et lttotogt une balisefermante On peut eacutecrire lttotogt comme raccourci pour lttotogtlttotogt

Yacine Bouzidi Cours Seacuteance 1

Un peu drsquohistoire

1973 GML Generalised Markup Language deacuteveloppeacute chez IBMIntroduction de la notion de balise

1980 SGML Standardised GML adopteacute par lrsquoISO

1989 HTML baseacute sur SGML Plusieurs entreprises (microsoftnetscape )interpregravetent le standard de maniegravere diffeacuterente

1996 XML eXtensible Markup Language norme pour les documentssemistructureacutes (SGML simplifieacute)

2000 XHTML version de HTML suivant les conventions XML

2008 Premiegravere proposition pour le nouveau standard HTML5

2014 Standardisation de HTML5

Yacine Bouzidi Cours Seacuteance 1

XHTML vs HTML

bull XHTML version laquo XML raquo de HTML Principales diffeacuterences

Les balises sont bien parentheacuteseacutees (ltagt ltcgt ltcgt ltbgt est interdit)

Les balises sont en minuscules

bull Les avantages sont les suivants

HTML autorise les meacutelanges majusculeminuscule de ne pas fermercertaines balise Les navigateurs corrigent ces erreurs de maniegraveresdiffeacuterentes

Le document est structureacute comme un programme informatique (lesbalises ouvrantesfermantes correspondent agrave et ) Plus simple agravedeacutebugger

Yacine Bouzidi Cours Seacuteance 1

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 8: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Programmation web clientserveur

bull Cocircteacute serveur

Execution reacutealiseacutee sur le serveur (PHP Servlet)Resultat de lrsquoexeacutecution page HTML envoyeacutee par le serveur aunavigateur

bull Cocircteacute client

Execution reacutealiseacutee sur le clientNavigateur capable de realiser lrsquoexeacutecutionTransfert du code EMBARQUEacuteS dans la page HTML depuis leserveur vers le client (HTML-embedded scripting)Exemples Scripts Javascript Applets Java ActiveX Ajax

Yacine Bouzidi Cours Seacuteance 1

Exemple

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

HTMLbull HyperText Markup Language langage de mise en forme dedocuments hypertextes (texte + liens vers drsquoautres documents)Deacuteveloppeacute au CERN en 1989 par Tim Berners-Lee

bull 1991 premier navigateur en mode texte

bull 1993 premier navigateur graphique (mosaic) deacuteveloppeacute au NCSA(National Center for Supercomputing Applications)

Yacine Bouzidi Cours Seacuteance 1

Document HTML

bull Est un document semi-structureacute

bull Dont la structure est donneacutee par des balises

Exemple Rendu par deacutefautUn texte ltbgten grasltbgt Un texte en gras

lta href=httpwwwig2ifrgtUn lienltagt Un lien

ltul gtltligtPoint 1ltligtltligtPoint 2ltligt

ltulgt

bull Point 1bull Point 2

bull On dit que lttotogt est une balise ouvrante et lttotogt une balisefermante On peut eacutecrire lttotogt comme raccourci pour lttotogtlttotogt

Yacine Bouzidi Cours Seacuteance 1

Un peu drsquohistoire

1973 GML Generalised Markup Language deacuteveloppeacute chez IBMIntroduction de la notion de balise

1980 SGML Standardised GML adopteacute par lrsquoISO

1989 HTML baseacute sur SGML Plusieurs entreprises (microsoftnetscape )interpregravetent le standard de maniegravere diffeacuterente

1996 XML eXtensible Markup Language norme pour les documentssemistructureacutes (SGML simplifieacute)

2000 XHTML version de HTML suivant les conventions XML

2008 Premiegravere proposition pour le nouveau standard HTML5

2014 Standardisation de HTML5

Yacine Bouzidi Cours Seacuteance 1

XHTML vs HTML

bull XHTML version laquo XML raquo de HTML Principales diffeacuterences

Les balises sont bien parentheacuteseacutees (ltagt ltcgt ltcgt ltbgt est interdit)

Les balises sont en minuscules

bull Les avantages sont les suivants

HTML autorise les meacutelanges majusculeminuscule de ne pas fermercertaines balise Les navigateurs corrigent ces erreurs de maniegraveresdiffeacuterentes

Le document est structureacute comme un programme informatique (lesbalises ouvrantesfermantes correspondent agrave et ) Plus simple agravedeacutebugger

Yacine Bouzidi Cours Seacuteance 1

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 9: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Exemple

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

HTMLbull HyperText Markup Language langage de mise en forme dedocuments hypertextes (texte + liens vers drsquoautres documents)Deacuteveloppeacute au CERN en 1989 par Tim Berners-Lee

bull 1991 premier navigateur en mode texte

bull 1993 premier navigateur graphique (mosaic) deacuteveloppeacute au NCSA(National Center for Supercomputing Applications)

Yacine Bouzidi Cours Seacuteance 1

Document HTML

bull Est un document semi-structureacute

bull Dont la structure est donneacutee par des balises

Exemple Rendu par deacutefautUn texte ltbgten grasltbgt Un texte en gras

lta href=httpwwwig2ifrgtUn lienltagt Un lien

ltul gtltligtPoint 1ltligtltligtPoint 2ltligt

ltulgt

bull Point 1bull Point 2

bull On dit que lttotogt est une balise ouvrante et lttotogt une balisefermante On peut eacutecrire lttotogt comme raccourci pour lttotogtlttotogt

Yacine Bouzidi Cours Seacuteance 1

Un peu drsquohistoire

1973 GML Generalised Markup Language deacuteveloppeacute chez IBMIntroduction de la notion de balise

1980 SGML Standardised GML adopteacute par lrsquoISO

1989 HTML baseacute sur SGML Plusieurs entreprises (microsoftnetscape )interpregravetent le standard de maniegravere diffeacuterente

1996 XML eXtensible Markup Language norme pour les documentssemistructureacutes (SGML simplifieacute)

2000 XHTML version de HTML suivant les conventions XML

2008 Premiegravere proposition pour le nouveau standard HTML5

2014 Standardisation de HTML5

Yacine Bouzidi Cours Seacuteance 1

XHTML vs HTML

bull XHTML version laquo XML raquo de HTML Principales diffeacuterences

Les balises sont bien parentheacuteseacutees (ltagt ltcgt ltcgt ltbgt est interdit)

Les balises sont en minuscules

bull Les avantages sont les suivants

HTML autorise les meacutelanges majusculeminuscule de ne pas fermercertaines balise Les navigateurs corrigent ces erreurs de maniegraveresdiffeacuterentes

Le document est structureacute comme un programme informatique (lesbalises ouvrantesfermantes correspondent agrave et ) Plus simple agravedeacutebugger

Yacine Bouzidi Cours Seacuteance 1

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 10: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

HTMLbull HyperText Markup Language langage de mise en forme dedocuments hypertextes (texte + liens vers drsquoautres documents)Deacuteveloppeacute au CERN en 1989 par Tim Berners-Lee

bull 1991 premier navigateur en mode texte

bull 1993 premier navigateur graphique (mosaic) deacuteveloppeacute au NCSA(National Center for Supercomputing Applications)

Yacine Bouzidi Cours Seacuteance 1

Document HTML

bull Est un document semi-structureacute

bull Dont la structure est donneacutee par des balises

Exemple Rendu par deacutefautUn texte ltbgten grasltbgt Un texte en gras

lta href=httpwwwig2ifrgtUn lienltagt Un lien

ltul gtltligtPoint 1ltligtltligtPoint 2ltligt

ltulgt

bull Point 1bull Point 2

bull On dit que lttotogt est une balise ouvrante et lttotogt une balisefermante On peut eacutecrire lttotogt comme raccourci pour lttotogtlttotogt

Yacine Bouzidi Cours Seacuteance 1

Un peu drsquohistoire

1973 GML Generalised Markup Language deacuteveloppeacute chez IBMIntroduction de la notion de balise

1980 SGML Standardised GML adopteacute par lrsquoISO

1989 HTML baseacute sur SGML Plusieurs entreprises (microsoftnetscape )interpregravetent le standard de maniegravere diffeacuterente

1996 XML eXtensible Markup Language norme pour les documentssemistructureacutes (SGML simplifieacute)

2000 XHTML version de HTML suivant les conventions XML

2008 Premiegravere proposition pour le nouveau standard HTML5

2014 Standardisation de HTML5

Yacine Bouzidi Cours Seacuteance 1

XHTML vs HTML

bull XHTML version laquo XML raquo de HTML Principales diffeacuterences

Les balises sont bien parentheacuteseacutees (ltagt ltcgt ltcgt ltbgt est interdit)

Les balises sont en minuscules

bull Les avantages sont les suivants

HTML autorise les meacutelanges majusculeminuscule de ne pas fermercertaines balise Les navigateurs corrigent ces erreurs de maniegraveresdiffeacuterentes

Le document est structureacute comme un programme informatique (lesbalises ouvrantesfermantes correspondent agrave et ) Plus simple agravedeacutebugger

Yacine Bouzidi Cours Seacuteance 1

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 11: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

HTMLbull HyperText Markup Language langage de mise en forme dedocuments hypertextes (texte + liens vers drsquoautres documents)Deacuteveloppeacute au CERN en 1989 par Tim Berners-Lee

bull 1991 premier navigateur en mode texte

bull 1993 premier navigateur graphique (mosaic) deacuteveloppeacute au NCSA(National Center for Supercomputing Applications)

Yacine Bouzidi Cours Seacuteance 1

Document HTML

bull Est un document semi-structureacute

bull Dont la structure est donneacutee par des balises

Exemple Rendu par deacutefautUn texte ltbgten grasltbgt Un texte en gras

lta href=httpwwwig2ifrgtUn lienltagt Un lien

ltul gtltligtPoint 1ltligtltligtPoint 2ltligt

ltulgt

bull Point 1bull Point 2

bull On dit que lttotogt est une balise ouvrante et lttotogt une balisefermante On peut eacutecrire lttotogt comme raccourci pour lttotogtlttotogt

Yacine Bouzidi Cours Seacuteance 1

Un peu drsquohistoire

1973 GML Generalised Markup Language deacuteveloppeacute chez IBMIntroduction de la notion de balise

1980 SGML Standardised GML adopteacute par lrsquoISO

1989 HTML baseacute sur SGML Plusieurs entreprises (microsoftnetscape )interpregravetent le standard de maniegravere diffeacuterente

1996 XML eXtensible Markup Language norme pour les documentssemistructureacutes (SGML simplifieacute)

2000 XHTML version de HTML suivant les conventions XML

2008 Premiegravere proposition pour le nouveau standard HTML5

2014 Standardisation de HTML5

Yacine Bouzidi Cours Seacuteance 1

XHTML vs HTML

bull XHTML version laquo XML raquo de HTML Principales diffeacuterences

Les balises sont bien parentheacuteseacutees (ltagt ltcgt ltcgt ltbgt est interdit)

Les balises sont en minuscules

bull Les avantages sont les suivants

HTML autorise les meacutelanges majusculeminuscule de ne pas fermercertaines balise Les navigateurs corrigent ces erreurs de maniegraveresdiffeacuterentes

Le document est structureacute comme un programme informatique (lesbalises ouvrantesfermantes correspondent agrave et ) Plus simple agravedeacutebugger

Yacine Bouzidi Cours Seacuteance 1

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 12: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Document HTML

bull Est un document semi-structureacute

bull Dont la structure est donneacutee par des balises

Exemple Rendu par deacutefautUn texte ltbgten grasltbgt Un texte en gras

lta href=httpwwwig2ifrgtUn lienltagt Un lien

ltul gtltligtPoint 1ltligtltligtPoint 2ltligt

ltulgt

bull Point 1bull Point 2

bull On dit que lttotogt est une balise ouvrante et lttotogt une balisefermante On peut eacutecrire lttotogt comme raccourci pour lttotogtlttotogt

Yacine Bouzidi Cours Seacuteance 1

Un peu drsquohistoire

1973 GML Generalised Markup Language deacuteveloppeacute chez IBMIntroduction de la notion de balise

1980 SGML Standardised GML adopteacute par lrsquoISO

1989 HTML baseacute sur SGML Plusieurs entreprises (microsoftnetscape )interpregravetent le standard de maniegravere diffeacuterente

1996 XML eXtensible Markup Language norme pour les documentssemistructureacutes (SGML simplifieacute)

2000 XHTML version de HTML suivant les conventions XML

2008 Premiegravere proposition pour le nouveau standard HTML5

2014 Standardisation de HTML5

Yacine Bouzidi Cours Seacuteance 1

XHTML vs HTML

bull XHTML version laquo XML raquo de HTML Principales diffeacuterences

Les balises sont bien parentheacuteseacutees (ltagt ltcgt ltcgt ltbgt est interdit)

Les balises sont en minuscules

bull Les avantages sont les suivants

HTML autorise les meacutelanges majusculeminuscule de ne pas fermercertaines balise Les navigateurs corrigent ces erreurs de maniegraveresdiffeacuterentes

Le document est structureacute comme un programme informatique (lesbalises ouvrantesfermantes correspondent agrave et ) Plus simple agravedeacutebugger

Yacine Bouzidi Cours Seacuteance 1

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 13: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Un peu drsquohistoire

1973 GML Generalised Markup Language deacuteveloppeacute chez IBMIntroduction de la notion de balise

1980 SGML Standardised GML adopteacute par lrsquoISO

1989 HTML baseacute sur SGML Plusieurs entreprises (microsoftnetscape )interpregravetent le standard de maniegravere diffeacuterente

1996 XML eXtensible Markup Language norme pour les documentssemistructureacutes (SGML simplifieacute)

2000 XHTML version de HTML suivant les conventions XML

2008 Premiegravere proposition pour le nouveau standard HTML5

2014 Standardisation de HTML5

Yacine Bouzidi Cours Seacuteance 1

XHTML vs HTML

bull XHTML version laquo XML raquo de HTML Principales diffeacuterences

Les balises sont bien parentheacuteseacutees (ltagt ltcgt ltcgt ltbgt est interdit)

Les balises sont en minuscules

bull Les avantages sont les suivants

HTML autorise les meacutelanges majusculeminuscule de ne pas fermercertaines balise Les navigateurs corrigent ces erreurs de maniegraveresdiffeacuterentes

Le document est structureacute comme un programme informatique (lesbalises ouvrantesfermantes correspondent agrave et ) Plus simple agravedeacutebugger

Yacine Bouzidi Cours Seacuteance 1

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 14: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

XHTML vs HTML

bull XHTML version laquo XML raquo de HTML Principales diffeacuterences

Les balises sont bien parentheacuteseacutees (ltagt ltcgt ltcgt ltbgt est interdit)

Les balises sont en minuscules

bull Les avantages sont les suivants

HTML autorise les meacutelanges majusculeminuscule de ne pas fermercertaines balise Les navigateurs corrigent ces erreurs de maniegraveresdiffeacuterentes

Le document est structureacute comme un programme informatique (lesbalises ouvrantesfermantes correspondent agrave et ) Plus simple agravedeacutebugger

Yacine Bouzidi Cours Seacuteance 1

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 15: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Rocircle de XHTML

bull Seacuteparer la structure du document de son rendu La structure donne uneseacutemantique au document

Ceci est un titre

Ceci est un paragraphe

Ceci est un ensemble de caractegraveres importants

bull Cela permet au navigateur drsquoassurer un rendu en fonction de laseacutemantique Il existe diffeacuterents types de rendus

Graphique interactif (Chrome Firefox Internet Explorer )

Texte interactif (Lynx navigateur en mode texte)

Graphique statique (par ex sur livre eacutelectronique)

Graphique pour petit eacutecran (terminal mobile)

Yacine Bouzidi Cours Seacuteance 1

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 16: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Exemple de document

Yacine Bouzidi Cours Seacuteance 1

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 17: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Structure drsquoun document XHTML

Pour ecirctre valide un document XHTML contient au moins les balises suivantes

bull Une balise lthtmlgt qui est la racine (elle englobe toutes les autres balises)La balise html contient deux balises filles head et body

bull La balise ltheadgt repreacutesente lrsquoen-tecircte du document Elle peut contenirdiverses informations (feuilles de styles titre encodage de caractegraveres )La seule balise obligatoire dans head est le titre (lttitlegt) Crsquoest le texte quiest afficheacute dans la barre de fenecirctre du navigateur ou dans lrsquoonglet

bull La balise ltbodygt repreacutesente le contenu de la page On y trouve diversesbalises (ltdivgt ltpgt lttablegt ) qui formatent le contenu de la page

Yacine Bouzidi Cours Seacuteance 1

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 18: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Titres

bull Les balises lth1gt lth2gt lth3gt lth4gt lth5gt lth6gt permettent de creacuteer destitres de section sous-section sous-sous-section

bull Six niveaux hieacuterarchiques sont possibles

Yacine Bouzidi Cours Seacuteance 1

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 19: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

ParagraphesDes paragraphes de textes sont introduits avec les balises ltpgt Par deacutefautchaque paragraphe implique un retour agrave la ligne

Remarque par deacutefaut les espaces retour agrave la ligne sont ignoreacutes et letexte est reformateacute pour remplir la largeur de la page

Yacine Bouzidi Cours Seacuteance 1

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 20: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Mise en valeur du texte

bull Les balises ltemgt (emphasis important) ltstronggt (tregraves important)ltmarkgt (visible pertinent) et bien drsquoautres permettent de mettre en valeurdu texte

Yacine Bouzidi Cours Seacuteance 1

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 21: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Liens hyper-textOn peut faire reacutefeacuterence agrave une autre ressource en utilisant un lien hyper-texte(balise ltagt et son attribut href) La cible du lien peut ecirctre absolue ourelative Si lrsquoURL est relative le chemin est substitueacute agrave la derniegraverecomposante de lrsquoURL de la page courante Si lrsquoURL commence par un ellereacutefeacuterence lrsquoattribut id drsquoun eacuteleacutement de la page

Yacine Bouzidi Cours Seacuteance 1

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 22: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Liste

On peut creacuteer des listes eacutenumeacutereacutees (avec ltolgt ordered list) ou noneacutenumeacutereacutees (avec ltulgt unordered list) Chaque ligne est limiteacutee par unebalise ltligt (list item)

Yacine Bouzidi Cours Seacuteance 1

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 23: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Tableaux

On peut formater des tables en utilisant

bull La balise lttablegt pour deacutelimiter la table

bull La balise lttrgt pour deacutelimiter une ligne de la table

bull La balise ltthgt pour deacutelimiter une tecircte de colonne

bull La balise lttdgt pour deacutelimiter une case

bull Lrsquoattribut colspan permet de fusionner des colones

Yacine Bouzidi Cours Seacuteance 1

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 24: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Remarques geacuteneacuterales

bull De nombreuses autres balises existent + de nouvelles avec HTML 5

bull On nrsquoa normalement pas le droit de mettre nrsquoimporte quel eacuteleacutementnrsquoimporte ougrave (ie pas de ltligt tout seul)

bull Il existe une speacutecification preacutecise de HTML 5 (plusieurs dizaines de pagesuniquement pour les balises)

bull Il existe aussi des validateurs il faut les utiliser le plus possible

bull De maniegravere geacuteneacuterale les espaces sont ignoreacutes on prendra donc bien soinde les utiliser judicieusement pour rendre le code de la page lisible

bull Tous les eacuteleacutements ont un style (moche) par deacutefaut On peut modifier cestyle gracircce agrave des proprieacuteteacutes CSS

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 25: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 26: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Cascading Style Sheets (CSS)

CSS Langage permettant de deacutecrire le style graphique drsquoune pageHTML

On peut appliquer un style CSS

bull Agrave un eacuteleacutement en utilisant lrsquoattribut style

bull Agrave une page en utilisant lrsquoeacuteleacutement ltstylegtltstylegt danslrsquoen-tecircte du document (dans la balise ltheadgtltheadgt)

bull Agrave un ensemble de pages en reacutefeacuterenccedilant un fichier de style danschacune des pages

Yacine Bouzidi Cours Seacuteance 1

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 27: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Lrsquoattribut style

lta href=httpwwwIG2Ifr style=colorredgtUnlienltagt

Apperccedilu

Un lien

Inconveacutenients

bull Il faut copier lrsquoattribut style pour tous les liens de la page

bull Modification de tous les eacuteleacutements difficiles

Yacine Bouzidi Cours Seacuteance 1

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 28: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Lrsquoeacutelement style

lthtmlgtltheadgt

lttitlegtlttitlegtltstylegta color red ltstylegt

ltheadgtltbodygt

lta href=gtLien 1ltagt lta href=gtLien2ltagt

ltbodygtlthtmlgt

Apperccedilu

Lien 1 Lien 2

Inconveacutenient local agrave une page

Yacine Bouzidi Cours Seacuteance 1

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 29: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Fichier css seacutepareacute

Fichier stylecss

a color red

Fichier testhtml

lthtmlgtltheadgtltlink href=stylecss type=textcss

rel=stylesheet gtltheadgt

lthtmlgt

Modifications amp deacuteploiement aiseacutes

Yacine Bouzidi Cours Seacuteance 1

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 30: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

SyntaxeUne proprieacuteteacute CSS est deacutefinie en utilisant la syntaxe

nom_prop val_prop

Si on utilise lrsquoattribut style drsquoun eacuteleacutement

lta href=style=colorredborder-stylesolidborder1ptgtLien1ltagt

Si on utilise un fichier css ou une feuille de style

a color redborder-style solidborder 1pt

h1 Le style des titres de niveau 1 text-decoration underlinecolor green

Yacine Bouzidi Cours Seacuteance 1

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 31: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Voila pour le rappel

Pour creuser plus en deacutetails le HTML et le CSS quelques pointeurs

bull Speacutecification W3C pour HTML httpwwww3orgTRhtml5

bull Speacutecification W3C pour CSS httpwwww3orgStyleCSSspecsenhtml

bull Le site de tutoriels W3Schools httpwwww3schoolscom

bull Le cours HTML5 amp CSS3 httpopenclassroomscom

bull Wysiwyg en ligne httpswwwcodevolvecom

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 32: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 33: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Web dynamique

bull Le modegravele du Web preacutesenteacutee preacutecedemment est statique Les documentssont stockeacutes sous forme de fichiers physiques sur le disque dur drsquoun serveur

bull Tregraves tocirct on a souhaiteacute geacuteneacuterer dynamiquement le contenu drsquoune page

bull 1993 invention des scripts CGI qui permettent au serveur de reacutecupeacuterer lesparamegravetres drsquoune requecircte HTTP et de geacuteneacuterer du HTML en reacuteponse

bull La programmation Web cocircteacute serveur eacutevolue ensuite (apparition de PHP en1994 puis possibiliteacute ensuite de programmer le cocircteacute serveur dans deslangages plus robustes comme Java )

bull Un problegraveme subsiste le manque drsquointeractiviteacute En effet on est contraintpar le modegravele formulaire HTML envoi au serveur calcul de la reacuteponse retour auclient rechargement de page Problegraveme drsquointeractiviteacute (latence reacuteseaurendu graphique drsquoune nouvelle page )

Yacine Bouzidi Cours Seacuteance 1

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 34: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Web dynamique cocircteacute client

bull Avec lrsquoarriveacutee de Java (1995) la notion drsquoApplet fait son apparition Ils sont(pour lrsquoeacutepoque) une maniegravere portable drsquoexeacutecuter du code cocircteacute client

bull Problegraveme Java est trop lour agrave lrsquoeacutepoque (crsquoest un vrai langage il fait peuraux creacuteateurs de site les performances sont meacutediocres )

bull 1995 Brendan Eich (Netscape) creacutee Javascript en 10 jours Il emprunte dela syntaxe agrave JavaC et Netscape Navigator 20 embarque un interpreacuteteurJavascript en standard

bull Le langage est rapidement adopteacute mais chaque navigateur impleacutemente sapropre variante Le langage lui-mecircme est standardiseacute en 1996 (ECMAScriptstandardiseacute par lrsquoECMA)

bull Malheureusement lrsquoAPI (crsquoest agrave dire les fonctions permettant drsquoacceacuteder aunavigateur depuis Javascript) nrsquoest standardiseacutee que tardivement par le W3C(et tout nrsquoest pas encore supporteacute par tout le monde agrave ce jour

Yacine Bouzidi Cours Seacuteance 1

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 35: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Javascript Execution

bull Cocircteacute client le code javascript est exeacutecuteacute par le navigateur Web Il doitdonc ecirctre reacutefeacuterenceacute dans une page HTML

Soit en utilisant lrsquoattribut src drsquoune balise script (externe)

Soit en mettant le code directement dans une balise script (interne)

bull Cocircteacute serveur on peut maintenant utiliser Javascript comme un langagegeacuteneacuteraliste gracircce agrave lrsquointerpreacuteteur Nodejs

Yacine Bouzidi Cours Seacuteance 1

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 36: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Description du langage

Javascript est un langage

bull Dynamique (tout est fait agrave lrsquoexeacutecution)

bull En particulier dynamiquement typeacute (donc pas typeacute)

bull Impeacuteratif (effets de bords boucles for notion drsquoinstruction )

bull Fonctionnel (les fonctions sont des objets de premiegravere classe que lrsquoon vamanipuler agrave haute dose)

bull Objet (mais sans notion de classe ce qui rend la chose amusante)

bull Interpreacuteteacute avec une compilation agrave la voleacutee (JIT) Les navigateurs Webmoderne ont des performances incroyables (possibiliteacute de faire des jeux 3Dpar exemple)

Yacine Bouzidi Cours Seacuteance 1

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 37: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Environnement de deacuteveloppement

bull Pour les premiers cours on utilisera le navigateur ChromeTM

bull Il est recommendeacute drsquoutiliser le mecircme navigateur pour srsquoabstraire dans unpremier temps des problegravemes de compatibiliteacute

bull On peut utiliser un eacutediteur de texte simple (Eclipse est a proscrire lesupport Javascript est notoirement mauvais)

bull On utilisera la console de deacutebuggage Javascript de Chrome (Ctrl-Shift-J)

Yacine Bouzidi Cours Seacuteance 1

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 38: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Number

Il nrsquoy a pas de type entier uniquement des numbers qui sont flottantsIEEE-754 double preacutecision (64 bits 53 bits pour la mantisse 11 bits pourlrsquoexposant 1 bit de signe)

Notation deacutecimale entiegravere 10 3444minus25 42

Notation scientifique 13 099 0034e102minus23132313E minus 23

Notation octale 0755minus01234567

Notation hexadeacutecimale 0x12bminus0xb00b5 0xd34db33f

Le standard garanti que tous les entiers 32bits sont repreacutesentatblesexactement (sans arrondi) On peut eacutecrire des entiers plus grands que231 minus 1 mais au bout drsquoun moment on a une perte de preacutecision

Opeacuterateurs arithmeacutetiques

minus Moins unaire

+minus lowast addition soustraction produit modulo

Division (flottante)

Yacine Bouzidi Cours Seacuteance 1

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 39: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Booleacuteens

truefalse vraifaux

Opeacuterateurs logiques

neacutegation (unaire)

ampamp || laquo et raquo logique laquo ou raquo logique

Yacine Bouzidi Cours Seacuteance 1

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 40: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Variables affectations

bull Un nom de variable commence toujours par une lettre (majuscule ouminuscule) $ ou _ et se poursuit par un de ces caractegraveres ou un chiffre

bull On utilise le mot cleacute var

Exemples

var $foo = 123

var bar = 1323e99

var _toto = bar

bull Attention on peut deacutefinir une variable sans lrsquoavoir deacuteclareacutee et ccedila marchemais ccedila ne fait pas ce que lrsquoon pense

Yacine Bouzidi Cours Seacuteance 1

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 41: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Chaicircne de caractegraveres (string)

Encodeacutees en UTF-16 (ou UCS-2) deacutelimiteacutees par des laquo rsquo raquo ou laquo raquo

Opeacuterations sur les chaicircnes

foo[10] accegraves au 11 egraveme caractegravere

pas de mise agrave jour les chaicircnes sont immuables

+ concateacutenation

slength longueur

sconcat(23) concateacutenation (bis)

Un grand nombre de meacutethodes sont disponible on les verra prochainement(expressions reacuteguliegraveres recherche remplacement )

Yacine Bouzidi Cours Seacuteance 1

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 42: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Comparaisons

Opeacuterateurs de comparaisons

Opeacuterateur Description

$a == $b Eacutegal apregraves conversion de type

$a = $b Diffeacuterent apregraves conversion de type

$a === $b Eacutegal et de mecircme type

$a == $b Diffeacuterent ou de type diffeacuterent

$a lt $b Strictement plus petit apregraves conversion de type

$a gt $b Strictement plus grand apregraves conversion de type

$a lt= $b Plus petit apregraves conversion de type

$a gt= $b Plus grand apregraves conversion de type

Yacine Bouzidi Cours Seacuteance 1

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 43: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Objet

La structure de donneacutee de base est lrsquoobjet

Un objet vide

x 1 y 2 Un objet avec deux champs x et y

ox Accegraves agrave un champ

o[rsquoxrsquo] Syntaxe alternative

oz = 3 rajoute le champ z agrave lrsquoobjet o

En javascript tout est objet

123concat(456) renvoie la chaicircne 123456

314toString() renvoie la chaicircne 314

Yacine Bouzidi Cours Seacuteance 1

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 44: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Instructions

Comme en CC++Java les expressions sont aussi desinstructions

x = 3425 la valeur est jeteacuteef(1999)

Javascript essaye drsquoinseacuterer automatiquement des laquo raquo Pour ce courson ne lui fait pas confiance et on termine toutes les instructions saufles blocs par un laquo raquo

Yacine Bouzidi Cours Seacuteance 1

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 45: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Conditionnelle

if ( c ) cas then

else cas else

Les parenthegraveses autour de la condition c sont obligatoires Labranche else est optionnelle Les accolades sont optionnellespour les blocs drsquoune seule instruction

Yacine Bouzidi Cours Seacuteance 1

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 46: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Boucles

while ( c ) corps de la boucle while

do corps de la boucle do

while ( c )

for(init test incr) corps de la boucle for

break sort de la boucle immeacutediatement

continue reprend agrave lrsquoiteacuteration suivante

Yacine Bouzidi Cours Seacuteance 1

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 47: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Fonctions

On peut deacutefinir des fonctions globales

function f(x1 xn) instructions

On utilise le mot cleacute return pour renvoyer un reacutesultat (ou quitter la fonctionsans rien renvoyer)

On peut aussi creacuteer des fonctions laquo inline raquo

var z = 1 + (function (x y ) return x y )(23) x contient 7

On dispose donc de la syntaxe alternative pour la deacuteclaration de fonction

var f = function (z) return x+1

Yacine Bouzidi Cours Seacuteance 1

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 48: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Fonctions suite

En premiegravere approximation laquo les meacutethodes raquo ne sont que desfonctions stockeacutees dans le champs drsquoun objet

var obj = x 1 y 1 objetobjmove = function (i j) objx += iobjy += j

objmove(23)

On verra que crsquoest beaucoup plus subtil que ccedila

Yacine Bouzidi Cours Seacuteance 1

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 49: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Overview

1 Geacuteneacuteraliteacutes sur le web

2 Rappels sur le langage HTML

3 Rappels sur le langage CSS

4 Javascript survol du langage et syntaxe

5 Javascript interaction avec le navigateur

Yacine Bouzidi Cours Seacuteance 1

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 50: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Quelque fonctionaliteacutes de base

On ne fait ici qursquoun tregraves bref survol des fonctionaliteacutes suffisammentpour faire le TP 1 On reviendra en deacutetails sur tous ces concepts

Yacine Bouzidi Cours Seacuteance 1

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 51: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Objet Global document

Lrsquoobjet global document repreacutesente le document HTML Il impleacutementelrsquointerface DOM et on peut donc le parcourir comme un arbre (proprieacuteteacutesfirstChild parent nextSibling )

Yacine Bouzidi Cours Seacuteance 1

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 52: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Meacutethodes document

La meacutethode documentgetElementById(foo) permet dereacutecupeacuterer un objet repreacutesentant lrsquoeacuteleacutement HTML de la page ayantlrsquoattribut id valant foo (null si cet eacuteleacutement nrsquoexiste pas)

La meacutethode documentgetElementsByTagName(div) permetde reacutecupeacuterer sous la forme drsquoun tableau tout les elements de lafamille ltdivgt

bull Le reacutesultat de ces meacutethodes sont des eacutelements HTML Elementqui sont eacutegalement des objets Tous ces objets sont de type Node(heacuteritage)

Yacine Bouzidi Cours Seacuteance 1

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 53: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Traitement des eacutelements HTML

Les attributs

bull Meacutethodes getAttribute() et setAttribute() de lrsquoobjetElement permettant respectivement de reacutecupeacuterer et drsquoeacutediter unattribut

bull Pour les eacuteleacutements courants il suffit drsquoune Elementattribut

Le contenu

bull La meacutethode innerHTML permet de reacutecupeacuterer le code HTML drsquounnoeud fils drsquoun eacuteleacutement sous forme de texte

bull Les meacutethodes innerText textContent reacutecupegravere uniquementle texte

Yacine Bouzidi Cours Seacuteance 1

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur
Page 54: Programmation Web Avancée Cours 1researchers.lille.inria.fr/~yabouzid/cours1.pdf · Programmation Web Avancée Cours 1 Yacine Bouzidi?? yacine.bouzidi@inria.fr IG2I, ... la syntaxe

Reacutesumeacute

bull DOM et Javascript permettent drsquoacceacuteder au eacuteleacutements HTMLpreacutesents dans un document de les modifier drsquointeragir avec

bull Les eacutelement HTML sont structureacute comme un arbre geacuteneacutealogique

bull Diffeacuterentes meacutethodes pour acceacutedermodifier les eacuteleacutements getElementById(foo) getAttribute() innerHTML

Yacine Bouzidi Cours Seacuteance 1

  • Geacuteneacuteraliteacutes sur le web
  • Rappels sur le langage HTML
  • Rappels sur le langage CSS
  • Javascript survol du langage et syntaxe
  • Javascript interaction avec le navigateur