Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
A future called Web Components
Search
Zeno Rocha
December 17, 2013
Programming
27
4.1k
A future called Web Components
HTML5 LA
Zeno Rocha
December 17, 2013
Tweet
Share
More Decks by Zeno Rocha
See All by Zeno Rocha
The Next Generation of Developer-First Products
zenorocha
1
480
7 Habits of Highly Productive Developers
zenorocha
1
320
7 Hábitos de Desenvolvedores Altamente Produtivos
zenorocha
1
360
What's new in the Liferay Community
zenorocha
0
600
Launching Liferay Projects Faster with WeDeploy
zenorocha
1
490
How Liferay fits into the real of latest technologies
zenorocha
0
480
Estoicismo e JavaScript
zenorocha
3
950
Por que ninguém se importa com seu novo projeto open source?
zenorocha
2
830
Como investir em... você!
zenorocha
1
500
Other Decks in Programming
See All in Programming
GraphQLにおけるページネーションベストプラクティス
estie
0
160
DroidKaigi 2024 - You will 💜 Becoming a fullstack developer with your Android skills
brah
0
110
CSC305 Lecture 01
javiergs
PRO
0
130
API Platform for Laravel
dunglas
1
1.1k
Google Sign-inの移行から始めるCredential Manager活用
clockvoid
0
560
Remix × Cloudflare Pages × Sentry 奮闘記 / remix-pages-sentry
nkzn
0
290
App Router 悲喜交々
quramy
6
300
サーバーレスで負荷試験!Step Functions + Lambdaを使ったk6の分散実行
shuntakahashi
7
1.6k
宿泊予約サイトにおける検索と料金計算の両立
skaji
1
190
為醫療加裝Python的引擎
cclai999
0
240
M5Stack に色々な M5ユニットをつないで扱う為の新たなアプローチ
gob
0
190
いまあるチームにフィットさせる Serverless そして Platform Engineeringへの挑戦 / Serverless Fits the Team You Have and Platform Engineering
seike460
PRO
2
1.1k
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
3
68
Ruby is Unlike a Banana
tanoku
96
11k
Practical Orchestrator
shlominoach
185
10k
Designing the Hi-DPI Web
ddemaree
278
34k
Fantastic passwords and where to find them - at NoRuKo
philnash
48
2.8k
The Brand Is Dead. Long Live the Brand.
mthomps
53
38k
The Cult of Friendly URLs
andyhume
76
6k
BBQ
matthewcrist
83
9.2k
Debugging Ruby Performance
tmm1
72
12k
Visualization
eitanlees
142
15k
How STYLIGHT went responsive
nonsquared
93
5.1k
Bash Introduction
62gerente
608
210k
Transcript
None
I’m from Brazil!
None
None
None
None
None
None
None
the most famous client-side projects are fated to die
None
None
None
so you think everything will become “native" one day?
what the major web companies have been working on?
None
None
None
None
None
None
None
None
None
None
None
None
None
how do you create a “component” nowadays?
1. Never create! Just use a jQuery plugin
2. Copy and paste someone’s code
3. And hope it works
None
<html5-la>
<video is=”camera”> eduardolundgren.github.io/video-camera-element
None
None
<element name=“html5-la“ constructor="HTML5LA" attributes="where"> // content goes here </element> <element>
<element> <element name="camera" extends="video"> // content goes here </element>
None
using JS <html5-la></html5-la> var proto = Object.create(HTMLElement.prototype); proto.createdCallback = function()
{ this.textContent = ‘HTML5 LA!'; }; document.register(‘html5-la', { prototype: proto });
lifecycle • createdCallback() • enteredDocumentCallback() • leftDocumentCallback() • attributeChangedCallback()
None
None
how to use it? <polymer-element name=“html5-la" attributes="where"> <script> Polymer(‘html5-la', {
where: ‘Santa Monica’, created: function() { // do something } }); </script> </polymer-element>
lifecycle • created() • enteredView() • leftView() • attributeChanged()
None
Templates are reusable blocks of code
Templates are reusable blocks of code
None
None
attempt #1 <div id="template" style="display: none"> <img src="logo.png" class="logo.png"> </div>
<script id="template" type="text/x-handlebars-template"> <img src="logo.png"> </script> attempt #2
None
how to create it? <template id="myTemplate"> <img src=""> </template>
how to use it? // 1. Access template’s content var
t = document.querySelector('#myTemplate').content; // 2. Manipulate internal element t.querySelector('img').src = 'logo.png'; // 3. Clone and append in the DOM document.body.appendChild(t.cloneNode(true));
None
Shadow DOM hides the implementation details
what about <iframe>?
what’s a <video> made of? or password, textarea, date?
how to use it? <h1>Foo</h1> <div id=”elem”></div> var elem =
document.querySelector(‘#elem'); var elemShadowDOM = elem.createShadowRoot(); ! elemShadowDOM.innerHTML = '<h1>Bar</h1>';
markup, style & script encapsulated <h1>Foo</h1> <div id=”elem”></div> var elem
= document.querySelector(‘#elem'); var elemShadowDOM = elem.createShadowRoot(); ! elemShadowDOM.innerHTML = ‘<h1>Bar</h1>’ + ‘<style>h1 { color: red; }</style>’;
None
None
None
how to use it? <link rel="import" href="myelement.html">
None
None
None
None
where can I find them? NPM? Bower?
None
None
None
<twitter-button> zenorocha.github.io/twitter-button
<google-maps> eduardolundgren.github.io/google-maps-element
<video is=”camera”> eduardolundgren.github.io/video-camera-element
<video is=”tracking”> eduardolundgren.github.io/video-tracking-element
in other words…
encapsulation and code reuse for real
the best way to predict the future is to create
it
None
thanks! zenorocha.com