SlideShare a Scribd company logo
1 of 26
Download to read offline
Polymer 
Jakub Škvára 
@skvaros 
Interaktivní prezentace: https://slides.com/jskvara/polymer/
What is polymer 
Polymer is a new type of library for 
the web, built on top of Web 
Components, and designed to 
leverage the evolving web platform … 
on modern browsers. 
Polymer je nový typ knihovny pro web od Googlu, postavený na standardech Web 
Components a slouží pro zjednodušení vývoje pro web a moderní prohlížeče.
Core Elements 
Základní elementy (Core elements) 
Ukázka: http://www.polymer-project.org/components/core-elements/demo.html
Paper Elements 
Material design (elementy od Google stejné pro web i Android) 
Ukákzka: http://www.polymer-project.org/components/paper-elements/demo.html
Divs Hell 
Aktuální vývoj aplikací vypadá tak, že máme HTML plné elemntů <div> bez dalšího 
významu, což je extrémně nepřehledné.
Everything is an element 
● AngularJs - directive 
● EmberJs - component 
● ReactJs - component 
Web Components je soubor specifikací, jak používat vlastní elementy v HTML. 
Moderní JS framworky již vlastní elementy používají, ale mají vlastní implementace.
Součástí polymeru jsou: polyfilly pro starší prohlížeče (Foundation), polymer.js (přidává 
funkcionalitu) a elementy (Core + Paper elements)
The Polymer world-view 
(Everything is an Element) 
● Functional 
● Reusable 
● Interoperable 
● Encapsulated 
● Configurable 
● Programmable 
● Event generator 
● Composable <video> 
Výhody komponent: Funkční (browser ví jak vykreslit), Znovupoužitelné, Interakce s JS, 
Zapouzdřenost, Konfigurovatelné, Programovatelné, JS Eventy, Skládatelné. Př:<video>
Features 
● Web Components 
○ Shadow dom (better <iframe>) 
○ HTML Imports (<link rel="import" 
href="....html">) 
○ Custom elements (createdCallback, 
attachedCallback, detachedCallback, 
attributeChangedCallback) 
● Polymer 
○ Templates (<template></template>) 
○ data-binding ({{model}}) 
Hlavní specifikace Web Component: Shadow dom(zapouzdření), HTML Import (jako 
CSS import), Custom elements (naše elemeny). Polymer přidává šablony a data-binding
Current state 
Chrome > 36 - native 
Polyfills 
Custom Elements 
■ OK (except :unresolved) 
■ Github using <time> 
Vše nativní od Google Chrome verze 36 
Pro ostatní prohlížeče existují polyfilly 
Některé specifikace jsou použitelné již dnes 
Github používá tag <time> dnes
Other libraries 
● X-Tag + Bricks (mozilla) 
● Cooperation 
Existuje knihovna využívající standardy Web Components od Mozilly s nazvem X-Tag. 
Mozilla a Google spolu komunikují při vývoji obou knihoven, aby zachovaly kompatibilitu
Future 
● Standard 
● Native Libraries 
● Angular 2 
● ReactJS 
Do budoucna: web components více rozšířené a součástí browserů 
Angular 2 bude pravděpodobně používat Polymer a ReactJS uvažuje o použití
Designer 
Polymer designer (webová aplikace na rychlý návrh polymerových komponent) 
Ukázka: http://www.polymer-project.org/tools/designer/
Calculator 
Kalkulačka za použití paper elementů 
Ukázka: http://www.polymer-project.org/components/paper-calculator/demo.html
Todo MVC 
Polymer Todo MVC (stejná aplikace napsaná v různých JS frontend frameworcích) 
Ukázka: http://todomvc.com/architecture-examples/polymer/
Chromium Features Dashboard 
Přehled implementovaných vlastností v různých verzích prohlížeče Chromium 
Ukázka: http://www.chromestatus.com/features
Custom Elements 
Sbírka hotových elementů, které lze použít na webu 
Ukázka: http://customelements.io/
Google Web Components 
Sbírka hotových google elementů, které lze použít na webu 
Ukázka: http://googlewebcomponents.github.io/
Import Custom Element 
<!-- Polyfill Web Components support for older browsers --> 
<script src="components/platform/platform.js"></script> 
<!-- Import element --> 
<link rel="import" href="google-map.html"> 
<!-- Use element --> 
<google-map lat="37.790" long="-122.390"></google-map> 
Použití hotového elementu
Create Custom Element 
<polymer-element name="my-counter" attributes="counter"> 
<template><style> /*...*/ </style> 
<div id="label"><content></content></div> 
Value: <span id="counterVal">{{counter}}</span><br> 
<button on-tap="{{increment}}">Increment</button> 
</template> 
<script> 
Polymer({ 
counter: 0, // Default value 
counterChanged: function() {this.$.counterVal.classList.add('highlight');}, 
increment: function() {this.counter++;} 
}); 
</script> 
</polymer-element> 
Vytvoření nového elementu
polymer.dart 
import 'package:polymer/polymer.dart'; 
import 'dart:html'; 
@CustomTag('click-counter') 
class ClickCounterElement extends PolymerElement { 
@observable int count = 0; 
ClickCounterElement.created() : super.created(); 
void increment(Event e, var detail, Node target) { 
count += 1; 
} 
} 
Vytvoření nového elementu v programovacím jazyce Dart
Custom attributes 
<polymer-element name="volume-nob"> 
<template> 
<p>You turned the volume to {{volume}}.</p> 
</template> 
<script type="application/dart" src="volume_nob.dart"></script> 
</polymer-element> 
import 'package:polymer/polymer.dart'; 
import 'dart:html'; 
@CustomTag('volume-nob') 
class VolumeNobElement extends PolymerElement { 
// @published means 'this is an attribute', and it is observable. 
@published int volume = 0; 
VolumeNobElement.created() : super.created(); 
} 
<volume-nob 
volume="11"> 
</volume-nob> 
Používání vlastních atributů u elementů
Template conditionals 
<polymer-element name="click-counter"> 
<template> 
<button on-click="{{increment}}">Click 
Me</button> 
<template if="{{count <= 0}}"> 
<p>Click the button. It is fun!</p> 
</template> 
<template if="{{count > 0}}"> 
<p>You clicked {{count}} times.</p> 
</template> 
</template> 
<script type="application/dart" src=" 
click_counter.dart"></script> 
</polymer-element> 
Podmínky v šablonách 
import 'package:polymer/polymer.dart'; 
import 'dart:html'; 
@CustomTag('click-counter') 
class ClickCounterElement extends PolymerElement { 
@observable int count = 0; 
ClickCounterElement.created() : super.created(); 
void increment(Event e, var detail, Node target) { 
count += 1; 
} 
}
Template loops 
<polymer-element name="fav-fruits"> 
<template> 
<ul> 
<template repeat="{{fruit in fruits}}"> 
<li>I like {{ fruit }}.</li> 
</template> 
</ul> 
</template> 
<script type="application/dart" src="fav_fruits.dart"></script> 
</polymer-element> 
Cykly v šablonách 
import 'package:polymer/polymer.dart'; 
@CustomTag('fav-fruits') 
class FavFruitsElement extends PolymerElement { 
final List fruits = toObservable(['apples', 'pears', 'bananas']); 
FavFruitsElement.created() : super.created(); 
}
Extending DOM elements 
<polymer-element name="fancy-button" extends="button"> 
<template> 
<style>:host {background: pink;}</style> 
<content></content> 
</template> 
<script type="application/dart" src="fancy_button.dart"></script> 
</polymer-element> import 'package:polymer/polymer.dart'; 
Rozšíření DOM elementů 
import 'dart:html' show ButtonElement; 
@CustomTag('fancy-button') 
class FancyButton extends ButtonElement with Polymer, Observable { 
FancyButton.created() : super.created() { 
polymerCreated(); 
} 
} 
<button is="fancy-button">Click me</button>
Why you should be 
excited 
Developer productivity 
■ DOM + JS + CSS → no new APIs to learn! 
■ say what you mean → readability 
Re-usability 
■ don't reinvent the wheel 
■ easy interop with other frameworks 
■ CSS isolation 
Good software engineering paradigms on web (OOP) 
Proč se o Polymer zajímat? Produktivita (známé technologie + lepší čitelnost) a 
znovupoužitelnost (hotové komponenty, spolupráce s frameworky, izolace CSS)

More Related Content

Viewers also liked

How to build a web application with Polymer
How to build a web application with PolymerHow to build a web application with Polymer
How to build a web application with PolymerSami Suo-Heikki
 
Introduction to the Dart language
Introduction to the Dart languageIntroduction to the Dart language
Introduction to the Dart languageJana Moudrá
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web ComponentsFu Cheng
 
Polymer science: preparation and uses of polymers
Polymer science: preparation and uses of polymersPolymer science: preparation and uses of polymers
Polymer science: preparation and uses of polymersVARSHAAWASAR
 
Using Bitbucket and Mercurial
Using Bitbucket and MercurialUsing Bitbucket and Mercurial
Using Bitbucket and MercurialGramener
 
Front-end architecture for cloud applications and Polymer
Front-end architecture for cloud applications and PolymerFront-end architecture for cloud applications and Polymer
Front-end architecture for cloud applications and PolymeruEngine Solutions
 
ChatOps Unplugged
ChatOps UnpluggedChatOps Unplugged
ChatOps UnpluggedVictorOps
 
Using Git and BitBucket
Using Git and BitBucketUsing Git and BitBucket
Using Git and BitBucketMedhat Dawoud
 
Google Developer Group(GDG) DevFest Event 2012 Android talk
Google Developer Group(GDG) DevFest Event 2012 Android talkGoogle Developer Group(GDG) DevFest Event 2012 Android talk
Google Developer Group(GDG) DevFest Event 2012 Android talkImam Raza
 
Chat ops .. a beginner's guide
Chat ops .. a beginner's guideChat ops .. a beginner's guide
Chat ops .. a beginner's guideJason Hand
 
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17GreeceJS
 

Viewers also liked (20)

How to build a web application with Polymer
How to build a web application with PolymerHow to build a web application with Polymer
How to build a web application with Polymer
 
Introduction to the Dart language
Introduction to the Dart languageIntroduction to the Dart language
Introduction to the Dart language
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web Components
 
Google Polymer Framework
Google Polymer FrameworkGoogle Polymer Framework
Google Polymer Framework
 
Polymer
PolymerPolymer
Polymer
 
Polymer science: preparation and uses of polymers
Polymer science: preparation and uses of polymersPolymer science: preparation and uses of polymers
Polymer science: preparation and uses of polymers
 
reveal.js 3.0.0
reveal.js 3.0.0reveal.js 3.0.0
reveal.js 3.0.0
 
Using Bitbucket and Mercurial
Using Bitbucket and MercurialUsing Bitbucket and Mercurial
Using Bitbucket and Mercurial
 
fms9_cwp_php_en
fms9_cwp_php_enfms9_cwp_php_en
fms9_cwp_php_en
 
Front-end architecture for cloud applications and Polymer
Front-end architecture for cloud applications and PolymerFront-end architecture for cloud applications and Polymer
Front-end architecture for cloud applications and Polymer
 
ChatOps Unplugged
ChatOps UnpluggedChatOps Unplugged
ChatOps Unplugged
 
BitBucket presentation
BitBucket presentationBitBucket presentation
BitBucket presentation
 
Using Git and BitBucket
Using Git and BitBucketUsing Git and BitBucket
Using Git and BitBucket
 
Google Developer Group(GDG) DevFest Event 2012 Android talk
Google Developer Group(GDG) DevFest Event 2012 Android talkGoogle Developer Group(GDG) DevFest Event 2012 Android talk
Google Developer Group(GDG) DevFest Event 2012 Android talk
 
Chat ops .. a beginner's guide
Chat ops .. a beginner's guideChat ops .. a beginner's guide
Chat ops .. a beginner's guide
 
Let's Play Dart
Let's Play DartLet's Play Dart
Let's Play Dart
 
Reactjs
Reactjs Reactjs
Reactjs
 
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
 
Chemistry of some cosmetics
Chemistry of some cosmeticsChemistry of some cosmetics
Chemistry of some cosmetics
 
Biodegradable polymers by madhuri phute
Biodegradable polymers by madhuri phuteBiodegradable polymers by madhuri phute
Biodegradable polymers by madhuri phute
 

Similar to Polymer project presentation

MoroSystems na ostravském CZJUGu o Apache Wicket
MoroSystems na ostravském CZJUGu o Apache WicketMoroSystems na ostravském CZJUGu o Apache Wicket
MoroSystems na ostravském CZJUGu o Apache WicketTomáš Páral
 
Vytvořeno pro SEO (Designed for SEO)
Vytvořeno pro SEO (Designed for SEO)Vytvořeno pro SEO (Designed for SEO)
Vytvořeno pro SEO (Designed for SEO)Pavel Ungr
 
Pavel ungr designed_for_seo
Pavel ungr designed_for_seoPavel ungr designed_for_seo
Pavel ungr designed_for_seoH1.cz
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Tomáš Kukol
 
Google Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPressGoogle Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPressVladimír Smitka
 
Hledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešitHledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešitDesingdev
 
JavaScript v GTM - Measure Camp Brno 2017
JavaScript v GTM - Measure Camp Brno 2017JavaScript v GTM - Measure Camp Brno 2017
JavaScript v GTM - Measure Camp Brno 2017Michal Blažek
 
Jak může PPCéčkař zastoupit programátora
Jak může PPCéčkař zastoupit programátoraJak může PPCéčkař zastoupit programátora
Jak může PPCéčkař zastoupit programátoraMichal Blažek
 
Rozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVCRozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVCtopascz
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitněJiří Mareš
 
Generátory statických webů
Generátory statických webůGenerátory statických webů
Generátory statických webůMichal Doležel
 
Webový front-end ve službách mobilního vývojáře
Webový front-end  ve službách mobilního  vývojáře Webový front-end  ve službách mobilního  vývojáře
Webový front-end ve službách mobilního vývojáře Martin Michálek
 
Lex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
Lex Vjatkin + Ondřej procházka: Jak to děláme ve WikidiLex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
Lex Vjatkin + Ondřej procházka: Jak to děláme ve WikidiDevelcz
 

Similar to Polymer project presentation (20)

TNPW2-2011-03
TNPW2-2011-03TNPW2-2011-03
TNPW2-2011-03
 
MoroSystems na ostravském CZJUGu o Apache Wicket
MoroSystems na ostravském CZJUGu o Apache WicketMoroSystems na ostravském CZJUGu o Apache Wicket
MoroSystems na ostravském CZJUGu o Apache Wicket
 
TNPW2-2014-03
TNPW2-2014-03TNPW2-2014-03
TNPW2-2014-03
 
Vytvořeno pro SEO (Designed for SEO)
Vytvořeno pro SEO (Designed for SEO)Vytvořeno pro SEO (Designed for SEO)
Vytvořeno pro SEO (Designed for SEO)
 
Pavel ungr designed_for_seo
Pavel ungr designed_for_seoPavel ungr designed_for_seo
Pavel ungr designed_for_seo
 
TNPW2-2016-03
TNPW2-2016-03TNPW2-2016-03
TNPW2-2016-03
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]
 
Editace šablony & child theme
Editace šablony & child themeEditace šablony & child theme
Editace šablony & child theme
 
Drupal Front-end
Drupal Front-endDrupal Front-end
Drupal Front-end
 
Django
DjangoDjango
Django
 
Google Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPressGoogle Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPress
 
Hledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešitHledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešit
 
JavaScript v GTM - Measure Camp Brno 2017
JavaScript v GTM - Measure Camp Brno 2017JavaScript v GTM - Measure Camp Brno 2017
JavaScript v GTM - Measure Camp Brno 2017
 
Jak může PPCéčkař zastoupit programátora
Jak může PPCéčkař zastoupit programátoraJak může PPCéčkař zastoupit programátora
Jak může PPCéčkař zastoupit programátora
 
Rozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVCRozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVC
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně
 
Generátory statických webů
Generátory statických webůGenerátory statických webů
Generátory statických webů
 
Webový front-end ve službách mobilního vývojáře
Webový front-end  ve službách mobilního  vývojáře Webový front-end  ve službách mobilního  vývojáře
Webový front-end ve službách mobilního vývojáře
 
Lex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
Lex Vjatkin + Ondřej procházka: Jak to děláme ve WikidiLex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
Lex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
 
TNPW2-2012-03
TNPW2-2012-03TNPW2-2012-03
TNPW2-2012-03
 

Polymer project presentation

  • 1. Polymer Jakub Škvára @skvaros Interaktivní prezentace: https://slides.com/jskvara/polymer/
  • 2. What is polymer Polymer is a new type of library for the web, built on top of Web Components, and designed to leverage the evolving web platform … on modern browsers. Polymer je nový typ knihovny pro web od Googlu, postavený na standardech Web Components a slouží pro zjednodušení vývoje pro web a moderní prohlížeče.
  • 3. Core Elements Základní elementy (Core elements) Ukázka: http://www.polymer-project.org/components/core-elements/demo.html
  • 4. Paper Elements Material design (elementy od Google stejné pro web i Android) Ukákzka: http://www.polymer-project.org/components/paper-elements/demo.html
  • 5. Divs Hell Aktuální vývoj aplikací vypadá tak, že máme HTML plné elemntů <div> bez dalšího významu, což je extrémně nepřehledné.
  • 6. Everything is an element ● AngularJs - directive ● EmberJs - component ● ReactJs - component Web Components je soubor specifikací, jak používat vlastní elementy v HTML. Moderní JS framworky již vlastní elementy používají, ale mají vlastní implementace.
  • 7. Součástí polymeru jsou: polyfilly pro starší prohlížeče (Foundation), polymer.js (přidává funkcionalitu) a elementy (Core + Paper elements)
  • 8. The Polymer world-view (Everything is an Element) ● Functional ● Reusable ● Interoperable ● Encapsulated ● Configurable ● Programmable ● Event generator ● Composable <video> Výhody komponent: Funkční (browser ví jak vykreslit), Znovupoužitelné, Interakce s JS, Zapouzdřenost, Konfigurovatelné, Programovatelné, JS Eventy, Skládatelné. Př:<video>
  • 9. Features ● Web Components ○ Shadow dom (better <iframe>) ○ HTML Imports (<link rel="import" href="....html">) ○ Custom elements (createdCallback, attachedCallback, detachedCallback, attributeChangedCallback) ● Polymer ○ Templates (<template></template>) ○ data-binding ({{model}}) Hlavní specifikace Web Component: Shadow dom(zapouzdření), HTML Import (jako CSS import), Custom elements (naše elemeny). Polymer přidává šablony a data-binding
  • 10. Current state Chrome > 36 - native Polyfills Custom Elements ■ OK (except :unresolved) ■ Github using <time> Vše nativní od Google Chrome verze 36 Pro ostatní prohlížeče existují polyfilly Některé specifikace jsou použitelné již dnes Github používá tag <time> dnes
  • 11. Other libraries ● X-Tag + Bricks (mozilla) ● Cooperation Existuje knihovna využívající standardy Web Components od Mozilly s nazvem X-Tag. Mozilla a Google spolu komunikují při vývoji obou knihoven, aby zachovaly kompatibilitu
  • 12. Future ● Standard ● Native Libraries ● Angular 2 ● ReactJS Do budoucna: web components více rozšířené a součástí browserů Angular 2 bude pravděpodobně používat Polymer a ReactJS uvažuje o použití
  • 13. Designer Polymer designer (webová aplikace na rychlý návrh polymerových komponent) Ukázka: http://www.polymer-project.org/tools/designer/
  • 14. Calculator Kalkulačka za použití paper elementů Ukázka: http://www.polymer-project.org/components/paper-calculator/demo.html
  • 15. Todo MVC Polymer Todo MVC (stejná aplikace napsaná v různých JS frontend frameworcích) Ukázka: http://todomvc.com/architecture-examples/polymer/
  • 16. Chromium Features Dashboard Přehled implementovaných vlastností v různých verzích prohlížeče Chromium Ukázka: http://www.chromestatus.com/features
  • 17. Custom Elements Sbírka hotových elementů, které lze použít na webu Ukázka: http://customelements.io/
  • 18. Google Web Components Sbírka hotových google elementů, které lze použít na webu Ukázka: http://googlewebcomponents.github.io/
  • 19. Import Custom Element <!-- Polyfill Web Components support for older browsers --> <script src="components/platform/platform.js"></script> <!-- Import element --> <link rel="import" href="google-map.html"> <!-- Use element --> <google-map lat="37.790" long="-122.390"></google-map> Použití hotového elementu
  • 20. Create Custom Element <polymer-element name="my-counter" attributes="counter"> <template><style> /*...*/ </style> <div id="label"><content></content></div> Value: <span id="counterVal">{{counter}}</span><br> <button on-tap="{{increment}}">Increment</button> </template> <script> Polymer({ counter: 0, // Default value counterChanged: function() {this.$.counterVal.classList.add('highlight');}, increment: function() {this.counter++;} }); </script> </polymer-element> Vytvoření nového elementu
  • 21. polymer.dart import 'package:polymer/polymer.dart'; import 'dart:html'; @CustomTag('click-counter') class ClickCounterElement extends PolymerElement { @observable int count = 0; ClickCounterElement.created() : super.created(); void increment(Event e, var detail, Node target) { count += 1; } } Vytvoření nového elementu v programovacím jazyce Dart
  • 22. Custom attributes <polymer-element name="volume-nob"> <template> <p>You turned the volume to {{volume}}.</p> </template> <script type="application/dart" src="volume_nob.dart"></script> </polymer-element> import 'package:polymer/polymer.dart'; import 'dart:html'; @CustomTag('volume-nob') class VolumeNobElement extends PolymerElement { // @published means 'this is an attribute', and it is observable. @published int volume = 0; VolumeNobElement.created() : super.created(); } <volume-nob volume="11"> </volume-nob> Používání vlastních atributů u elementů
  • 23. Template conditionals <polymer-element name="click-counter"> <template> <button on-click="{{increment}}">Click Me</button> <template if="{{count <= 0}}"> <p>Click the button. It is fun!</p> </template> <template if="{{count > 0}}"> <p>You clicked {{count}} times.</p> </template> </template> <script type="application/dart" src=" click_counter.dart"></script> </polymer-element> Podmínky v šablonách import 'package:polymer/polymer.dart'; import 'dart:html'; @CustomTag('click-counter') class ClickCounterElement extends PolymerElement { @observable int count = 0; ClickCounterElement.created() : super.created(); void increment(Event e, var detail, Node target) { count += 1; } }
  • 24. Template loops <polymer-element name="fav-fruits"> <template> <ul> <template repeat="{{fruit in fruits}}"> <li>I like {{ fruit }}.</li> </template> </ul> </template> <script type="application/dart" src="fav_fruits.dart"></script> </polymer-element> Cykly v šablonách import 'package:polymer/polymer.dart'; @CustomTag('fav-fruits') class FavFruitsElement extends PolymerElement { final List fruits = toObservable(['apples', 'pears', 'bananas']); FavFruitsElement.created() : super.created(); }
  • 25. Extending DOM elements <polymer-element name="fancy-button" extends="button"> <template> <style>:host {background: pink;}</style> <content></content> </template> <script type="application/dart" src="fancy_button.dart"></script> </polymer-element> import 'package:polymer/polymer.dart'; Rozšíření DOM elementů import 'dart:html' show ButtonElement; @CustomTag('fancy-button') class FancyButton extends ButtonElement with Polymer, Observable { FancyButton.created() : super.created() { polymerCreated(); } } <button is="fancy-button">Click me</button>
  • 26. Why you should be excited Developer productivity ■ DOM + JS + CSS → no new APIs to learn! ■ say what you mean → readability Re-usability ■ don't reinvent the wheel ■ easy interop with other frameworks ■ CSS isolation Good software engineering paradigms on web (OOP) Proč se o Polymer zajímat? Produktivita (známé technologie + lepší čitelnost) a znovupoužitelnost (hotové komponenty, spolupráce s frameworky, izolace CSS)