Desbravando Web Components

75
Desbravando Web Components @mteusor)z

description

Apresentada no GDG Recife - itshackademic Desbravamos Web Components e Polymer, mostrando as especificação, com muito live code e toda a mágica de Web Components.

Transcript of Desbravando Web Components

Page 1: Desbravando Web Components

Desbravando  Web  Components

@mteusor)z

Page 2: Desbravando Web Components

@mteusor3z

mateusor3z

Page 3: Desbravando Web Components
Page 4: Desbravando Web Components
Page 5: Desbravando Web Components

Como  "criar"  um  componente  hoje

Page 6: Desbravando Web Components

Google!  plugin  jQuery

Page 7: Desbravando Web Components

Copie  e  cole  o  código  do  plugin

Page 8: Desbravando Web Components

Funcionou?  Beleza

Page 9: Desbravando Web Components

Web  Components

Page 10: Desbravando Web Components

<gdg-­‐recife>

h"ps://github.com/mateusor3z/gdg-­‐light

Page 11: Desbravando Web Components
Page 12: Desbravando Web Components

googlewebcomponents.github.io

Page 13: Desbravando Web Components

Live  demo

Page 14: Desbravando Web Components
Page 15: Desbravando Web Components

<google-­‐map>

h"ps://github.com/GoogleWebComponents/google-­‐map

Page 16: Desbravando Web Components

<google-­‐chart>

h"ps://github.com/GoogleWebComponents/google-­‐chart

Page 17: Desbravando Web Components
Page 18: Desbravando Web Components

Web  Components

Shadow  DOM

TemplateCustom  Elements

HTML  Imports

Decorators*

Page 19: Desbravando Web Components

Custom  ElementsDefine  novos  elementos  HTML/DOM

Page 20: Desbravando Web Components

Criar  Novos  Elementos

Page 21: Desbravando Web Components

<script> (function() { // Creates an object based in the HTML Element prototype var element = Object.create(HTMLElement.prototype); // Fires when an instance of the element is created element.createdCallback = function() {}; // Fires when an instance was inserted into the document element.attachedCallback = function() {}; // Fires when an instance was removed from the document element.detachedCallback = function() {}; // Fires when an attribute was added, removed, or updated element.attributeChangedCallback = function(attr, oldVal, newVal) {}; document.registerElement('menu-tabs', { prototype: element }); }()); </script>

Page 22: Desbravando Web Components

<!-- Define your custom element --> <polymer-element name="menu-tabs">

<script> Polymer('menu-tabs', { // Fires when an instance of the element is created created: function() {}, // Fires when the "<polymer-element>" has been fully prepared ready: function() {}, // Fires when the element was inserted into the document attached: function() {}, // Fires when the element was removed from the document detached: function() {}, // Fires when an attribute was added, removed, or updated attributeChanged: function(attr, oldVal, newVal) {} }); </script> </polymer-element>

Page 23: Desbravando Web Components

<menu-tabs></menu-tabs>

Usando    o  elemento

Page 24: Desbravando Web Components

Estendendo  elementos  existes

Page 25: Desbravando Web Components

<!-- Define your custom element --> <polymer-element name="menu-tabs" extends="nav"> <script> Polymer('menu-tabs', { // Fires when an instance of the element is created created: function() {}, // Fires when the "<polymer-element>" has been fully prepared ready: function() {}, // Fires when the element was inserted into the document attached: function() {}, // Fires when the element was removed from the document detached: function() {}, // Fires when an attribute was added, removed, or updated attributeChanged: function(attr, oldVal, newVal) {} }); </script> </polymer-element>

Page 26: Desbravando Web Components

Lifecycle  Callbacks  Polymer

created();

detached();a"ributeChanged();

a"ached();

Page 27: Desbravando Web Components

TemplateTemplate  client-­‐side  na3vo

Page 28: Desbravando Web Components

HTML  Templates

parseado,  não  é  renderizadoconteúdo  inerteUsa  Dom  como  scaffold  

Page 29: Desbravando Web Components

<template> ... </template>

Page 30: Desbravando Web Components

<polymer-element name="menu-tabs" noscript attributes="selected"> <template> ... </template> </polymer-element>

Page 31: Desbravando Web Components

Shadow  DomEsconder  Detalhes  de  implementação

Page 32: Desbravando Web Components

<video src="video.mp4" controls></video>

Page 33: Desbravando Web Components

Encapsula  style,  marcação  e  script  

Page 34: Desbravando Web Components

HTML  ImportsCarregar  Web  Components

Page 35: Desbravando Web Components

exemplo

<link rel="stylesheet" href="bootstrap.css"> <link rel="stylesheet" href="font.css"> <script src="jquery.js"></script> <script src="bootstrap.js"></script> <script src="bootstrap-tooltip.js"></script> <script src="bootstrap-dropdown.js"></script>

Page 36: Desbravando Web Components

exemplo

<link rel="import" href="bootstrap.html">

Page 37: Desbravando Web Components

Suporte  a    Web  Components

Page 38: Desbravando Web Components

tjonrimmer.github.io/are-­‐we-­‐componen4zed-­‐yet/

Page 39: Desbravando Web Components
Page 40: Desbravando Web Components
Page 41: Desbravando Web Components

tpolymer-­‐project.org

Page 42: Desbravando Web Components

Google

Page 43: Desbravando Web Components
Page 44: Desbravando Web Components

core-­‐elements

Page 45: Desbravando Web Components

Visual<core-­‐toolbar>  

<core-­‐header-­‐panel>  <core-­‐drawer-­‐panel>  

<core-­‐menu>  <core-­‐icon>  

<core-­‐overlay>  

....

não  Visual<core-­‐ajax>  

<core-­‐localstorage>  <core-­‐range>  

<core-­‐shared-­‐lib>  <core-­‐media-­‐query>  

<core-­‐iconset>  

....

Page 46: Desbravando Web Components

hbp://goo.gl/5Tiy9U

Page 47: Desbravando Web Components

paper-­‐elements

Page 48: Desbravando Web Components

Polymer  Paper  Elements

bubons  inputs  tabs  cards  panels  ....

Page 49: Desbravando Web Components

Quem             está  

                        Usando

Page 50: Desbravando Web Components
Page 51: Desbravando Web Components

Açúcar  Sintá3co  Custom  Elements

Page 52: Desbravando Web Components

document.registerElement('paper-tabs', { prototype: Object.create( HTMLElement.prototype ) });

vanilla

Page 53: Desbravando Web Components

<polymer-element name="paper-tabs"> ... </polymer-element>

polymer

Page 54: Desbravando Web Components

<paper-tabs></paper-tabs> // document.createElement('paper-tabs');

Usando

Page 55: Desbravando Web Components

Açúcar  Sintá3co  Template

Page 56: Desbravando Web Components

<template> ... </template>

vanilla

Page 57: Desbravando Web Components

<polymer-element name="list-users" noscript> <template> <ul> <template repeat="{{user, i in users}}"> <li>{{user.name}}</li> </template> </ul> </template> </polymer-element>

polymer

Page 58: Desbravando Web Components

Açúcar  Sintá3co  Shadow  Dom

Page 59: Desbravando Web Components

var shadow = el.createShadowRoot();

shadow.innerHTML = '<h2>I`m a profile-card</h2>';

vanilla

Page 60: Desbravando Web Components

<polymer-element name="profile-card" noscript> <template> <link rel="stylesheet" href="styles.css"> <h2>I'm a profile-card</h2> </template> </polymer-element>

polymer

Page 61: Desbravando Web Components

Você  ainda  pode  Estender  elementos  já  existentes

Page 62: Desbravando Web Components

<polymer-element name="x-button" extends="button"> <template> </template> <script> Polymer('x-button', { }); </script> </polymer-element>

polymer

Page 63: Desbravando Web Components

como  não  se    tornar  um  zumbi  

Page 64: Desbravando Web Components

algumas  coisas  que  podem  Ajudar  

Page 65: Desbravando Web Components

th,p://webcomponents.org/

Page 66: Desbravando Web Components

th,p://customelements.io/

Page 67: Desbravando Web Components

th,ps://github.com/mateusor)z/webcomponents-­‐the-­‐right-­‐way

Page 68: Desbravando Web Components

como  começar  um  component  

Page 69: Desbravando Web Components

tgithub.com/webcomponents/polymer-­‐boilerplate

Page 70: Desbravando Web Components

th,ps://github.com/webcomponents/generator-­‐element

Page 71: Desbravando Web Components

Em  poucas    palavras...

Page 72: Desbravando Web Components

encapsulamento  e  reaproveitamento  de  código  de  verdade

Page 73: Desbravando Web Components

Inventa  o  Futuro

Page 74: Desbravando Web Components
Page 75: Desbravando Web Components

Obrigado

TWITTER.COM/MTEUSORTIZGITHUB.COM/MATEUSORTIZ