SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
PolymerPolymer ou comment AngularJS 2 est devenu ringard avant sa sortie
@XavMarin
https://github.com/Giwi
2
Petite histoire
Client lourds :
● Assemblage de Widgets
● Encapsulation / réutilisation
3
Client légers :
● HTML/CSS/Js ne gèrent pas les widgets, la page est la brique
de base
Petite histoire
4
GWT utilise le paradigme de développement du client lourd
● Widgets, propriétés, événements
Petite histoire
5
On est en 2016, on fait des Single Page App
C’est plus riche mais les faire sans widgets, c’est risqué!
● GWT
● React
● AngularJS 1 et 2
● Backbone
● Meteor
● ...
Petite histoire
6
Rappel sur la forge Javascript
Javascript Java
Gestion de dépendance
Construction / packaging
Scaffolding
7
Imaginons le bouton Google +
Les Web Components
<!-- Place this tag where you want the +1 button to render. -->
<div class="g-plusone" data-annotation="inline" data-width="300"></div>
<!-- Place this tag after the last +1 button tag. -->
<script type="text/javascript">
(function() {
var po = document.createElement('script');
po.type = 'text/javascript';
po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(po, s);
})();
</script>
8
Ce serai plus sympa de taper :
<g:plusone></g:plusone>
Les Web Components
9
en fait c’est déjà possible :
<script type="text/javascript" src="https://apis.google.com/js/plusone.js"
></script>
<g:plusone></g:plusone>
Google a créé une “directive” avec javascript pour émuler un
composant
● Approche du type AngularJS
● Respecte l’esprit des futurs standards
● Marche avec les navigateurs actuels … non standards
Les Web Components
10
Avec la plupart des frameworks JS d’aujourd’hui, on peut déjà
créer ces composants
Le W3C essayer de standardiser cette approche
● support natif dans les navigateurs
● permettant la ré-utilisabilité
● mettra des années (décennies) à accoucher (cf HTML5)
Les Web Components
11
Les 3 principes du Web Component :
● Template
● canevas de mise en page
● aujourd’hui on utilise des balises non interprétées
● Shadow DOM
● le navigateur masque le sous-arbre du DOM
● déjà utilisé aujourd’hui par les navigateurs pour leurs besoins
internes
● Custom elements
● widget réutilisable associant template et comportement
● balise HTML custom et héritage
● Imports : <link rel="import" href="goodies.html">
Les Web Components
12
Les Web Components
13
Les Web Components
14
J’ai lu dans 01Informatique
ou Marie-Claire, je ne sais plus,
que le HTML6 serait du
Web Component.
Super, mais comment qu’on fait du
Web Component aujourd’hui avant
tout le monde?
Polymer
15
Un projet Google
● Présenté au Google I/O de 2013
● Nouveau framework Web
● bon hein, comme toutes les semaines il y en a un autre…
● Construit dans l’esprit Web Component
Polymer
16
Une approche modulaire
Polymer
17
Principes
● Tout est composant
● Pragmatisme extrême
● Boilerplate c’est le mal
● Tout ce qui est dupliqué doit être refactoré sous forme de
composant
– soit géré par Polymer
– soit ajouté au navigateur
● Modulaire
● On ne charge que ce qu’on a besoin :
– tu veux du plolyfill ? importe polymer-all/platform/platform.js
– tu veux faire de l’Ajax? importe PolymerElements/iron-ajax
– tu veux faire du material-design, importe
PolymerElements/paper-elements
Polymer
18
●
Bon, ok, AngularJS 1.x c’est super cool
●
Transpilable de ES6 -> ES5
●
Angular2 apporte TypeScript -> Transpilation !
●
on peut toujours faire du JS
<!doctype html>
<html>
<head>
<title>Directive Test</title>
<script type="text/javascript" src="jquery.min.js"
></script>
<script type="text/javascript"
src="angular.min.js"></script>
<script type="text/javascript"
src="mydirectives.js"></script>
</head>
<body ng-app>
<div test-elem></div>
</body>
</html>
Et AngularJS ?
19
● Librairies JS lourdes
● Dépendance JQuery
● quoique ce n’est pas tout
à fait vrai ;)
● Assez verbeux
● Angular 1 en fin de vie
● TypeScript : un langage
fortement typé traduit en
javascript?
● pas sur que la
communauté l’adopte
Et AngularJS ?
import {Component} from 'angular2/core';
import {Todo} from './todo';
import {TodoList} from './todo_list';
import {TodoForm} from './todo_form';
@Component({
selector: 'todo-app',
template: `
<h2>Todo</h2>
<span>{{remaining}} of {{todos.length}} remaining</span>
[ <a (click)="archive()">archive</a> ]
<todo-list [todos]="todos"></todo-list>
<todo-form (newTask)="addTask($event)"></todo-form>`,
styles:['a { cursor: pointer; cursor: hand; }'],
directives: [TodoList, TodoForm]
})
import {Component} from 'angular2/core';
import {Todo} from './todo';
import {TodoList} from './todo_list';
import {TodoForm} from './todo_form';
@Component({
selector: 'todo-app',
template: `
<h2>Todo</h2>
<span>{{remaining}} of {{todos.length}} remaining</span>
[ <a (click)="archive()">archive</a> ]
<todo-list [todos]="todos"></todo-list>
<todo-form (newTask)="addTask($event)"></todo-form>`,
styles:['a { cursor: pointer; cursor: hand; }'],
directives: [TodoList, TodoForm]
})
20
On veut du code !!!
Polymer
21
<!-- 1. Polyfill Web Components support for older browsers -->
<script src="bower_components/webcomponentsjs/webcomponents-
lite.min.js"></script>
<!-- 2. Import element -->
<link rel="import" href="bower_components/google-map/google-
map.html">
<!-- 3. Use element -->
<google-map latitude="47.205403" longitude="-1.5631069"
zoom="17"></google-map>
Polymer
22
<dom-module name="x-my-module">
<template>
<style>
@host { /*...*/ }
</style>
<div id="box">
<h1>Bonjour les gens !</h1>
<p><content></content></p>
</div>
</template>
</dom-module>
<script>
Polymer({ is: 'x-my-module'});
</script>
Polymer
23
<!DOCTYPE html>
<html>
<head>
<!-- 1. Load Polymer -->
<script
src="bower_components/webcomponentsjs/webcomponents.js"></script>
<!-- 2. Load a component -->
<link rel="import" href="x-my-module.html">
</head>
<body>
<!-- 3. Declare the component -->
<x-my-mudule>Comment ça va?</x-my-module>
</body>
</html>
Polymer
Bonjour les gens !
Comment ça va?
24
Bonjour les gens !
Comment ça va?
Click me!
Your name here ...
Polymer
<dom-module id="x-my-module">
<template>
<style> /.../ </style>
<div id="box">
<h1>{{greet}}</h1>
<p><content></content></p>
<div>
<button on-click="alertHello">Click me!</button>
</div>
<input is="iron-input" bind-value="{{whoami}}"
placeholder="Your name here..." />
</div>
</template>
</dom-module>
<script>
Polymer({
is: 'x-my-module',
properties: {
whoami: { type: String, value: "DSIday", notify: true},
greet: { type: String, computed: 'doGreet(whoami)' }
},
alertHello: function() { alert("Bonjour" + this.whoami);},
doGreet: function(who) { return "Bonjour " + who}
});
</script>
25
<polymer-element name="user-gravatar" attributes="email">
<template>
<img src="https://secure.gravatar.com/avatar/{{gid}}" />
</template>
<script>
Polymer('user-gravatar', {
ready: function() {
this.gid = md5(this.email);
}
});
</script>
</polymer>
app.directive('user-gravatar', ['md5', function() {
return {
restrict: 'E',
link: function(scope, element, attrs) {
scope.gid = md5(attrs.email);
},
template: '<img src="https://gravatar.com/avatar/{{gid}}" />'
};
}]);
Comparaison avec Angular
Polymer = déclaration
AngularJS = programmation
26
Feature Polymer Angular
Templates x x
Web Components x
Material Components x
Data Binding x x
Filters x x
Animations x x
Events Handling x x
Touch and Gestures x
Routing librairie tierce x
AJAX / REST x x
Comparaison avec Angular
27
Le catalogue des éléments
28
Le catalogue des éléments
29
Le catalogue des éléments
30
Iron-Elements
31
Iron-Elements : Iron-Ajax
32
http://www.google.com/design/spec/material-design/
Paper-Elements
Du Material Design !!!!! chouette
● Responsive Web Design
● Best practices pour les designers
● Comment faire de belles applications même si on a aucun
goût...
● Bon, tous les sites vont se ressembler (cf Bootstrap, Flat
design, etc …)
33
Paper-Elements
34
https://www.polymer-project.org/apps/topeka/
Paper-Elements : Paper-toolbar
35
Gold-Elements
36
Nouveau paradigme
Le webcomponent est la nouvelle brique de
base d'un développement web
Polymer est construit autour de ce paradigme
37
1 ligne 2 ligne 3 ligne 4 ligne
0
2
4
6
8
10
12
1 colonne
2 colonne
3 colonne
« Si vous avez compris ce que je viens
de vous dire, c’est que je me suis
probablement mal exprimé »
A. Greenspan

Mais conteúdo relacionado

Mais procurados

ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...Horacio Gonzalez
 
ASP.NET MVC 5 et Web API 2
ASP.NET MVC 5 et Web API 2ASP.NET MVC 5 et Web API 2
ASP.NET MVC 5 et Web API 2Microsoft
 
Fastlane snapshot presentation
Fastlane snapshot presentationFastlane snapshot presentation
Fastlane snapshot presentationCocoaHeads France
 
Vue, j’avais pas vu !
Vue, j’avais pas vu !Vue, j’avais pas vu !
Vue, j’avais pas vu !Bruno Bonnin
 
Vue.js, même un dev java peut en faire !
Vue.js, même un dev java peut en faire !Vue.js, même un dev java peut en faire !
Vue.js, même un dev java peut en faire !Bruno Bonnin
 
Angular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUGAngular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUGWilliam Marques
 
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !Bruno Bonnin
 
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads France
 
Création d’application facile en html via node-webkit
Création d’application facile en html via node-webkitCréation d’application facile en html via node-webkit
Création d’application facile en html via node-webkitIsenDev
 
RennesJS Talk webperf by Dareboost
RennesJS Talk webperf by DareboostRennesJS Talk webperf by Dareboost
RennesJS Talk webperf by DareboostDamien Jubeau
 
Angular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium VersusmindAngular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium VersusmindPhilippe Didiergeorges
 
Quoi de neuf dans ASP.NET MVC 4
Quoi de neuf dans ASP.NET MVC 4Quoi de neuf dans ASP.NET MVC 4
Quoi de neuf dans ASP.NET MVC 4Microsoft
 
Symposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorSymposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorArthurMaroulier
 
Soirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVCSoirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVCSOAT
 
ASP.NET from Zero to Hero
ASP.NET from Zero to HeroASP.NET from Zero to Hero
ASP.NET from Zero to HeroCellenza
 
Comment réussir son projet en Angular 1.5 ?
Comment réussir son projet en Angular 1.5 ?Comment réussir son projet en Angular 1.5 ?
Comment réussir son projet en Angular 1.5 ?Maxime Bernard
 
Geek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.jsGeek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.jsOLBATI
 
Débuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJSDébuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJSFrédéric DUPERIER
 
Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Yves-Emmanuel Jutard
 

Mais procurados (20)

ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
 
ASP.NET MVC 5 et Web API 2
ASP.NET MVC 5 et Web API 2ASP.NET MVC 5 et Web API 2
ASP.NET MVC 5 et Web API 2
 
Fastlane snapshot presentation
Fastlane snapshot presentationFastlane snapshot presentation
Fastlane snapshot presentation
 
Vue, j’avais pas vu !
Vue, j’avais pas vu !Vue, j’avais pas vu !
Vue, j’avais pas vu !
 
Vue.js, même un dev java peut en faire !
Vue.js, même un dev java peut en faire !Vue.js, même un dev java peut en faire !
Vue.js, même un dev java peut en faire !
 
Angular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUGAngular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUG
 
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
 
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
 
Création d’application facile en html via node-webkit
Création d’application facile en html via node-webkitCréation d’application facile en html via node-webkit
Création d’application facile en html via node-webkit
 
RennesJS Talk webperf by Dareboost
RennesJS Talk webperf by DareboostRennesJS Talk webperf by Dareboost
RennesJS Talk webperf by Dareboost
 
Angular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium VersusmindAngular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium Versusmind
 
Quoi de neuf dans ASP.NET MVC 4
Quoi de neuf dans ASP.NET MVC 4Quoi de neuf dans ASP.NET MVC 4
Quoi de neuf dans ASP.NET MVC 4
 
Symposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorSymposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme Meteor
 
Jquery Mobile vs Twitter Bootstrap
Jquery Mobile vs Twitter BootstrapJquery Mobile vs Twitter Bootstrap
Jquery Mobile vs Twitter Bootstrap
 
Soirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVCSoirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVC
 
ASP.NET from Zero to Hero
ASP.NET from Zero to HeroASP.NET from Zero to Hero
ASP.NET from Zero to Hero
 
Comment réussir son projet en Angular 1.5 ?
Comment réussir son projet en Angular 1.5 ?Comment réussir son projet en Angular 1.5 ?
Comment réussir son projet en Angular 1.5 ?
 
Geek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.jsGeek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.js
 
Débuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJSDébuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJS
 
Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014
 

Destaque

Polymer, A Web Component Polyfill Library
Polymer, A Web Component Polyfill LibraryPolymer, A Web Component Polyfill Library
Polymer, A Web Component Polyfill Librarynaohito maeda
 
Devoxx France - Web Components, Polymer et Material Design
Devoxx France -  Web Components, Polymer et Material DesignDevoxx France -  Web Components, Polymer et Material Design
Devoxx France - Web Components, Polymer et Material DesignHoracio Gonzalez
 
2014 03-25 - GDG Nantes - Web Components avec Polymer
2014 03-25 - GDG Nantes - Web Components avec Polymer2014 03-25 - GDG Nantes - Web Components avec Polymer
2014 03-25 - GDG Nantes - Web Components avec PolymerHoracio Gonzalez
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web ComponentsFu Cheng
 
Polymer and web component
Polymer and web componentPolymer and web component
Polymer and web componentImam Raza
 
Tech talk polymer
Tech talk polymerTech talk polymer
Tech talk polymerYanuar W
 
Material Design - do smartphone ao desktop
Material Design - do smartphone ao desktopMaterial Design - do smartphone ao desktop
Material Design - do smartphone ao desktopHillary Sousa
 
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Horacio Gonzalez
 
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Chrome Dev Summit Highlights (NYC GDG Dec 2013)Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Chrome Dev Summit Highlights (NYC GDG Dec 2013)Nitya Narasimhan
 
Polymer and Firebase: Componentizing the Web in Realtime
Polymer and Firebase: Componentizing the Web in RealtimePolymer and Firebase: Componentizing the Web in Realtime
Polymer and Firebase: Componentizing the Web in RealtimeJuarez Filho
 
Apresentação Google I/O Extended Vitória
Apresentação Google I/O Extended VitóriaApresentação Google I/O Extended Vitória
Apresentação Google I/O Extended VitóriaFabiano Monte
 
Introduction To Dart (GDG NY Jan 2014 Meetup)
Introduction To Dart (GDG NY Jan 2014 Meetup)Introduction To Dart (GDG NY Jan 2014 Meetup)
Introduction To Dart (GDG NY Jan 2014 Meetup)Nitya Narasimhan
 
Polymer Elements: Tudo que você precisa saber para criar a web
Polymer Elements: Tudo que você precisa saber para criar a webPolymer Elements: Tudo que você precisa saber para criar a web
Polymer Elements: Tudo que você precisa saber para criar a webBeto Muniz
 
Um salve para evolução! construindo uma nova web com polymer
Um salve para evolução! construindo uma nova web com  polymerUm salve para evolução! construindo uma nova web com  polymer
Um salve para evolução! construindo uma nova web com polymerMarcus Silva
 

Destaque (20)

Polymer, A Web Component Polyfill Library
Polymer, A Web Component Polyfill LibraryPolymer, A Web Component Polyfill Library
Polymer, A Web Component Polyfill Library
 
Web Components
Web ComponentsWeb Components
Web Components
 
Devoxx France - Web Components, Polymer et Material Design
Devoxx France -  Web Components, Polymer et Material DesignDevoxx France -  Web Components, Polymer et Material Design
Devoxx France - Web Components, Polymer et Material Design
 
2014 03-25 - GDG Nantes - Web Components avec Polymer
2014 03-25 - GDG Nantes - Web Components avec Polymer2014 03-25 - GDG Nantes - Web Components avec Polymer
2014 03-25 - GDG Nantes - Web Components avec Polymer
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web Components
 
Polymer and web component
Polymer and web componentPolymer and web component
Polymer and web component
 
Tech talk polymer
Tech talk polymerTech talk polymer
Tech talk polymer
 
Material Design - do smartphone ao desktop
Material Design - do smartphone ao desktopMaterial Design - do smartphone ao desktop
Material Design - do smartphone ao desktop
 
Material design
Material designMaterial design
Material design
 
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
 
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Chrome Dev Summit Highlights (NYC GDG Dec 2013)Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
 
Polymer and Firebase: Componentizing the Web in Realtime
Polymer and Firebase: Componentizing the Web in RealtimePolymer and Firebase: Componentizing the Web in Realtime
Polymer and Firebase: Componentizing the Web in Realtime
 
Apresentação Google I/O Extended Vitória
Apresentação Google I/O Extended VitóriaApresentação Google I/O Extended Vitória
Apresentação Google I/O Extended Vitória
 
Web components
Web componentsWeb components
Web components
 
Introduction To Dart (GDG NY Jan 2014 Meetup)
Introduction To Dart (GDG NY Jan 2014 Meetup)Introduction To Dart (GDG NY Jan 2014 Meetup)
Introduction To Dart (GDG NY Jan 2014 Meetup)
 
Polymer Elements: Tudo que você precisa saber para criar a web
Polymer Elements: Tudo que você precisa saber para criar a webPolymer Elements: Tudo que você precisa saber para criar a web
Polymer Elements: Tudo que você precisa saber para criar a web
 
O futuro do Android
O futuro do AndroidO futuro do Android
O futuro do Android
 
Workshop de Web Components
Workshop de Web ComponentsWorkshop de Web Components
Workshop de Web Components
 
Um salve para evolução! construindo uma nova web com polymer
Um salve para evolução! construindo uma nova web com  polymerUm salve para evolução! construindo uma nova web com  polymer
Um salve para evolução! construindo uma nova web com polymer
 
Angular js gtg-27feb2013
Angular js gtg-27feb2013Angular js gtg-27feb2013
Angular js gtg-27feb2013
 

Semelhante a Polymer

Paul valery et les Web components
Paul valery et les Web componentsPaul valery et les Web components
Paul valery et les Web componentsFrancois ANDRE
 
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic LadeuXebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic LadeuPublicis Sapient Engineering
 
Introduction aux web components
Introduction aux web componentsIntroduction aux web components
Introduction aux web componentsFrancois ANDRE
 
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016Tarik Zakaria Benmerar
 
Etendre le Web avec les Web Components
Etendre le Web avec les Web ComponentsEtendre le Web avec les Web Components
Etendre le Web avec les Web Componentscjolif
 
Gwt fast overview_v1
Gwt fast overview_v1Gwt fast overview_v1
Gwt fast overview_v1David Herviou
 
La boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxLa boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxChristophe Villeneuve
 
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...SEO CAMP
 
Seocamp Bayonne - JS et SEO
Seocamp  Bayonne - JS et SEOSeocamp  Bayonne - JS et SEO
Seocamp Bayonne - JS et SEOErlé Alberton
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: AngularHabib Ayad
 
Atelier autour de UWA à ParisWeb 2007
Atelier autour de UWA à ParisWeb 2007Atelier autour de UWA à ParisWeb 2007
Atelier autour de UWA à ParisWeb 2007Netvibes
 
Firefox OS de la théorie à la pratique - OSDC
Firefox OS de la théorie à la pratique - OSDCFirefox OS de la théorie à la pratique - OSDC
Firefox OS de la théorie à la pratique - OSDCChristophe Villeneuve
 
Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022
Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022
Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022Adrien Russo
 
ISCOM::HTML/CSS::session1 (20140930)
ISCOM::HTML/CSS::session1 (20140930)ISCOM::HTML/CSS::session1 (20140930)
ISCOM::HTML/CSS::session1 (20140930)Nicolas Aguenot
 
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDKGreenIvory
 

Semelhante a Polymer (20)

Paul valery et les Web components
Paul valery et les Web componentsPaul valery et les Web components
Paul valery et les Web components
 
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic LadeuXebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
 
Les performances Web mobile
Les performances Web mobileLes performances Web mobile
Les performances Web mobile
 
Introduction aux web components
Introduction aux web componentsIntroduction aux web components
Introduction aux web components
 
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
 
Etendre le Web avec les Web Components
Etendre le Web avec les Web ComponentsEtendre le Web avec les Web Components
Etendre le Web avec les Web Components
 
Drupal 8
Drupal 8Drupal 8
Drupal 8
 
cours-gratuit.com--id-4422.pdf
cours-gratuit.com--id-4422.pdfcours-gratuit.com--id-4422.pdf
cours-gratuit.com--id-4422.pdf
 
Gwt fast overview_v1
Gwt fast overview_v1Gwt fast overview_v1
Gwt fast overview_v1
 
La boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxLa boîte à outils de développements dans Firefox
La boîte à outils de développements dans Firefox
 
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
SEO & Javascript en 2021 : Challenger les acquis - Alexandre Pinat - SEO CAMP...
 
Seocamp Bayonne - JS et SEO
Seocamp  Bayonne - JS et SEOSeocamp  Bayonne - JS et SEO
Seocamp Bayonne - JS et SEO
 
Aeris web components
Aeris web componentsAeris web components
Aeris web components
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: Angular
 
Atelier autour de UWA à ParisWeb 2007
Atelier autour de UWA à ParisWeb 2007Atelier autour de UWA à ParisWeb 2007
Atelier autour de UWA à ParisWeb 2007
 
Firefox OS de la théorie à la pratique - OSDC
Firefox OS de la théorie à la pratique - OSDCFirefox OS de la théorie à la pratique - OSDC
Firefox OS de la théorie à la pratique - OSDC
 
Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022
Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022
Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022
 
ISCOM::HTML/CSS::session1 (20140930)
ISCOM::HTML/CSS::session1 (20140930)ISCOM::HTML/CSS::session1 (20140930)
ISCOM::HTML/CSS::session1 (20140930)
 
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
 
Cours 2 les composants
Cours 2 les composantsCours 2 les composants
Cours 2 les composants
 

Mais de Xavier MARIN

BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesXavier MARIN
 
Warp 10 - The most advanced Time Series Platform
Warp 10 - The most advanced Time Series PlatformWarp 10 - The most advanced Time Series Platform
Warp 10 - The most advanced Time Series PlatformXavier MARIN
 
Jeux vidéo sur mobile - Unity3d
Jeux vidéo sur mobile - Unity3dJeux vidéo sur mobile - Unity3d
Jeux vidéo sur mobile - Unity3dXavier MARIN
 
FinistJUG - Camel Presentation
FinistJUG - Camel PresentationFinistJUG - Camel Presentation
FinistJUG - Camel PresentationXavier MARIN
 

Mais de Xavier MARIN (7)

BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
 
Warp 10 - The most advanced Time Series Platform
Warp 10 - The most advanced Time Series PlatformWarp 10 - The most advanced Time Series Platform
Warp 10 - The most advanced Time Series Platform
 
Mongo db et nosql
Mongo db et nosqlMongo db et nosql
Mongo db et nosql
 
Vert.x
Vert.xVert.x
Vert.x
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
Jeux vidéo sur mobile - Unity3d
Jeux vidéo sur mobile - Unity3dJeux vidéo sur mobile - Unity3d
Jeux vidéo sur mobile - Unity3d
 
FinistJUG - Camel Presentation
FinistJUG - Camel PresentationFinistJUG - Camel Presentation
FinistJUG - Camel Presentation
 

Último

SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSKennel
 
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.pptCHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.pptbentaha1011
 
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...maach1
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfmia884611
 
présentation sur la logistique (4).
présentation     sur la  logistique (4).présentation     sur la  logistique (4).
présentation sur la logistique (4).FatimaEzzahra753100
 
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdfActions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdfalainfahed961
 

Último (8)

SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
 
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.pptCHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
 
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdf
 
présentation sur la logistique (4).
présentation     sur la  logistique (4).présentation     sur la  logistique (4).
présentation sur la logistique (4).
 
CAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptxCAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptx
 
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdfActions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
 
Note agro-climatique n°2 - 17 Avril 2024
Note agro-climatique n°2 - 17 Avril 2024Note agro-climatique n°2 - 17 Avril 2024
Note agro-climatique n°2 - 17 Avril 2024
 

Polymer

  • 1. PolymerPolymer ou comment AngularJS 2 est devenu ringard avant sa sortie @XavMarin https://github.com/Giwi
  • 2. 2 Petite histoire Client lourds : ● Assemblage de Widgets ● Encapsulation / réutilisation
  • 3. 3 Client légers : ● HTML/CSS/Js ne gèrent pas les widgets, la page est la brique de base Petite histoire
  • 4. 4 GWT utilise le paradigme de développement du client lourd ● Widgets, propriétés, événements Petite histoire
  • 5. 5 On est en 2016, on fait des Single Page App C’est plus riche mais les faire sans widgets, c’est risqué! ● GWT ● React ● AngularJS 1 et 2 ● Backbone ● Meteor ● ... Petite histoire
  • 6. 6 Rappel sur la forge Javascript Javascript Java Gestion de dépendance Construction / packaging Scaffolding
  • 7. 7 Imaginons le bouton Google + Les Web Components <!-- Place this tag where you want the +1 button to render. --> <div class="g-plusone" data-annotation="inline" data-width="300"></div> <!-- Place this tag after the last +1 button tag. --> <script type="text/javascript"> (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })(); </script>
  • 8. 8 Ce serai plus sympa de taper : <g:plusone></g:plusone> Les Web Components
  • 9. 9 en fait c’est déjà possible : <script type="text/javascript" src="https://apis.google.com/js/plusone.js" ></script> <g:plusone></g:plusone> Google a créé une “directive” avec javascript pour émuler un composant ● Approche du type AngularJS ● Respecte l’esprit des futurs standards ● Marche avec les navigateurs actuels … non standards Les Web Components
  • 10. 10 Avec la plupart des frameworks JS d’aujourd’hui, on peut déjà créer ces composants Le W3C essayer de standardiser cette approche ● support natif dans les navigateurs ● permettant la ré-utilisabilité ● mettra des années (décennies) à accoucher (cf HTML5) Les Web Components
  • 11. 11 Les 3 principes du Web Component : ● Template ● canevas de mise en page ● aujourd’hui on utilise des balises non interprétées ● Shadow DOM ● le navigateur masque le sous-arbre du DOM ● déjà utilisé aujourd’hui par les navigateurs pour leurs besoins internes ● Custom elements ● widget réutilisable associant template et comportement ● balise HTML custom et héritage ● Imports : <link rel="import" href="goodies.html"> Les Web Components
  • 14. 14 J’ai lu dans 01Informatique ou Marie-Claire, je ne sais plus, que le HTML6 serait du Web Component. Super, mais comment qu’on fait du Web Component aujourd’hui avant tout le monde? Polymer
  • 15. 15 Un projet Google ● Présenté au Google I/O de 2013 ● Nouveau framework Web ● bon hein, comme toutes les semaines il y en a un autre… ● Construit dans l’esprit Web Component Polymer
  • 17. 17 Principes ● Tout est composant ● Pragmatisme extrême ● Boilerplate c’est le mal ● Tout ce qui est dupliqué doit être refactoré sous forme de composant – soit géré par Polymer – soit ajouté au navigateur ● Modulaire ● On ne charge que ce qu’on a besoin : – tu veux du plolyfill ? importe polymer-all/platform/platform.js – tu veux faire de l’Ajax? importe PolymerElements/iron-ajax – tu veux faire du material-design, importe PolymerElements/paper-elements Polymer
  • 18. 18 ● Bon, ok, AngularJS 1.x c’est super cool ● Transpilable de ES6 -> ES5 ● Angular2 apporte TypeScript -> Transpilation ! ● on peut toujours faire du JS <!doctype html> <html> <head> <title>Directive Test</title> <script type="text/javascript" src="jquery.min.js" ></script> <script type="text/javascript" src="angular.min.js"></script> <script type="text/javascript" src="mydirectives.js"></script> </head> <body ng-app> <div test-elem></div> </body> </html> Et AngularJS ?
  • 19. 19 ● Librairies JS lourdes ● Dépendance JQuery ● quoique ce n’est pas tout à fait vrai ;) ● Assez verbeux ● Angular 1 en fin de vie ● TypeScript : un langage fortement typé traduit en javascript? ● pas sur que la communauté l’adopte Et AngularJS ? import {Component} from 'angular2/core'; import {Todo} from './todo'; import {TodoList} from './todo_list'; import {TodoForm} from './todo_form'; @Component({ selector: 'todo-app', template: ` <h2>Todo</h2> <span>{{remaining}} of {{todos.length}} remaining</span> [ <a (click)="archive()">archive</a> ] <todo-list [todos]="todos"></todo-list> <todo-form (newTask)="addTask($event)"></todo-form>`, styles:['a { cursor: pointer; cursor: hand; }'], directives: [TodoList, TodoForm] }) import {Component} from 'angular2/core'; import {Todo} from './todo'; import {TodoList} from './todo_list'; import {TodoForm} from './todo_form'; @Component({ selector: 'todo-app', template: ` <h2>Todo</h2> <span>{{remaining}} of {{todos.length}} remaining</span> [ <a (click)="archive()">archive</a> ] <todo-list [todos]="todos"></todo-list> <todo-form (newTask)="addTask($event)"></todo-form>`, styles:['a { cursor: pointer; cursor: hand; }'], directives: [TodoList, TodoForm] })
  • 20. 20 On veut du code !!! Polymer
  • 21. 21 <!-- 1. Polyfill Web Components support for older browsers --> <script src="bower_components/webcomponentsjs/webcomponents- lite.min.js"></script> <!-- 2. Import element --> <link rel="import" href="bower_components/google-map/google- map.html"> <!-- 3. Use element --> <google-map latitude="47.205403" longitude="-1.5631069" zoom="17"></google-map> Polymer
  • 22. 22 <dom-module name="x-my-module"> <template> <style> @host { /*...*/ } </style> <div id="box"> <h1>Bonjour les gens !</h1> <p><content></content></p> </div> </template> </dom-module> <script> Polymer({ is: 'x-my-module'}); </script> Polymer
  • 23. 23 <!DOCTYPE html> <html> <head> <!-- 1. Load Polymer --> <script src="bower_components/webcomponentsjs/webcomponents.js"></script> <!-- 2. Load a component --> <link rel="import" href="x-my-module.html"> </head> <body> <!-- 3. Declare the component --> <x-my-mudule>Comment ça va?</x-my-module> </body> </html> Polymer Bonjour les gens ! Comment ça va?
  • 24. 24 Bonjour les gens ! Comment ça va? Click me! Your name here ... Polymer <dom-module id="x-my-module"> <template> <style> /.../ </style> <div id="box"> <h1>{{greet}}</h1> <p><content></content></p> <div> <button on-click="alertHello">Click me!</button> </div> <input is="iron-input" bind-value="{{whoami}}" placeholder="Your name here..." /> </div> </template> </dom-module> <script> Polymer({ is: 'x-my-module', properties: { whoami: { type: String, value: "DSIday", notify: true}, greet: { type: String, computed: 'doGreet(whoami)' } }, alertHello: function() { alert("Bonjour" + this.whoami);}, doGreet: function(who) { return "Bonjour " + who} }); </script>
  • 25. 25 <polymer-element name="user-gravatar" attributes="email"> <template> <img src="https://secure.gravatar.com/avatar/{{gid}}" /> </template> <script> Polymer('user-gravatar', { ready: function() { this.gid = md5(this.email); } }); </script> </polymer> app.directive('user-gravatar', ['md5', function() { return { restrict: 'E', link: function(scope, element, attrs) { scope.gid = md5(attrs.email); }, template: '<img src="https://gravatar.com/avatar/{{gid}}" />' }; }]); Comparaison avec Angular Polymer = déclaration AngularJS = programmation
  • 26. 26 Feature Polymer Angular Templates x x Web Components x Material Components x Data Binding x x Filters x x Animations x x Events Handling x x Touch and Gestures x Routing librairie tierce x AJAX / REST x x Comparaison avec Angular
  • 27. 27 Le catalogue des éléments
  • 28. 28 Le catalogue des éléments
  • 29. 29 Le catalogue des éléments
  • 32. 32 http://www.google.com/design/spec/material-design/ Paper-Elements Du Material Design !!!!! chouette ● Responsive Web Design ● Best practices pour les designers ● Comment faire de belles applications même si on a aucun goût... ● Bon, tous les sites vont se ressembler (cf Bootstrap, Flat design, etc …)
  • 36. 36 Nouveau paradigme Le webcomponent est la nouvelle brique de base d'un développement web Polymer est construit autour de ce paradigme
  • 37. 37 1 ligne 2 ligne 3 ligne 4 ligne 0 2 4 6 8 10 12 1 colonne 2 colonne 3 colonne « Si vous avez compris ce que je viens de vous dire, c’est que je me suis probablement mal exprimé » A. Greenspan