polymer 1.0 par cyril balit - jug orléans

57
Polymer 1.0 @cbalit

Upload: sfeir

Post on 12-Feb-2017

690 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Polymer 1.0 par Cyril Balit - JUG Orléans

Polymer 1.0@cbalit

Page 2: Polymer 1.0 par Cyril Balit - JUG Orléans

Moi...

Cyril Balit CTO Front

@cbalit

Page 3: Polymer 1.0 par Cyril Balit - JUG Orléans

Des composants

Page 4: Polymer 1.0 par Cyril Balit - JUG Orléans
Page 5: Polymer 1.0 par Cyril Balit - JUG Orléans
Page 6: Polymer 1.0 par Cyril Balit - JUG Orléans
Page 7: Polymer 1.0 par Cyril Balit - JUG Orléans

@polymer #itshackademic

Page 8: Polymer 1.0 par Cyril Balit - JUG Orléans
Page 9: Polymer 1.0 par Cyril Balit - JUG Orléans

<paper-tabs>

<paper-tab>KNOWLEDGE</paper-tab>

<paper-tab>HISTORY</paper-tab>

<paper-tab>FOOD</paper-tab>

</paper-tabs>

Less Code. Less confusion.Web Components

Page 10: Polymer 1.0 par Cyril Balit - JUG Orléans

WEB COMPONENTS

HTMLIMPORTS

SHADOWDOM

TEMPLATES CUSTOMELEMENTS

Page 11: Polymer 1.0 par Cyril Balit - JUG Orléans

CUSTOM ELEMENT

To define your own HTML tag

Page 12: Polymer 1.0 par Cyril Balit - JUG Orléans

SHADOW DOM

To encapsulate subtree and style in an element

Page 13: Polymer 1.0 par Cyril Balit - JUG Orléans

HTML IMPORTS

To include an html page in another one

Page 14: Polymer 1.0 par Cyril Balit - JUG Orléans

TEMPLATE

To have clonable document template

Page 15: Polymer 1.0 par Cyril Balit - JUG Orléans

But ...

Page 16: Polymer 1.0 par Cyril Balit - JUG Orléans
Page 17: Polymer 1.0 par Cyril Balit - JUG Orléans

Polyfills ...

Page 18: Polymer 1.0 par Cyril Balit - JUG Orléans

Photo: http://bit.ly/1CeBPyN

Page 19: Polymer 1.0 par Cyril Balit - JUG Orléans
Page 20: Polymer 1.0 par Cyril Balit - JUG Orléans

Polymer elements

Page 21: Polymer 1.0 par Cyril Balit - JUG Orléans

<paper-checkbox></paper-checkbox>

<paper-input floatinglabel

label="Type only numbers... (floating)"

validate="^[0-9]*$"

error="Input is not a number!">

</paper-input>

Page 22: Polymer 1.0 par Cyril Balit - JUG Orléans

A simple container with a headersection and a content section

<paper-header-panel>

<paper-header-panel flex>

<paper-toolbar>

<paper-icon-button icon=“menu">

</paper-icon-button>

<div>MY APP</div>

</paper-toolbar>

<div>…</div>

</paper-header-panel>

MY APP

Page 23: Polymer 1.0 par Cyril Balit - JUG Orléans

<paper-drawer-panel>

<paper-drawer-panel>

<div drawer> Drawer panel... </div>

<div main> Main panel... </div>

</paper-drawer-panel>

Page 24: Polymer 1.0 par Cyril Balit - JUG Orléans

Créer un composant

Page 25: Polymer 1.0 par Cyril Balit - JUG Orléans
Page 26: Polymer 1.0 par Cyril Balit - JUG Orléans

Polyfills

<html>

<head>

<script src="webcomponents/webcomponents-lite.min.js"></script>

</head>

<body>

</body>

</html>

Page 27: Polymer 1.0 par Cyril Balit - JUG Orléans

Importer l’élément

<html>

<head>

<script src="webcomponents/webcomponents-lite.min.js"></script>

<link rel=”import” href="paper-card.html">

</head>

<body>

</body>

</html>

Page 28: Polymer 1.0 par Cyril Balit - JUG Orléans

Utiliser l’élément

<html>

<head>

<script src="webcomponents/webcomponents-lite.min.js"></script>

<link rel=”import” href="paper-card.html">

</head>

<body>

<paper-card heading=”hello my friend”>

<img src=”avatar.svg”>

</paper-card>

</body>

</html>

Page 29: Polymer 1.0 par Cyril Balit - JUG Orléans

<dom-module id="paper-card"> <style> :host { border-radius: 2px; } .card-header ::content img { width: 70px; border-radius: 50%; } paper-material { border-radius: 2px; } </style> <template> <paper-material elevation="{{elevation}}" animated on-tap=”tapAction”> <div class="card-header layout horizontal center”> <content select="img"></content> <h3>{{heading}}</h3> </div> <content></content> </paper-material> </template></dom-module><script> Polymer({ is:'paper-card', properties: { heading: {type: String, reflectToAttribute: true, value: “”}, elevation: {type: Number, reflectToAttribute: true, value: 1} }, attached: function() { /* your initialisations here */ }, tapAction: function (e) { /* your event handling here */ } });</script>

script: called on init

content injection using select= polymer expression

injecting all other content

scrip

t / p

roto

type

the name must have a “-”

event binding

published attributes

data binding

tags

/ sh

adow

DO

M a

nd s

tyle

Page 30: Polymer 1.0 par Cyril Balit - JUG Orléans

Lifecycle

MyElement = Polymer({

is: 'my-element',

created: function() {},

attached: function() {},

detached: function() {},

attributeChanged: function(name, type) {}

ready: function() {}

});

1. created callback

2. local DOM initialized

3. ready callback

4. attached callback

Page 31: Polymer 1.0 par Cyril Balit - JUG Orléans

Distribution du DOM: la composition

Page 32: Polymer 1.0 par Cyril Balit - JUG Orléans

Light Dom and Shadow Dom

Page 33: Polymer 1.0 par Cyril Balit - JUG Orléans

Light Dom and Shadow Dom

<my-component> <span class="title">Hello too</span> <span>Bla Bla Bla</span></my-component>

Dom & Light Dom

<h1>In Shadow</h1><h2>

<content select=".title"></content></h2><section>

<content></content></section>

Shadow Dom

<my-component><h1>In Shadow</h1><h2>

<span class="title">Hello too</span></h2><section>

<span>Bla Bla Bla</span></section>

</my-component>

Composed Dom

Page 34: Polymer 1.0 par Cyril Balit - JUG Orléans

And Shady Dom ...

Problèmes liés au Polyfill (proxy des nodes)● beaucoup de code● performance pour wrapper l’API● Certains éléments ne peuvent être surchargés (window.document,

windo.document.body,document.documentElement..)

Shady Dom propose une API pour émuler l’encapsulation

Page 35: Polymer 1.0 par Cyril Balit - JUG Orléans

Propriétés

Page 36: Polymer 1.0 par Cyril Balit - JUG Orléans

Properties: configuration

● type.● valeur par défaut● observers● read-only● notification● Computed property

Polymer({

is: 'x-custom',

properties: {

userName: String,

isHappy: Boolean,

count: {

type: Number,

readOnly: true,

notify: true

}

}

...

});

<x-custom user-name="Scott"></x-custom>

Page 37: Polymer 1.0 par Cyril Balit - JUG Orléans

Data binding

Page 38: Polymer 1.0 par Cyril Balit - JUG Orléans

Data binding

Lié une propriété d’un élément à un attribut ou une propriété d’un élément fils.

<dom-module id="host-element">

<template>

<child-element name="{{myName}}"></child-element>

</template>

</dom-module>

Page 39: Polymer 1.0 par Cyril Balit - JUG Orléans

2 types

● [[]] : one-way bindings ou host to child● {{}} : automatic binding (one way or two way selon la configuration)

Page 40: Polymer 1.0 par Cyril Balit - JUG Orléans

Pour faire du 2 way databinding

● utiliser {{}}● La propriété fille doit être configurée avec un flag notify:true● La propriété fille ne doit pas être configurée avec un flag readOnly

Page 41: Polymer 1.0 par Cyril Balit - JUG Orléans

Les expressions

● Références à une proriétés● Peut utiliser !● Compute bindings

<dom-module id="x-custom">

<template>

<div hidden="{{!enabled}}"></div>

<span>{{computeFullName(first, last)}}</span>

</template>

</dom-module>

<script>

Polymer({

is: 'x-custom',

properties: {

first: String,

last: String

},

computeFullName: function(first, last) {

return first + ' ' + last;

}

Page 42: Polymer 1.0 par Cyril Balit - JUG Orléans

Helpers: dom-repeat

● itérer sur une liste● peut être filtré et trié

<dom-module id="employee-list">

<template>

<template is="dom-repeat" items="{{employees}}">

<div># <span>{{index}}</span></div>

<div>First name: <span>{{item.first}}</span></div>

</template>

</template>

</dom-module>

Page 43: Polymer 1.0 par Cyril Balit - JUG Orléans

Helpers: dom-if

● Template conditionnel<dom-module id="user-page">

<template>

<template>

All users will see this:

<div>{{user.name}}</div>

<template is="dom-if" if="{{user.isAdmin}}">

Only admins will see this.

<div>{{user.secretAdminStuff}}</div>

</template>

</template>

</dom-module>

Page 44: Polymer 1.0 par Cyril Balit - JUG Orléans

Styling

Page 45: Polymer 1.0 par Cyril Balit - JUG Orléans

CSS et Shadow Dom

Nouveau sélécteurs● :host● ::content● Cross scope Styiling

○ ::shadow et /deep/

source :http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom-201/

Page 46: Polymer 1.0 par Cyril Balit - JUG Orléans

Custom CSS properties/mixins

compatible avec le futur standards W3C

<dom-module id="my-button">

<template>

<style>

.title {

color: var(--my-toolbar-title-color,red);

}

:host {

@apply(--my-button-theme);

}

</style>

</template>

</dom-module>

<style>

.submit {

--my-toolbar-title-color: green;

}

.special {

--my-button-theme:{

padding:20px;

backgound-color:red;

}

</style>

<my-button class="submit"></my-button>

<my-button class="special"></my-button>

Page 47: Polymer 1.0 par Cyril Balit - JUG Orléans

Cas réels

Page 48: Polymer 1.0 par Cyril Balit - JUG Orléans

Une mire d’authentification pré-connectée

<frf-login>

<frf-login loginurl=“/login"

logouturl=“/logout">

<span>C’est qui ?</span>

</frf-login>

Page 49: Polymer 1.0 par Cyril Balit - JUG Orléans

Architecture

frf-login

frf-user

frf-login-form

frf-confirm

html5-paper-input

frf-login-service

core-ajax

Page 50: Polymer 1.0 par Cyril Balit - JUG Orléans

Une implémentation du composant google-recaptcha

<re-captcha>

<re-captcha sitekey="yoursitekey"

></re-captcha>

source: https://github.com/cbalit/re-captcha

Page 51: Polymer 1.0 par Cyril Balit - JUG Orléans

LES OUTILS

Page 52: Polymer 1.0 par Cyril Balit - JUG Orléans

Bower

bower install --save Polymer/polymer#^1.0.0

bower install --save PolymerElements/iron-elements

bower install --save PolymerElements/paper-elements

bower install --save PolymerElements/gold-elements

Page 53: Polymer 1.0 par Cyril Balit - JUG Orléans

Yeoman

npm install -g generator-polymer

yo polymer (polymer:app)

yo polymer:el

yo polymer:seed

yo polymer:gh

Page 54: Polymer 1.0 par Cyril Balit - JUG Orléans

Web Components Tester

npm install -g web-component-tester

wtc

OU

bower install Polymer/web-component-tester --save

<script src="../../web-component-tester/browser.js"></script>

Page 55: Polymer 1.0 par Cyril Balit - JUG Orléans

An exemple

https://github.com/cbalit/re-captcha

Page 56: Polymer 1.0 par Cyril Balit - JUG Orléans

Et aussi

● PolyUp● PolyServe● PolyLint● Vulcanize● Crisper● PolyBuild● ...

Page 57: Polymer 1.0 par Cyril Balit - JUG Orléans

Merci ! Cyril Balit@cbalit