Poznatky z používání HTML5 v praxi

Obsah

  1. Seznam a HTML5
  2. Konkrétní příklady

Seznam a HTML5

Implementační techniky

Audio

CAPTCHA – zvuková varianta

<a id="captcha" href="/captcha.wav">přehrát</a>
/* zjednodušený kód! */
$("captcha").addEventListener("click", function(e) {
	if (window.Audio) { /* podpora HTML5 audio; wav formát je podporován všude */
		e.preventDefault();
		new Audio(e.target.href).play();
	} else if (navigator.mimeTypes["audio/wav"].enabledPlugin) { /* plugin */
		e.preventDefault();
		var embed = document.createElement("embed");
		embed.src = e.target.href;
		embed.autostart = true;
		document.body.appendChild(embed);
	} else { /* nic, uživatel si stáhne zvukový soubor */ }
}, false);

SVG a VML

CSS3 tlačítka

button {
	border: 1px solid #666;
	padding: 0.1em 0.2em;
	text-shadow: 0em 0.03em 0.06em white;
	border-radius: 0.35em; 
	background-color: #bbb;
	background-image: linear-gradient(top, #eee, #999);
}
button:hover  { background-image: linear-gradient(top, #ddd, #888); }
button:active { box-shadow: 0px 0.1em 0.2em 0.1em #666 inset; }

ECMAScript 5 strict mode

Odstranění Function.caller (resp. arguments.callee.caller)

/* při volání z metody objektu zavolá stejně pojmenovanou metodu předka */
this.parent = function() {

	/* zjistit, odkud jsme voláni */
	var caller = arguments.callee.caller;
	
	/* najít jméno této metody */
	var name = "";
	for (var p in this) { if (this[p] == caller) name = p; }
	
	/* získat stejně pojmenovanou metodu předka */
	var parentMethod = ...(name);
	
	/* zavolat ji */
	return parentMethod.apply(this, arguments);
}

Atribut data-*

File upload #1

Komfortnější rozhraní pro nahrávání souborů (e-mail)

if ("draggable" in document.createElement("div")) { /* podpora pro přetažení */
	$("target").addEventListener("drop", function(e) {
		e.preventDefault(); /* aby prohlížeč neotevřel soubor jako dokument */
		processFiles(e.dataTransfer.files);
	}, false);
}

$("input").addEventListener("change", function(e) {
	if ("files" in $("input")) {   /* podpora pro přístup k souborům */
		processFiles(e.target.files);
	} else { /* ... */ }           /* odeslat nějakým "běžnějším" způsobem */
}, false);

if (!("multiple" in $("input"))) { /* vyrobit UI pro přidání dalšího */ }

File upload #2

Co s vybranými soubory

var processFiles = function(files) {
	for (var i=0; i<files.length; i++) {
		var img = document.createElement("img"); /* náhled */
		if (files[i].type.match(/image/)) {
			img.src = window.URL.createObjectURL(files[i]);
		} else { /* předpřipravený obrázek pro ostatní typy */ }
		document.body.appendChild(img);
		
		var xhr = new XMLHttpRequest();
		xhr.open("post", "/upload", true);
		xhr.upload.addEventListener("progress", ..., false); /* ukázat postup */
		xhr.send(files[i]);
	}
}

Placeholder

Zástupný text ve formulářových prvcích

<input type="text" id="input" placeholder="Uživatelské jméno" />
<textarea placeholder="Text článku"></textarea>

Prostor pro otázky