codemotion rome 2016 - polymer

56
@granze Polymer is production ready. How about you? Maurizio Mangione ROME 18-19 MARCH 2016

Upload: maurizio-mangione

Post on 15-Apr-2017

175 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Codemotion Rome 2016 - Polymer

@granze

Polymer is production ready. How about you? Maurizio Mangione

ROME 18-19 MARCH 2016

Page 2: Codemotion Rome 2016 - Polymer

@granze

@Granze

Google Developers Expert

Milano JS Founder

Page 3: Codemotion Rome 2016 - Polymer

@granze

What is this talk about?

Page 4: Codemotion Rome 2016 - Polymer

@granze

I ♥ Polymer

Page 5: Codemotion Rome 2016 - Polymer

@granze

Web Components

Page 6: Codemotion Rome 2016 - Polymer

@granze

Custom Elements<my-component></my-component>

<x-element attribute="test"></x-element>

Page 7: Codemotion Rome 2016 - Polymer

@granze

HTML Imports<link rel="import" href="path/to/component.html">

Page 8: Codemotion Rome 2016 - Polymer

@granze

Templates<template id="template">

<div>

<h1>Web Components</h1>

<img src="http://webcomponents.org/img/logo.svg">

</div>

</template>

Page 9: Codemotion Rome 2016 - Polymer

@granze

Shadow DOMvar progressBar = document.createElement('div');

var shadowRoot = progressBar.attachShadow({mode:

'closed'});

var template = document.getElementById('template');

shadowRoot.appendChild(template).content.cloneNode

(true));

V1

Page 10: Codemotion Rome 2016 - Polymer

@granze

webcomponents-lite.js

Page 11: Codemotion Rome 2016 - Polymer

@granze

Standards

Page 12: Codemotion Rome 2016 - Polymer

@granze

“Always bet on Javascript”

Brendan Eich

Page 13: Codemotion Rome 2016 - Polymer

@granze

“Always bet onthe Web Platform”

Me

Page 14: Codemotion Rome 2016 - Polymer

@granze

Page 15: Codemotion Rome 2016 - Polymer

@granze

Let’s build an App

Page 16: Codemotion Rome 2016 - Polymer

@granze

1 Create reusable elements

● Start with the seed-element

● Use Polyserve

● Publish via Bower

Page 17: Codemotion Rome 2016 - Polymer

@granze

<seed-element>

● Element boilerplate

● Test ready

● Auto generated docs

Page 18: Codemotion Rome 2016 - Polymer

@granze

Page 19: Codemotion Rome 2016 - Polymer

@granze

Visual and non-visual elements

Page 20: Codemotion Rome 2016 - Polymer

@granze

2 Put things together

Page 21: Codemotion Rome 2016 - Polymer

@granze

How elements talk to each other

API API

<child-component><child-component>

Page 22: Codemotion Rome 2016 - Polymer

@granze

<g-tag my-attr="true">Polymer({

is: 'g-tag',

properties: {

myAttr: {

type: Boolean

}

}

});

Page 23: Codemotion Rome 2016 - Polymer

@granze

Mediator Pattern

API API

BUSINESS LOGIC

wrapper

<child-component><child-component>

Page 24: Codemotion Rome 2016 - Polymer

@granze

The wrapper

Page 25: Codemotion Rome 2016 - Polymer

@granze

<x-app><link rel="import" href="polymer/polymer.html">

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

<template>

<!-- add elements here -->

</template>

<script>

Polymer({ is: 'x-app' });

</script>

</dom-module>

Page 26: Codemotion Rome 2016 - Polymer

@granze

index.html<!DOCTYPE html>

<html lang="en">

<head>

<link rel="import" href="x-app/x-app.html">

</head>

<body>

<x-app></x-app>

</body>

</html>

Page 27: Codemotion Rome 2016 - Polymer

@granze

<template is="dom-bind"><body>

<template id="app" is="dom-bind">

<a href="#" on-click="sayHello">Click me!</a>

</template>

<script>

const app = document.querySelector('#app');

app.sayHello = () => { console.log('Hello') };

</script>

</body>

Page 28: Codemotion Rome 2016 - Polymer

@granze

Should I use Mediator Pattern?

Page 29: Codemotion Rome 2016 - Polymer

@granze

Use what you like the most

● Events (fire, listen)

● Flux-like architecture

● Your own solution

Page 30: Codemotion Rome 2016 - Polymer

@granze

3 Testing

Page 31: Codemotion Rome 2016 - Polymer

@granze

Web component tester

> npm i -g web-component-tester

> wct

Page 32: Codemotion Rome 2016 - Polymer

@granze

Web component tester

Page 33: Codemotion Rome 2016 - Polymer

@granze

4 The build step

Page 34: Codemotion Rome 2016 - Polymer

@granze

Tools of the trade

● Vulcanize

● Crisper

● NPM scripts or Gulp

Page 35: Codemotion Rome 2016 - Polymer

@granze

Vulcanize> vulcanize target.html > build.html

Page 36: Codemotion Rome 2016 - Polymer

@granze

Crisper> cat index.html | crisper -h build.html -j build.js

Page 37: Codemotion Rome 2016 - Polymer

@granze

So, what I need?

● Elements

● Let them talk to each other

● Test all the things

● Build/deploy

Page 38: Codemotion Rome 2016 - Polymer

@granze

Polymer Starter Kit

Page 39: Codemotion Rome 2016 - Polymer

@granze

PSK’s Hot features

● Offline support

● Complete build chain

● Responsive app layout

Page 40: Codemotion Rome 2016 - Polymer

@granze

Yeoman> npm i -g yo

> npm install -g generator-polymer

> yo polymer

Page 41: Codemotion Rome 2016 - Polymer

@granze

Ok sold, but is not so easy...

Page 42: Codemotion Rome 2016 - Polymer

@granze

Page 43: Codemotion Rome 2016 - Polymer

@granze

You can win!One component at a time

Page 44: Codemotion Rome 2016 - Polymer

@granzeCredits: http://nocamels.com/2014/06/israeli-researchers-create-trojan-horse-of-chemotherapy

Page 45: Codemotion Rome 2016 - Polymer

@granze

I don’t want to add more stuff to my legacy app

Page 46: Codemotion Rome 2016 - Polymer

@granze

Think about jQuery plugins

Page 47: Codemotion Rome 2016 - Polymer

@granze

Useful resources

Page 48: Codemotion Rome 2016 - Polymer

@granze

Community

http://polymer-slack.herokuapp.com

Page 49: Codemotion Rome 2016 - Polymer

@granze

Polycasts

Page 50: Codemotion Rome 2016 - Polymer

@granze

Page 51: Codemotion Rome 2016 - Polymer

@granze

Awesome Polymer

Page 52: Codemotion Rome 2016 - Polymer

@granze

Should you build your appentirely with Web Components?

Page 53: Codemotion Rome 2016 - Polymer

@granze

Is up to you!

Page 54: Codemotion Rome 2016 - Polymer

@granze

Polymer is good because

● Built on standards

● Freedom of choice

● Production ready...

Page 55: Codemotion Rome 2016 - Polymer

@granze

...how about you?