De 0 a Polymer

85
De 0 a Polymer +Israel Blancas @iblancasa GDG Granada

Transcript of De 0 a Polymer

Page 1: De 0 a Polymer

De 0 a Polymer

+Israel Blancas@iblancasa

GDG Granada

Page 2: De 0 a Polymer

Israel Blancas

@iblancasa

Software Engineer at Real-Time InnovationsGoogle Developer Group organizer

Page 3: De 0 a Polymer

GDG Granada

Page 4: De 0 a Polymer

Modular programming

GDG Granada

Page 5: De 0 a Polymer

AsepticConsistentFlexibleProduction

GDG Granada

Page 6: De 0 a Polymer

Quality Speed

GDG Granada

Page 7: De 0 a Polymer

Quality Speed

GDG Granada

Page 8: De 0 a Polymer

GDG Granada

Page 9: De 0 a Polymer
Page 10: De 0 a Polymer

GDG Granada

Page 11: De 0 a Polymer

GDG Granada

Page 12: De 0 a Polymer

Web Components are low-level primitives that let you define your own HTML Elements.

GDG Granada

Page 13: De 0 a Polymer

Template

Shadow DOM

Custom Elements

HTML Imports

native client-side templating

scoping, composition

define new HTML/DOM

loading web components

GDG Granada

Page 14: De 0 a Polymer

Primitives are designed so we can build libraries on top of them.

GDG Granada

Page 15: De 0 a Polymer

So what is Polymer?

GDG Granada

Page 16: De 0 a Polymer

Polymer is nota framework

GDG Granada

Page 17: De 0 a Polymer

Existing Frameworks

Applications

Web Platform

Web Components built with Polymer (or not)

GDG Granada

Page 18: De 0 a Polymer

Polymer is nota framework

Sure?GDG Granada

Page 19: De 0 a Polymer

Over 3M pagesGDG Granada

Page 20: De 0 a Polymer

GDG Granada

Page 21: De 0 a Polymer

GDG Granada

Page 22: De 0 a Polymer

GDG Granada

Page 23: De 0 a Polymer

GDG Granada

Page 24: De 0 a Polymer

GDG Granada

Page 25: De 0 a Polymer

GDG Granada

Page 26: De 0 a Polymer

Let’s buildan element!

Image by Gloria Viganò for the Noun Project

GDG Granada

Page 27: De 0 a Polymer

Hey user! Something awesome happened!

GDG Granada

Page 28: De 0 a Polymer

GDG Granada

Install the tools

Page 29: De 0 a Polymer

GDG Granada

NodeJS and NPM

Page 30: De 0 a Polymer

GDG Granada

bower and polymer-clinpm install -g <package>

Page 31: De 0 a Polymer

xHey user! Something awesome happened!

<alert-banner>GDG Granada

Page 32: De 0 a Polymer

polymer init

GDG Granada

Page 33: De 0 a Polymer

Select “element - A blank element template”

GDG Granada

Page 34: De 0 a Polymer

Element name: alert-banner

GDG Granada

Page 35: De 0 a Polymer

Element name: alert-banner

Brief description of the element: Hacklab example

GDG Granada

Page 36: De 0 a Polymer

bower_componentsdemotestalert-banner.htmlbower.jsonindex.htmlREADME.md

GDG Granada

Page 37: De 0 a Polymer

GDG Granada

Page 38: De 0 a Polymer

alert-banner.html

<dom-module id=“alert-banner"> <template> </template> <script> Polymer({ is: ‘alert-banner' }); </script></dom-module>

<link rel=“import” href=“../polymer/polymer.html”>

GDG Granada

Page 39: De 0 a Polymer

alert-banner.html

<dom-module id=“alert-banner"> <template> </template> <script> Polymer({ is: ‘alert-banner' }); </script></dom-module>

<link rel=“import” href=“../polymer/polymer.html”>

Import all of yourdependencies

GDG Granada

Page 40: De 0 a Polymer

alert-banner.html

<dom-module id=“alert-banner"> <template> </template> <script> Polymer({ is: ‘alert-banner' }); </script></dom-module>

<link rel=“import” href=“../polymer/polymer.html”>

A container for yourelement definition

GDG Granada

Page 41: De 0 a Polymer

alert-banner.html

<dom-module id=“alert-banner"> <template> </template> <script> Polymer({ is: ‘alert-banner' }); </script></dom-module>

Local DOM is the DOMan elements is in charge of creating and managing

<link rel=“import” href=“../polymer/polymer.html”>

GDG Granada

Page 42: De 0 a Polymer

Shadow DOM

GDG Granada

Page 43: De 0 a Polymer

Shadow DOM || “Shady DOM”

GDG Granada

Page 44: De 0 a Polymer

Shadow DOM || “Shady DOM” == Local DOM

GDG Granada

Page 45: De 0 a Polymer

alert-banner.html

<dom-module id=“alert-banner"> <template> </template> <script> Polymer({ is: ‘alert-banner' }); </script></dom-module>

Local DOM is the DOMan elements is in charge of creating and managing

<link rel=“import” href=“../polymer/polymer.html”>

GDG Granada

Page 46: De 0 a Polymer

alert-banner.html

<dom-module id=“alert-banner"> <template> <style> .alert { background: blue; color: white; } </style> <div class=“alert”> Hey user! Something awesome happened! </div> </template> <script> Polymer({ is: ‘alert-banner' }); </script></dom-module>

<link rel=“import” href=“../polymer/polymer.html”>Hey user! Something awesome happened! xHey user! Something awesome happened!

GDG Granada

Page 47: De 0 a Polymer

alert-banner.html

<dom-module id=“alert-banner"> <template> <style> .alert { background: blue; color: white; } </style> <div class=“alert”> Hey user! Something awesome happened! </div> </template> <script> Polymer({ is: ‘alert-banner' }); </script></dom-module>

<link rel=“import” href=“../polymer/polymer.html”>

Define yourprototype

GDG Granada

Page 48: De 0 a Polymer

<body unresolved> <nav> <header> <ul> <li><a href="#">About us</a></li> <li><a href="#">Make a reservation</a></li> <li><a href="#">Contact</a></li> </ul> </header> </nav> <main> <h1 class="logo">Polymer!</h1> <alert-banner></alert-banner> <section> <article class="top-story"> <img src="headline.jpg"/> <p>Lorem ipsum dolor sit amet…</p> </article> <article class="breaking-news"> <img src="breaking.jpg" alt="Important new images" /> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit...</p> </article> </section> </main></body>

GDG Granada

Page 49: De 0 a Polymer

<!doctype html> <html lang="es"> <head> <title>Hacklab</title> <script src="bower_components/webcomponentsjs/webcomponents-lite.min.js"> </script> <link rel="import" href="alert-banner.html"> </head> <body> <alert-banner></alert-banner> </body></html>

GDG Granada

Page 50: De 0 a Polymer

Hey user! Something awesome happened!

GDG Granada

Page 51: De 0 a Polymer

alert-banner.html

<dom-module id=“alert-banner"> <template> <style> .alert { background: blue; color: white; } </style> <div class=“alert”> Hey user! Something awesome happened! </div> </template> <script> Polymer({ is: ‘alert-banner' }); </script></dom-module>

<link rel=“import” href=“../polymer/polymer.html”>

Replace hard-coded data

GDG Granada

Page 52: De 0 a Polymer

alert-banner.html

<dom-module id=“alert-banner"> <template> <style> .alert { background: blue; color: white; } </style> <div class=“alert”> <content select=“.message”></content> </div> </template> <script> Polymer({ is: ‘alert-banner' }); </script></dom-module>

<link rel=“import” href=“../polymer/polymer.html”>

With content elements!

GDG Granada

Page 53: De 0 a Polymer

Light DOM - The world outsideyour component’s Local DOM

GDG Granada

Page 54: De 0 a Polymer

alert-banner.html

<dom-module id=“alert-banner"> <template> <style> .alert { background: blue; color: white; } </style> <div class=“alert”> <content select=“.message”></content> </div> </template> <script> Polymer({ is: ‘alert-banner' }); </script></dom-module>

<link rel=“import” href=“../polymer/polymer.html”>

Select content withCSS selectors

GDG Granada

Page 55: De 0 a Polymer

<body unresolved> <nav> <header> <ul> <li><a href="#">About us</a></li> <li><a href="#">Make a reservation</a></li> <li><a href="#">Contact</a></li> </ul> </header> </nav> <main> <h1 class="logo">Polymer!</h1> <alert-banner></alert-banner> <section> <article class="top-story"> <img src="headline.jpg"/> <p>Lorem ipsum dolor sit amet…</p> </article> <article class="breaking-news"> <img src="breaking.jpg" alt="Important new images" /> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit...</p> </article> </section> </main></body>

GDG Granada

Page 56: De 0 a Polymer

<body unresolved> <nav> <header> <ul> <li><a href="#">About us</a></li> <li><a href="#">Make a reservation</a></li> <li><a href="#">Contact</a></li> </ul> </header> </nav> <main> <h1 class="logo">Polymer!</h1> <alert-banner> <span class=“message”> Success! Your first component! </span> </alert-banner> <section> <article class="top-story"> <img src="headline.jpg"/> <p>Lorem ipsum dolor sit amet…</p> </article> <article class="breaking-news"> <img src="breaking.jpg" alt="Important new images" /> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit...</p> </article> </section> </main></body>

GDG Granada

Page 57: De 0 a Polymer

<body unresolved> <nav> <header> <ul> <li><a href="#">About us</a></li> <li><a href="#">Make a reservation</a></li> <li><a href="#">Contact</a></li> </ul> </header> </nav> <main> <h1 class="logo">Polymer!</h1> <alert-banner> <span class=“message”> Success! Your first component! </span> </alert-banner> <section> <article class="top-story"> <img src="headline.jpg"/> <p>Lorem ipsum dolor sit amet…</p> </article> <article class="breaking-news"> <img src="breaking.jpg" alt="Important new images" /> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit...</p> </article> </section> </main></body>

Matching class

GDG Granada

Page 58: De 0 a Polymer

Success! Your first component!

GDG Granada

Page 59: De 0 a Polymer

ElementsBuilding blocks for a better web

GDG Granada

Page 60: De 0 a Polymer

There’s an element for that!

GDG Granada

Page 61: De 0 a Polymer

https://beta.webcomponents.org/collection/Polymer/elements

GDG Granada

Page 62: De 0 a Polymer

GDG Granada

Page 63: De 0 a Polymer

ApplicationsCombining elements into something great

GDG Granada

Page 64: De 0 a Polymer

Create or reuse elements in any app

GDG Granada

Page 65: De 0 a Polymer

GDG Granada

Page 66: De 0 a Polymer

App-wide Theming

#303f9f

CSS custom properties

--dark-primary-color

--light-primary-color

--accent-color

--primary-text-color

#303f9f--dark-primary-color

--light-primary-color

--accent-color

--primary-text-color

GDG Granada

Page 67: De 0 a Polymer

Production-ising Apps

GDG Granada

Page 68: De 0 a Polymer

Build process out of the box

GDG Granada

Page 69: De 0 a Polymer
Page 70: De 0 a Polymer

What are the Progressive Web Apps?

Page 71: De 0 a Polymer

Progressive Web App uses modern web platform capabilities to deliver an app-like user experience

Page 72: De 0 a Polymer

Instant loading

FastPush notifications

Add to home screen

Secure Responsive

Page 73: De 0 a Polymer
Page 74: De 0 a Polymer

Android App Mobile Web

$3.75

$0.07

Housing.com: User Acquisition Costs

Page 75: De 0 a Polymer
Page 76: De 0 a Polymer
Page 77: De 0 a Polymer
Page 78: De 0 a Polymer
Page 79: De 0 a Polymer

https://pwa.rocks/

Page 80: De 0 a Polymer

https://developers.google.com/web/progressive-web-apps/

Page 81: De 0 a Polymer

Polymer Starter Kit

Web app scaffolding, via web components.

goo.gl/qy16Jk

Page 82: De 0 a Polymer

GDG GranadaGDG Granada

Page 83: De 0 a Polymer

GDG Granada

Page 84: De 0 a Polymer

polymer-project.org

GDG Granada

Page 85: De 0 a Polymer

Thank you :)Questions?

+Israel Blancas@iblancasa

GDG Granada