Slide 1

Slide 1 text

Web Components

Slide 2

Slide 2 text

Who is this guy? nikgraf www.nikgraf.com [email protected] Web Components

Slide 3

Slide 3 text

How to Use index.html Web Components

Slide 4

Slide 4 text

Web Components

Slide 5

Slide 5 text

How to Use index.html Web Components

Slide 6

Slide 6 text

Web Components

Slide 7

Slide 7 text

Web Component Web Components

Slide 8

Slide 8 text

Why? Component Component Component ● Encapsulation ● Reusability ● Composability Web Components

Slide 9

Slide 9 text

Easier and Faster Prototyping

Welcome to Berlin

Web Components

Slide 10

Slide 10 text

Web Component ● HTML Templates inert chunks of clonable DOM ● Custom Elements create new HTML elements ● Shadow DOM encapsulation & boundaries inside of DOM ● HTML Imports import html documents Web Components

Slide 11

Slide 11 text

Client Side Templating <span class=”hour”></span>: <span class=”minute”></span> HTML encourages run-time string parsing (.innerHTML) user-supplied data → Cross-site scripting Web Components

Slide 12

Slide 12 text

HTML Templates : var template = document.querySelector("#clock-tmpl"); // comment is a DocumentFragment var comment = template.content.cloneNode(true); Web Components HTML

Slide 13

Slide 13 text

HTML Templates Web Components Working directly with the DOM no runtime script parsing, smaller XSS attack vector Hidden from document cannot traverse into its DOM via JavaScript Content gets parsed, not rendered tags aren’t executed, images aren't loaded, media doesn't play, etc.

Slide 14

Slide 14 text

“ ” Shadow DOM Web Components Shadow DOM gives us markup encapsulation, style boundaries, and exposes (to web developers) the same mechanics browsers vendors have been using to implement their internal UI. Eric Bidelman

Slide 15

Slide 15 text

Shadow DOM Web Components Let’s dig deeper

Slide 16

Slide 16 text

Web Components

Slide 17

Slide 17 text

Shadow DOM
var host = document.querySelector('#clock'); // use webkitCreateShadowRoot for now var shadowRoot = host.createShadowRoot(); shadowRoot.innerHTML = "<span>14</span>: <span>30</span>"; Web Components HTML

Slide 18

Slide 18 text

Shadow DOM

Black header

var host = document.createElement('div'); var shadowRoot = host.createShadowRoot(); var content = "<style>h2 {color: red}</style>"; content += "<h2>Red header</h2>"; shadowRoot.innerHTML = content; document.body.appendChild(host); Black header Red header Web Components HTML

Slide 19

Slide 19 text

Shadow DOM shadowRoot.resetStyleInheritance = false; shadowRoot.applyAuthorStyles = false; @host { *:hover { color: red }; } #clock::x-hour { color: blue; } Web Components HTML Component CSS clock.html Template index.html

Slide 20

Slide 20 text

Custom Elements var ClockPrototype = Object.create(HTMLElement.prototype); ClockPrototype.createdCallback = function() { this.impl.textContent = "14:20"; }; var Clock = document.register('custom-clock', { prototype: ClockPrototype }); var clock = new Clock(); // adds 14:20 to the DOM document.body.appendChild(clock); Web Components tick_tock_clock.html

Slide 21

Slide 21 text

var link = document.querySelector('link[rel=import]'); var content = link.import.querySelector('#clock'); HTML Imports Web Components
14: 30
clock.html index.html

Slide 22

Slide 22 text

Web Component Web Components 14: 30 var ClockProto = Object.create(HTMLElement.prototype); ClockProto.createdCallback = function() { var template = document.querySelector('#clock-tmpl'); var shadowRoot = this.createShadowRoot(); var clone = template.content.cloneNode(true); shadowRoot.appendChild(clone); }; document.register('my-clock', {prototype: ClockProto}); clock.html index.html

Slide 23

Slide 23 text

Use Web Components today Web Components

Slide 24

Slide 24 text

Web Component (Polymer.js) Web Components 14: 30 Polymer('my-clock'); clock.html index.html

Slide 25

Slide 25 text

Think Big Web Components

Slide 26

Slide 26 text

Thanks for listening! nikgraf www.nikgraf.com [email protected] Web Components

Slide 27

Slide 27 text

Further Reading Web Components Web Components http://www.youtube.com/watch?v=fqULJBBEVQE https://dvcs.w3.org/hg/webcomponents/raw-file/57f8cfc4a7dc/explainer/index.html HTML Templates http://www.html5rocks.com/en/tutorials/webcomponents/template/ https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html HTML Imports http://robdodson.me/blog/2013/08/20/exploring-html-imports/ https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/imports/index.html

Slide 28

Slide 28 text

Further Reading Web Components Shadow DOM http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom/ http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom-201/ http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom-301/ http://glazkov.com/2011/01/14/what-the-heck-is-shadow-dom/ https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html Custom Elements http://www.html5rocks.com/en/tutorials/webcomponents/customelements/ https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html Resources Web Components https://plus.google.com/103330502635338602217/posts Lego Bricks http://commons.wikimedia.org/wiki/File:2_duplo_lego_bricks.jpg Polymer Architecture http://www.polymer-project.org/ Icons http://pictos.cc/