Web components

26
<WEB-COMPONENTS> The component model for the Web @revathskumar

description

The Component model for the web

Transcript of Web components

Page 1: Web components

<WEB-COMPONENTS>The component model for the Web 

@revathskumar

Page 2: Web components

ABOUTRubyist / JavaScripterYeoman team memberWorks at @whatznearBlog at blog.revathskumar.comTwitter/Github ­ @revathskumar+RevathSKumar

 

Page 3: Web components

ITS A JOURNEY INTO THE FUTURE

Page 4: Web components

CONSISTS 4 PIECESTemplatesCustom ElementsShadow DOMImports

Page 5: Web components

TEMPLATESmarkup intended to be used later

Page 6: Web components

WHAT WE DO NOW?<script id="indexTemplate" type="text/template">

</script>

<tr> <td> <img src="/image/delete.png"/> </td> </tr></p>

Page 7: Web components

WHAT IN FUTURE?<template id="indexTemplate" > <tr> <td> <img src="/image/delete.png"/> </td> </tr></template>

var holder = document.getElementById('holder'); var template = document.getElementById('indexTemplate');

templateContent = template.content.cloneNode(true); holder.appendChild(temp);

Page 8: Web components

CONTENTS IN <TEMPLATE> ARE

Parsed but not renderedimages won't be downloadedScripts are not processes

until you actually use it.

Page 9: Web components

CAN I USE?

Page 10: Web components

CUSTOM ELEMENTSnew type of DOM elements which can be defined by authors.

Page 11: Web components

HOW TO DEFINE ONE?document.registerElement

var p = Object.create(HTMLButtonElement.prototype);var myBtn = document.registerElement('my-btn', { extends: 'button', prototype: p});

Page 12: Web components

METHODSvar p = Object.create(HTMLButtonElement.prototype);p.someMethod = function(){ // blah blah}

var myBtn = document.registerElement('my-btn', { extends: 'button', prototype: p});

Page 13: Web components

LIFECYCLE CALLBACKScreatedCallback ­­­> after createdattachedCallback ­­­> after inserted to documentdetachedCallback ­­­> after removed from documentattributeChangedCallback ­­­> when an attribute added /removed / changed

Page 14: Web components

USING IN MARKUPIf using existsing tag

<button is='my-btn'></button>

If not related to any existing tag<my-btn></my-btn>

Page 15: Web components

EXTENDINGvar p = Object.create(HTMLButtonElement.prototype);var myBtn = document.registerElement('my-btn', { extends: 'button', prototype: p});

var mb = new myBtn();var anotherBtn = document.registerElement('another-btn', { prototype: mb});

Page 16: Web components

SHADOW DOMadjunct tree of DOM nodes

Page 17: Web components

FEATUREScan be associated with an element, but do not appear aschild nodessubtrees form their own scopecontains IDs and styles that overlap with IDs and styles in thedocumentseparate from the document

Page 18: Web components

CAN I USE?

Page 19: Web components

SHADOW HOSTAn element with shadow DOMShadow DOM can be applied to an element by

createShadowRoot

the content of the shadow DOM is rendered instead theelement's children

Page 20: Web components

INSERTION POINTShost's children are displayed at the insertion pointuse a element to specify insertion point.does not change where the elements appear in DOM"select" attribute lets you choose which children appear atwhich insertion pointlet you reordered or selectively omit rendering children

Page 21: Web components

<!-- document --><div id="news"> <h1>Good day for kittens</h1> <div class="breaking">Kitten rescued from tree</div> <div>Area kitten "adorable"&mdash;owner</div> <div class="breaking">Jiggled piece of yarn derails kitten kongress</div></div>

<!-- #news' shadow --><template id="t"> <content select="h1"></content> <div id="ticker"> <content id="stories"></content> </div></template>

Page 22: Web components

// Set up shadow DOMvar news = document.querySelector('#news');var r = news.createShadowRoot();var t = document.querySelector('#t');r.appendChild(t.content.cloneNode(true));

<div id="news"> <h1>Good day for kittens</h1> <div id="ticker"> <div class="breaking">Kitten rescued from tree</div> <div>Area kitten "adorable"&mdash;owner</div> <div class="breaking">Jiggled piece of yarn derails kitten kongress</div> </div></div>

Page 23: Web components

CAN I USE?

Page 24: Web components

IMPORTSLoad custom elements from external files

Page 25: Web components

Load using tag<link rel="import" href="goodies.html">

DOM available to script through the import property

Page 26: Web components

THANK YOU.