HTML5 – balík technologií

Obsah

Osm "technologických tříd" HTML5 (dle w3c logo)

  1. Sémantika
  2. Offline & Storage
  3. Device access
  4. Connectivity
  5. Performance and integration

Sémantika – HTML značky #1

<section>, <article>sémantické označení částí stránky
<header>, <footer>hlavička a patička (stránky)
<hgroup>sloučení navazujících nadpisů
<nav>označení oblasti s navigací
<aside>doplňkové informace (slovníček, reklama, …)
<figure>, <figcaption>sloučení popisku s obrázkem (či obrázky)
<time datetime="15:00">označení časového údaje

Sémantika – HTML značky #2

<input type="text" list="browsers" /> <!-- "našeptávání" -->
<datalist id="browsers">
	<option value="Internet Explorer" />
	<option value="Firefox" />
	<option value="Chrome" />
</datalist>

datalist

<!-- hodnocení -->
<meter min="0" max="100" low="50" high="90" optimum="100" value="70">dobře</meter>

meter

Sémantika – HTML značky #3

<progress>...operace probíhá...</progress> <!-- ukazatele postupu -->
<progress value="75" max="100">...skoro hotovo...</progress>

progress

<menu type="toolbar"> <!-- lišta nástrojů -->
	<li><menu label="File" /></li>
	<li><menu label="Edit">
		<button type="button">Copy</button>
		<button type="button">Cut</button>
		<button type="button">Paste</button>
	</menu></li>
	<li><menu label="Help" /></li>
</menu>

menu

Sémantika – formulářové prvky

<input type="text" autofocus />
<input type="date" min="2011-03-01" max="2011-03-31" value="2011-03-01" />
<input type="range" min="0" max="50" value="25" />
<input type="search" results="10" placeholder="Hledat..." />
<input type="text" pattern="[a-z]*" required />

inputs

Sémantika – RDFa, mikroformáty, mikrodata

Různé techniky pro označování sémantických dat v HTML

<p>
	<span>Ondřej Žára</span> 
	<span>Seznam.cz</span>
	<span>Webmaster</span>
</p>

google snippet

Sémantika – RDFa, mikroformáty, mikrodata

<!-- RDFa -->
<p xmlns:v="http://rdf.data-vocabulary.org/#" typeof="v:Person"> 
	<span property="v:name">Ondřej Žára</span> 
	<span property="v:affiliation">Seznam.cz</span> 
	<span property="v:title">Webmaster</span> 
</p>

<!-- Microformats -->
<p class="vcard"> 
	<span class="fn">Ondřej Žára</span> 
	<span class="org">Seznam.cz</span> 
	<span class="title">Webmaster</span> 
</p>

<!-- Microdata -->
<p itemscope itemtype="http://data-vocabulary.org/Person"> 
	<span itemprop="name">Ondřej Žára</span> 
	<span itemprop="affiliation">Seznam.cz</span> 
	<span itemprop="role">Webmaster</span> 
</p>

Offline – App Cache

Offline – App Cache

Ukázka manifestu

CACHE MANIFEST
	
# soubory určené k použití offline
offline/index.html
offline/style.css
offline/code.js

# tyto soubory se nikdy nesmí cachovat
NETWORK
remote.cgi

# tyto soubory, pokud nedostupné, budou nahrazeny jinými
FALLBACK
images/large offline/sorry.jpg

Storage – Web Storage

localStorage.setItem("name", "Jan");
localStorage.setItem("age", 30);
localStorage.length;                              /* 2 */
localStorage.getItem("age") == localStorage.age;  /* "30" */
localStorage.key(0);                              /* "name" */
localStorage.removeItem("name");
localStorage.clear();

Storage – IndexedDB

Tvorba databáze a zápis

indexedDB.open("eshop").onsuccess = function(e) { /* veškeré operace jsou asynchronní */
	var db = e.result; 
	db.createObjectStore("item");
}

indexedDB.open("eshop").onsuccess = function(e) { /* vkládání dat */
	var item = { name: "Sample", price: 100 };
	var store = e.result.objectStore("item"); 
	store.add(item);
}

Storage – IndexedDB

Čtení z databáze

indexedDB.open("eshop").onsuccess = function(e) { /* čtení dat */
	var store = e.result.objectStore("item"); 
	var request = store.openCursor();
	
	request.onsuccess = function(e) {
		var cursor = e.result;
		if (!cursor) { return; }                  /* žádné další záznamy */
		alert(JSON.stringify(cursor.value));
		cursor.continue();                        /* chceme další záznam, stejný callback */
	}
}

Storage – File API

Storage – File API

Náhled souboru a přečtení jeho obsahu

var file = $("fileinput").files[0];           /* první soubor vybraný uživatelem */
var img = document.createElement("img");
img.src = URL.createObjectURL(file);          /* automatický identifikátor */
document.body.appendChild(img);

var reader = new FileReader();
reader.addEventListener("load", function() {  /* čtení je asynchronní */
	alert(reader.result);
});

reader.readAsDataURL(file);
/* readAsText(), readAsBinaryString(), readAsArrayBuffer() */

Device access – Geolocation

Jednoduché API pro zjištění zeměpisné polohy

if (navigator.geolocation) { ... }
var callback = function(position) {
	alert(position.coords.longitude); /* zeměpisná délka */
	alert(position.coords.latitude);  /* zeměpisná šířka */
	alert(position.coords.altitude);  /* nadmořská výška */
	alert(position.timestamp);        /* čas v msec */
};
navigator.geolocation.getCurrentPosition(callback);
navigator.geolocation.watchPosition(callback);

Connectivity – Web Sockets

Connectivity – Web Sockets

Ukázka JS API

var socket = new WebSocket("ws://example.com/server.cgi");

/* příjem dat */
socket.addEventListener("message", function(e) {
	alert(e.data);
});

/* odeslání dat */
socket.send("data");

/* ukončení spojení */
socket.close();

Connectivity – Server Sent Events

Performance – Web Workers

Performance – Web Workers

Ukázka výpočetního vlákna

Rodič:

var w = new Worker("factorial.js");
w.onmessage = function(e) { alert(e.data); }       /* až přijde zpráva od vlákna */
w.postMessage(10);                                 /* poslat zprávu vláknu */

factorial.js:

var onmessage = function(e) {                      /* až přijde zpráva od rodiče  */
	var result = 1, current = parseInt(e.data);
	while (current) { result *= current--; }
	postMessage(result);                           /* dáme vědět zpátky */
}

Performance – XMLHttpRequest 2

Obohacení XHR o další funkcionalitu

Performance – XMLHttpRequest 2

Doplňková funkcionalita XHR2

Prostor pro otázky