76
HTML ? Dr. Sabin Buraga www.purl.org/net/busaco

HTML5? HTML5!

Embed Size (px)

DESCRIPTION

A presentation -- prepared for InfoEducation 2011 summer camp -- of one of most important HTML5 features. Several examples are also provided.

Citation preview

Page 1: HTML5? HTML5!

HTML ?

Dr. Sabin Buraga

www.purl.org/net/busaco

Page 2: HTML5? HTML5!

HTML !

“scurtă” introducere: aspecte esențiale

Page 3: HTML5? HTML5!

Ce este HTML5?

Page 4: HTML5? HTML5!

vocabular (set de elemente + atribute)pentru marcarea paginilor Web

Page 5: HTML5? HTML5!

suită de API-urifacilitând procesarea documentelor

Page 6: HTML5? HTML5!

permite dezvoltarea standardizată de aplicații Web pe baza unor API-uri specificate formal

Page 7: HTML5? HTML5!

conținut structurat având prezentări complexe via CSS3

Page 8: HTML5? HTML5!

independența de dispozitivubicuitate & accesibilitate

Page 9: HTML5? HTML5!

multitudine de conținuturiinteracțiune & experiență Web

Page 10: HTML5? HTML5!

de la Web 2D la Web 3D

Page 11: HTML5? HTML5!

API-uri specifice pentru îmbunătățirea performanței Web

Page 12: HTML5? HTML5!

API-uri pentru stocare locală (ne)persistentă a datelor

Page 13: HTML5? HTML5!

conectivitate între aplicații Web și/sau aplicații “clasice”

Page 14: HTML5? HTML5!

date structurate și modelate conceptual

Page 15: HTML5? HTML5!

recurge la tehnologii înrudite referitoare la

prezentare: CSS3model (abstract): DOMprocesare: JavaScript

…și altele

Page 16: HTML5? HTML5!

inițial, o propunere descrisă deWHATWG compus din Apple, Mozilla, Opera

www.whatwg.org/specs/web-apps/current-work/

Page 17: HTML5? HTML5!

actualmente, în curs de standardizare la W3Ccu statut de ciornă în lucru (working draft)

www.w3.org/TR/html5/

Page 18: HTML5? HTML5!

specificațiile redactate de W3C și de WHATWGsunt diferite

conținut, frecvența actualizărilor, licență de utilizare

Page 19: HTML5? HTML5!

Ce aduce nou HTML5?

Page 20: HTML5? HTML5!

relaxarea corectitudinii la nivel de sintaxă

HTML și/sau XHTML

Page 21: HTML5? HTML5!

relaxarea corectitudinii la nivel de sintaxă

HTML și/sau XHTML

text/html versus application/xhtml+xml

Page 22: HTML5? HTML5!

specificarea tipului de documentse poate realiza în mod simplificat

<!DOCTYPE html>

Page 23: HTML5? HTML5!

modelul de reprezentare internăeste bazat pe DOM (Document Object Model)

DOM HTML5

Page 24: HTML5? HTML5!

modelul de reprezentare internăeste bazat pe DOM (Document Object Model)

eventual, arborele DOM – regăsit la nivel de browser

via un obiect de tip Document – poate fi redat (accesat)

de o extensie (plug-in)

Page 25: HTML5? HTML5!

noi elemente descriind fluxul informaționalîn stilul POSH (Plain Old Semantic HTML)

article, aside, audio, canvas, datalist, details, figure,

footer, header, keygen, mark, math, meter, nav, output,

progress, samp, section, svg, time, video,…

Page 26: HTML5? HTML5!

<article> <header>

<h1>Titlul articolului</h1><p><time pubdate datetime="2011-08-01T07:33"></time></p>

</header> <p>Conținutul propriu-zis al articolului…</p> <aside>Alte resurse de interes</aside><section>

<h1>Comentarii</h1> <article>

<!-- comentariile sunt considerate note de subsol --><footer>

<p>Tuxy Pinguinescu</p><p><time pubdate

datetime="2011-08-03T01:07-03:03"></time></p> </footer> <p>Un comentariu</p>

</article> </section>

</article> un articol disponibil pe un blog

exemplu

Page 27: HTML5? HTML5!

<figure> <img src="fii-student.png" alt="Sigla FII Student" /> <figcaption>FII Student</figcaption>

</figure>

<figure> <!-- conținutul nu neapărat trebuie să fie o imagine --><video

src="http://ferma.info/video/porci.mov"></video> <figcaption>

Relatare despre <em>porcii viole(n)ți</em>.</figcaption>

</figure> specificarea unor figuri

exemplu

Page 28: HTML5? HTML5!

elemente care permit “scufundarea”altor tipuri de conținuturi într-o pagină Web

alături de elementele img, iframe, embed și object,

sunt permise audio, video, source

Page 29: HTML5? HTML5!

<video src="porcii-verzi.ogg" controls autoplay></video>…<script>// preluăm via DOM obiectul referitor la conținutul videovar video = document.getElementsByTagName ('video')[0];</script><p>

<input type="button" value="Pauză" onclick="video.pause ();">

<input type="button" value="Rulează" onclick="video.play ();">

</p>metodele pause() și play()

sunt specificate de interfața

HTMLMediaElement

exemplu

Page 30: HTML5? HTML5!

exemple de evenimente ce pot fi tratateîn ceea ce privește conținutul multimedia:

loadstart progress suspend abort error

stalled play pause loadeddata

waiting playing seeking

canplay seeked timeupdate ended

ratechange durationchange volumechange

Page 31: HTML5? HTML5!

elemente care permit “scufundarea”altor tipuri de conținuturi într-o pagină Web

plus:

canvas – grafică raster generată dinamic

svg – conținut grafic vectorial specificat prin SVG

math – formule matematice exprimate via MathML

Page 32: HTML5? HTML5!

interfața HTMLCanvasElement

permite generarea dinamică de conținut grafic

dependent de rezoluția curentă

Page 33: HTML5? HTML5!

interfața HTMLCanvasElement

permite generarea dinamică de conținut grafic

dependent de rezoluția curentă

în prezent – specificație W3C (mai 2011):

conținut grafic 2D transparent de tip raster

www.w3.org/TR/2dcontext/

Page 34: HTML5? HTML5!

interfața HTMLCanvasElement

este asociată elementului canvas

Page 35: HTML5? HTML5!

interfața HTMLCanvasElement

este asociată elementului canvas

navigatoarele Web actuale oferă suport relativ complet

pentru Internet Explorer (versiuni < 9), se poate recurge la

ExplorerCanvas: http://code.google.com/p/explorercanvas/

Page 36: HTML5? HTML5!

prin JavaScript pot fi efectuate

transformări geometrice de bază

generarea de căi grafice (paths)crearea degradé-urilor & redarea umbrelor

specificarea de conținuturi textuale

manipularea conținutului grafic

…și altele

Page 37: HTML5? HTML5!

<html><head>

<title>Corola de minuni</title><script type="text/javascript" src="discuri.js"></script>

</head><body onclick="javascript:deseneazaDiscuri ()">

<h1>Fă un click…</h1><canvas id="canvas"

height="500" width="375">

</canvas></body></html>

exemplu

Page 38: HTML5? HTML5!

function deseneazaDiscuri () {// preluăm contextul de redare 2Dvar context =

document.getElementById ('canvas').getContext ('2d');

// stabilim parametrii umbrelorcontext.shadowOffsetX = 3; context.shadowOffsetY = 3;context.shadowBlur = 33;

// stabilim parametrii corpului de literăcontext.font = "20pt Arial, Helvetica, sans-serif"; context.fillText ("Fă un click", 5, 30);

// translăm...context.translate (75, 75);

programul JavaScript(discuri.js) generând conținutul

exemplu

Page 39: HTML5? HTML5!

for (var i = 1; i < 5; i++) { // generăm 'inele' de discuri// salvăm contextul de redarecontext.save ();// stabilim via CSS3 culoarea de umplere a discului curent// și ajustăm aleatoriu transparența (alpha)context.fillStyle = 'rgba(33,' + (51 * i) + ',' + (255 - 51 * i) + ','

+ Math.random() + ')';

for (var j = 0; j < i * 6; j++){ // desenăm discuricontext.rotate (Math.PI * 2 / (i * 6));context.beginPath ();context.arc (0, i * 12.5, 5, 0, Math.PI * 2, true);context.fill ();

}// restaurăm contextul de redarecontext.restore ();

}}

programul JavaScript(discuri.js) generând conținutul

exemplu

Page 40: HTML5? HTML5!

un posibil rezultat al execuției codului

(folosind un browser bazat pe WebKit)

Page 41: HTML5? HTML5!

exemple demonstrative & resurse:

www.canvasdemos.com

Page 42: HTML5? HTML5!

interacțiunea cu utilizatorul

formularele Web pot include câmpuri suplimentare

Page 43: HTML5? HTML5!

interacțiunea cu utilizatorul

noi tipuri:

search tel url email

datetime date

number range

color

Page 44: HTML5? HTML5!

<label>Adrese suplimentare:<input type="email" multiple

list="adrese" name="cc" /></label> … <datalist id="adrese">

<option value="[email protected]" /> <option value="[email protected]" /> <option value="[email protected]" />…

</datalist>

<input type="date" max="2000-12-31" name="zi-nastere" /><input type="range" min="1" max="7" step="2"

name="premii" />

exemplu

Page 45: HTML5? HTML5!

interacțiunea cu utilizatorul

noi elemente interactive:

details summary command menu

Page 46: HTML5? HTML5!

încărcarea & redarea documentelor

suplimentar față de obiectul Document,

se specifică Window oferind acces la mediul de redare

Page 47: HTML5? HTML5!

încărcarea & redarea documentelor

API-uri de bază:

ApplicationCache

control asupra cache-ului navigatorului Web

Page 48: HTML5? HTML5!

încărcarea & redarea documentelor

API-uri de bază:

WindowTimers

oferă suport pentru specificarea contoarelor de timp

Page 49: HTML5? HTML5!

încărcarea & redarea documentelor

API-uri de bază:

Navigator

acces la starea și proprietățile sistemului

via sub-interfețele NavigatorID și NavigatorAbilities

Page 50: HTML5? HTML5!

încărcarea & redarea documentelor

API-uri de bază:

DataTransfer

stochează fragmente de date în diverse formate

(util și pentru efectuarea operațiilor drag & drop)

Page 51: HTML5? HTML5!

încărcarea & redarea documentelor

API-uri de bază:

UndoManager

gestionează istoricul comenzilor efectuate

(undo transaction history)

Page 52: HTML5? HTML5!

Există și alte specificațiisau inițiative de interes?

Page 53: HTML5? HTML5!

WebSocket API

definește un API abstract pentru transmiterea de date

pe baza protocolului de transfer WebSocket:

www.whatwg.org/specs/web-socket-protocol/

www.w3.org/TR/websockets/

Page 54: HTML5? HTML5!

// actualizările de date vor fi trimise cu rata de o actualizare// la fiecare 50ms, dacă există suficientă lățime de bandăvar socket = new WebSocket ('ws://joc.undeva.info:1974/updates');

socket.onopen = function () { setInterval (function() {

if (socket.bufferedAmount == 0) socket.send (oferaDate ());

}, 50); };

exemplu

Page 55: HTML5? HTML5!

Web Messaging

oferă API-uri pentru realizarea transferului de mesaje

între diverse contexte de navigare

www.w3.org/TR/postmsg/

Page 56: HTML5? HTML5!

Web Messaging

mesajele pot proveni de la server, via socket-uri Web

sau de la alte documente via canale de comunicație

Page 57: HTML5? HTML5!

Web Workers

“muncitor” (worker) Web:

script rulat în fundal – în accepțiunea daemon-ilor UNIX –

independent de alte programe

ce pot interacționa cu utilizatorul

Page 58: HTML5? HTML5!

Web Workers

mediul de execuție al unui worker e complet separat,

codul fiind rulat în paralel, în mod asincron

http://whatwg.org/ww

Page 59: HTML5? HTML5!

Web Storage

oferă mecanisme de stocare (persistentă) a datelor

la nivel de client sub formă de perechi cheie—valoare

www.w3.org/TR/webstorage/

Page 60: HTML5? HTML5!

Web Storage

maniera de stocare a itemilor se precizează

via atributele sessionStorage și localStorage

Page 61: HTML5? HTML5!

Web Storage

maniera de stocare a itemilor se precizează

via atributele sessionStorage și localStorage

stocare nepersistentă

(suport pentru sesiuni)

Page 62: HTML5? HTML5!

Web Storage

maniera de stocare a itemilor se precizează

via atributele sessionStorage și localStorage

alternativă la cookie-uri

Page 63: HTML5? HTML5!

<textarea id="editor" placeholder="Începeți să tastați..."></textarea>

document.querySelector ('#editor').addEventListener ('keyup', function (e) { // la fiecare eliberare a tastei…

// stocăm conținutul și data edităriilocalStorage.setItem ('text', this.value);localStorage.setItem ('data', (new Date()).getTime());

}, false);

exemplu

Page 64: HTML5? HTML5!

Web SQL Database

se referă la un set de API-uri pentru managementul

asincron al bazelor de date la nivel de client via SQL

www.w3.org/TR/webdatabase/

Page 65: HTML5? HTML5!

Web SQL Database

dialectul SQL suportat trebuie să fie cel oferit de SQLite

Page 66: HTML5? HTML5!

Web SQL Database

accesul la baze de date e abstractizat de interfețele

WindowDatabase, WorkerUtilsDatabase, DatabaseCallback

Page 67: HTML5? HTML5!

Web SQL Database

în caz de succes, se va crea un obiect de tip:

SQLTransaction (tranzacție asincronă) sau

SQLTransactionSync (tranzacție realizată sincron)

rezultatele întoarse de server în urma execuției

comenzilor SQL se regăsesc într-un obiect SQLResultSet

Page 68: HTML5? HTML5!

<script> new Worker ('actualizator.js'); </script>

// deschiderea conexiunii cu baza de datevar server = new WebSocket ('ws://whatwg.org/database'); var db = openDatabase ('demo', '1.0', 'Date demo', 10240);server.onmessage = function (eveniment) { // datele sunt în format "comanda cheie valoare" var date = eveniment.data.split (' '); switch (date[0]) { // inserare a unei valori pe baza cheiicase '+': db.transaction (function (t) {

t.executeSql ('INSERT INTO info (cheie, valoare) VALUES (?, ?)', date[1], date[2]); });

case '-': db.transaction (function (t) { // operația de ștergeret.executeSql ('DELETE FROM info WHERE cheie=? AND valoare=?',

date[1], date[2]); }); }

};un worker ce efectuează operații asupra

unei baze de date existente la nivel de client

exemplu

Page 69: HTML5? HTML5!

File API

suită de API-uri pentru manipularea fișierelor

File Blob FileList FileReader

BlobBuilder FileWriter FileSaver

FileSystem

Page 70: HTML5? HTML5!

De unde aflu mai multe?

Page 71: HTML5? HTML5!

WHATWG – Web Hypertext

Application Technology Working Group

www.whatwg.org

Page 72: HTML5? HTML5!

http://diveintohtml5.org/

Page 73: HTML5? HTML5!

http://www.html5rocks.com/

Page 74: HTML5? HTML5!

http://html5boilerplate.com/

Page 75: HTML5? HTML5!

http://html5demos.com/

Page 76: HTML5? HTML5!

HTML !

Dr. Sabin Buraga

www.purl.org/net/busaco

mult succes cu