POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 ·...

33
POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER / Pete Johanson @petejohanson

Transcript of POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 ·...

Page 1: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

POLYMER &WEB COMPONENTS

GETTING STARTED WITH POLYMER / Pete Johanson @petejohanson

Page 2: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

Applications

Existing Frameworks

Web Components (Polymer?)

Web Platform

Page 3: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson
Page 4: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson
Page 5: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

NO PANACEA

Page 6: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

CONSIDERATIONSProgressive Enhancement ChallengesServer Side Rendering?Browser Support

Page 7: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

EXISTING APPROACHES<head> <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery­ui.css" <script src="//code.jquery.com/jquery­1.10.2.js"></script> <script src="//code.jquery.com/ui/1.11.4/jquery­ui.js"></script> <script>

</script></head><body>

<ul id="menu"> <li>Item 1</li> <li>Item 2</li></ul>

$(function() $( "#menu" ).menu( disabled: true ); );

Page 8: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

POLYMER<head> <link rel="import" href="paper­item/paper­item.html"> <link rel="import" href="paper­menu/paper­menu.html"><head>

<body> <paper­menu selected="1"> <paper­item>Item 1</paper­item> <paper­item>Item 2</paper­item> </paper­menu></body>

Page 9: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

FEATURESDeclared PropertiesLocal/Light DOMData BindingEventsScoped Styles and Custom CSS Properties

Page 10: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

DECLARED PROPERTIESPolymer( is: 'my­gravatar', properties: email: String, size: type: String, value: '' , /* ... */ );

Page 11: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

COMPUTED PROPERTIESPolymer( is: 'my­gravatar',

properties: email: String, size: String, imgsrc: type: String, computed: 'computeImageSource(email, size)' ,

computeImageSource: function(email, size) return ...; );

Page 12: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

CHANGE NOTIFICATIONNeeded for two-way data binding

Polymer( is: 'my­chooser',

properties: choice: type: String, notify: true, ,);

Page 13: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

LOCAL (SHADOW) DOM<dom­module id="my­gravatar"> <template> <img src="imgsrc"> </template> ...</dom­module>

Page 14: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

AUTOMATIC NODE FINDING<dom­module id="my­gravatar"> <template> <img id="gravatar"> </template> <script> Polymer( is: 'my­gravatar', ready: function() this.$.gravatar.src = '//gravatar.com/avatar/abcdef'; ); </script>

</dom­module>

Page 15: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

DOM MANIPULATIONLocal DOM

var toLocal = document.createElement('div');var beforeNode = Polymer.dom(this.root).childNodes[0];Polymer.dom(this.root).insertBefore(toLocal, beforeNode);

Light DOM

Polymer.dom(this).appendChild(document.createElement('div'));var allSpans = Polymer.dom(this).querySelectorAll('span');

Page 16: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

LIGHT DOM<dom­module id="my­strongbad"> <template> <strong><content></content></strong> </template> ...</dom­module>

Page 17: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

<my­strongbad>Deleted!</my­strongbad>

Page 18: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

DATA BINDING<dom­module id="my­gravatar"> <template> <input type="text" value=email::input></input> <input type="text" value=size::input></input> <img src="imgsrc"> </template> ...</dom­module>

Page 19: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

ONE-WAY VS TWO-WAY BINDINGS<template> <my­gravatar email="[[email]]"></my­gravatar></template>

<template> <my­chooser choice="choice"></my­chooser></template>

Page 20: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

ONE-WAY BINDINGHost-To-Child

<template> <my­gravatar email="[[email]]"></my­gravatar> <input type="text" value="email::input"></template><script> Polymer( is: 'my­element', properties: email: String, , );</script>

Page 21: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

TWO-WAY BINDINGBi-directional between child and host

<template> <my­chooser choice="type"></my­chooser></template><script> Polymer( is: 'my­element', properties: type: String, , );</script>

Page 22: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

EVENTSDeclarative event listenersAnnotated event listenersCustom Event Firing

Page 23: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

DECLARATIVE EVENT LISTENERSPolymer( is: 'x­custom',

listeners: 'tap': 'regularTap', 'special.tap': 'specialTap' ,

regularTap: function(e) alert("Thank you for tapping"); , specialTap: function(e) alert("It was special tapping"); );

Page 24: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

ANNOTATED EVENT LISTENERS<button on­click="buttonClick">Click Me</button>

Page 25: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

EVENT FIRING<dom­module id="x­custom"> <template> <button on­click="handleClick">Kick Me</button> </template>

<script>

Polymer( is: 'x­custom',

handleClick: function(e, detail) this.fire('kick', kicked: true); );

</script></dom­module>

Page 26: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

STYLING

Page 27: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

SCOPED STYLES<template> <style> :host /* Selector to style the host DOM element */ display: block;

.content­wrapper > ::content .warning /* Light DOM */ color: red; </style>

<div class="content­wrapper"><content></content></div></template>

Page 28: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

CROSS SCOPE STYLES"Theming"

<template> <style>

</style>

<div class="content­wrapper"><content></content></div></template>

:host /* Selector to style the host DOM element */ display: block;

.content­wrapper > ::content .warning /* Light DOM */ color: var(­­my­element­warning­color, red);

Page 29: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

CSS MIXINS<template> <style> :host /* Selector to style the host DOM element */ display: block; @apply(­­my­element­theme); </style></template>

<style>

</style>

:host ­­my­element­theme background­color: green;

Page 30: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

ELEMENT CATALOG

Page 31: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

POLYMER STARTER KITBest Practices Baked InBuildOffline SupportTesting

Page 32: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

$ wget https://github.com/PolymerElements/polymer­starter­kit/releases/download/v1.$ unzip polymer­starter­kit­1.0.3.zip$ cd polymer­starter­kit­1.0.3$ npm install && bower install$ gulp serve

Page 33: POLYMER & WEB COMPONENTS2016.nerdsummit.org/sites/default/files/slides/nerd... · 2016-02-15 · POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson / @petejohanson

SLIDEShttp://petejohanson.github.io/nerdsummit-2015-polymer