SlideShare uma empresa Scribd logo
1 de 35
WEB COMPONENTS
Mais simples e produtivo com Polymer!
Andrew Willard
28 anos, Campinas / SP
Analista de Sistemas
Pós Graduado em Engenharia Software
Líder Técnico de
Front End Web
Afinal, o que são os
WEB COMPONENTS?
SHADOW DOM
TEMPLATES
HTML IMPORTS
CUSTOM ELEMENTS
<video controls poster="poster.png">
<source src="video.webm" type='video/webm;codecs="vp8, vorbis"' />
<source src="video.mp4" type='video/mp4;codecs="avc1.42E01E, mp4a.40.2"' />
<track src="video.vtt" label="Portuguese subtitles" kind="subtitles" srclang="pt-br"
default></track>
</video>
LIGHTING DOM
<video controls poster="poster.png">
<div style="display: none"></div>
<div>
<div>
<input type="button">
<input type="range" step="any" max="70.112">
<div style="display: none;">0:00</div>
<div>1:10</div>
<input type="button">
<input type="range" step="any" max="1">
<input type="button">
<input type="button">
</div>
</div>
</div>
<source src="video.webm" type='video/webm;codecs="vp8, vorbis"' />
<source src="video.mp4" type='video/mp4;codecs="avc1.42E01E, mp4a.40.2"' />
<track src="video.vtt" label="Portuguese subtitles" kind="subtitles" srclang="pt-br" default></track>
</video>
SHADOW DOM
Template é um DocumentFragment que pode ser reaproveitado
<template id=”item”>
<img>
<div>
<p class=”title”></p>
<p></p>
</div>
<checkbox class=”star”>
</checkbox>
</template>
index.html
<link rel=”import” href=”date-picker.html”>
<link rel=”import” href=”timezone-date.html”>
date-picker.html
<link rel=”import” href=”moment-import.html”>
timezone-date.html
<link rel=”import” href=”moment-import.html”>
moment-import.html
<script src=”moment/moment.js”>
class FlagIcon extends HTMLElement {
constructor() {
super();
this._countryCode = null;
}
get country() {
return this._countryCode;
}
set country(v) {
this.setAttribute("country", v);
}
}
class PlasticButton extends HTMLButtonElement {
constructor() {
super();
this.addEventListener("click", () => {
// Executar uma animação super descolada!
});
}
}
Crie seus próprios
elementos!
<link rel="import" href="another-element.html">
<dom-module id="element-name">
<template>
<style>
/* Estilos, variáveis e mixers CSS */
</style>
<!-- local DOM do seu elemento -->
<div>{{greeting}}</div> <!-- data bindings no DOM do elemento -->
</template>
<script>
// registro do elemento
Polymer({
is: "element-name",
// Propriedades e métodos do prototype do seu elemento
properties: {
// properties públicas do elemento
greeting: {
type: String,
value: "Hello!"
}
}
});
</script>
</dom-module>
<link rel="import" href="another-element.html">
<dom-module id="element-name">
<template>
<style>
/* Estilos, variáveis e mixers CSS */
</style>
<!-- local DOM do seu elemento -->
<div>{{greeting}}</div> <!-- data bindings no DOM do elemento -->
</template>
<script>
// registro do elemento
Polymer({
is: "element-name",
// Propriedades e métodos do prototype do seu elemento
properties: {
// properties públicas do elemento
greeting: {
type: String,
value: "Hello!"
}
}
});
</script>
</dom-module>
<link rel="import" href="another-element.html">
<dom-module id="element-name">
<template>
<style>
/* Estilos, variáveis e mixers CSS */
</style>
<!-- local DOM do seu elemento -->
<div>{{greeting}}</div> <!-- data bindings no DOM do elemento -->
</template>
<script>
// registro do elemento
Polymer({
is: "element-name",
// Propriedades e métodos do prototype do seu elemento
properties: {
// properties públicas do elemento
greeting: {
type: String,
value: "Hello!"
}
}
});
</script>
</dom-module>
<link rel="import" href="another-element.html">
<dom-module id="element-name">
<template>
<style>
/* Estilos, variáveis e mixers CSS */
</style>
<!-- local DOM do seu elemento -->
<div>{{greeting}}</div> <!-- data bindings no DOM do elemento -->
</template>
<script>
// registro do elemento
Polymer({
is: "element-name",
// Propriedades e métodos do prototype do seu elemento
properties: {
// properties públicas do elemento
greeting: {
type: String,
value: "Hello!"
}
}
});
</script>
</dom-module>
<element-name
id=”element”
greeting=”Hi DevFestNE”>
</element-name>
Hi DevFestNE
<link rel="import" href="element-name.html">
this.$.element.greeting=”Hi Again”;
Hi Again
<style>
#element {
--background-color: #38761D;
}
</style>
this.$.element.setGreeting(”Hi Again”);
<template is="dom-repeat" items="{{items}}">
<div>#{{index}} - {{item}}</div>
</template>
Todas features, nenhum framework!
<template is="dom-if" if="{{enabled}}">
<div>I’m enabled!</div>
</template>
Plataforma Web
Web Components feitos com Polymer (ou não)
Frameworks JS
Aplicação
+4 MILHÕES DE
WEB PAGES
+ 500 projetos
6.000 elementos
O maior portal de entretenimento do MUNDO!
Uma coleção de elementos
criados pela equipe do Google
Layout responsivo para estruturar a sua aplicação
Layout responsivo para estruturar a sua aplicação
https://ebidel.github.io/material-playground/
Toda a complexidade das APIs em simples elementos
Progressive Web Apps
Offline First
<platinum-sw-register auto-register>
<platinum-sw-cache></platinum-sw-cache>
</platinum-sw-register>
2525
repositórios
1006
autores
<script src=”webcomponents-lite.js”>
</script>
Polyfills - 40kb
Chrome
76.19%
FireFox
10.59%
Safari
8.12%
IE/Edge
4.72%
Total
99.98%
Opera
0.32%
Outros
0.04%
#DevFestNE - talentos@movile.com
andrewillard@gmail.com
andrewillard
andrewillard
andrewillard

Mais conteúdo relacionado

Semelhante a Web components: mais simples e produtivo com polymer!

O que todos os developers devem saber sobre seo
O que todos os developers devem saber sobre seoO que todos os developers devem saber sobre seo
O que todos os developers devem saber sobre seointrofini
 
Otimize sua web page e web components
Otimize sua web page e web componentsOtimize sua web page e web components
Otimize sua web page e web componentsAndré Betiolo
 
Curso de Java (Parte 6) Introdução a Front-end
Curso de Java (Parte 6) Introdução a Front-endCurso de Java (Parte 6) Introdução a Front-end
Curso de Java (Parte 6) Introdução a Front-endMario Sergio
 
Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Rodrigo Urubatan
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoFreedom DayMS
 
Apresentação sobre Bootstrap na Maratona de Inovação ISITEC 2017
Apresentação sobre Bootstrap na Maratona de Inovação ISITEC 2017Apresentação sobre Bootstrap na Maratona de Inovação ISITEC 2017
Apresentação sobre Bootstrap na Maratona de Inovação ISITEC 2017Fernando Freitas Alves
 
MIRA - Um framework Javascript para construção de interfaces adaptativas em a...
MIRA - Um framework Javascript para construção de interfaces adaptativas em a...MIRA - Um framework Javascript para construção de interfaces adaptativas em a...
MIRA - Um framework Javascript para construção de interfaces adaptativas em a...Ezequiel Bertti
 
Javascript truquesmagicos
Javascript truquesmagicosJavascript truquesmagicos
Javascript truquesmagicosponto hacker
 
HTML5, CSS3 e o futuro da web
HTML5, CSS3 e o futuro da webHTML5, CSS3 e o futuro da web
HTML5, CSS3 e o futuro da webDiego Pessoa
 
Cobol Web com Net Express 3.1/4.0/5.x - Parte 2
Cobol Web com Net Express 3.1/4.0/5.x - Parte 2Cobol Web com Net Express 3.1/4.0/5.x - Parte 2
Cobol Web com Net Express 3.1/4.0/5.x - Parte 2Altair Borges
 

Semelhante a Web components: mais simples e produtivo com polymer! (20)

O que todos os developers devem saber sobre seo
O que todos os developers devem saber sobre seoO que todos os developers devem saber sobre seo
O que todos os developers devem saber sobre seo
 
Otimize sua web page e web components
Otimize sua web page e web componentsOtimize sua web page e web components
Otimize sua web page e web components
 
Curso de Java (Parte 6) Introdução a Front-end
Curso de Java (Parte 6) Introdução a Front-endCurso de Java (Parte 6) Introdução a Front-end
Curso de Java (Parte 6) Introdução a Front-end
 
Python 08
Python 08Python 08
Python 08
 
Aula html5
Aula html5Aula html5
Aula html5
 
Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
Apresentação sobre Bootstrap na Maratona de Inovação ISITEC 2017
Apresentação sobre Bootstrap na Maratona de Inovação ISITEC 2017Apresentação sobre Bootstrap na Maratona de Inovação ISITEC 2017
Apresentação sobre Bootstrap na Maratona de Inovação ISITEC 2017
 
Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)
 
MIRA - Um framework Javascript para construção de interfaces adaptativas em a...
MIRA - Um framework Javascript para construção de interfaces adaptativas em a...MIRA - Um framework Javascript para construção de interfaces adaptativas em a...
MIRA - Um framework Javascript para construção de interfaces adaptativas em a...
 
Apache Wicket
Apache WicketApache Wicket
Apache Wicket
 
Html, css, js, ajax
Html, css, js, ajaxHtml, css, js, ajax
Html, css, js, ajax
 
Introdução a HTML, CSS, JS, Ajax
Introdução a HTML, CSS, JS, AjaxIntrodução a HTML, CSS, JS, Ajax
Introdução a HTML, CSS, JS, Ajax
 
Programação Web com jQuery
Programação Web com jQueryProgramação Web com jQuery
Programação Web com jQuery
 
HTML + CSS
HTML + CSSHTML + CSS
HTML + CSS
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Javascript truquesmagicos
Javascript truquesmagicosJavascript truquesmagicos
Javascript truquesmagicos
 
HTML5, CSS3 e o futuro da web
HTML5, CSS3 e o futuro da webHTML5, CSS3 e o futuro da web
HTML5, CSS3 e o futuro da web
 
Html5 ass
Html5 assHtml5 ass
Html5 ass
 
Cobol Web com Net Express 3.1/4.0/5.x - Parte 2
Cobol Web com Net Express 3.1/4.0/5.x - Parte 2Cobol Web com Net Express 3.1/4.0/5.x - Parte 2
Cobol Web com Net Express 3.1/4.0/5.x - Parte 2
 

Web components: mais simples e produtivo com polymer!