web components vaadin 10 }> java - 2018.javacro.hr · web components four html5 specifications...

66
Vaadin 10 Web Components }> Java Haijian Wang @haijian_wang

Upload: others

Post on 21-May-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

Vaadin 10

Web Components }> JavaHaijian Wang

@haijian_wang

Page 2: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 3: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

Web Components

FOUR HTML5 SPECIFICATIONS

1. Custom Elements

2. Templates

3. HTML imports (ES6 modules)

4. Shadow DOM

Page 4: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

Custom Elements

<my-new-element></my-new-element>

Page 5: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

<input type="date">

Page 6: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

<vaadin-date-picker></vaadin-date-picker>

Page 7: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

Templates

<template id=“my-template"> <style> ... </style> <div> <h1>Web Components</h1> <img src="/img/logo.svg"> </div> </template>

Page 8: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

HTML Imports

<link rel="import" href="my-el.html">

Page 9: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

SHADOW DOM

Page 10: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

<video src=“video-src.mp4” controls></video>

Page 11: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

<video src=“video-src.mp4” controls></video>

Page 12: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

<video src=“video-src.mp4” controls></video>

Page 13: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

• Encapsulation

• Reusability

Benefits of using Web Components

Page 14: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 15: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 16: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 17: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 18: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 19: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 20: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

Install an element

bower install --save vaadin/vaadin-date-picker

Page 21: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

Import an element

<link rel="import"

href="bower_components/vaadin-date-picker/vaadin-date-picker.html">

Page 22: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

<vaadin-date-picker></vaadin-date-picker>

Page 23: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 24: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

Grid Combo Box

Page 25: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

Date Picker Upload

Page 26: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

Spread Sheet Charts

Page 27: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

And Many More …

Page 28: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

What about me?

Page 29: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 30: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

public class MainView extends VerticalLayout {

public MainView() { add(new DatePicker()); }}

Page 31: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 32: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

<game-card symbol=”♦” rank=”k”></game-card>

Page 33: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 34: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

<dependency> <groupId>org.webjars.bower</groupId> <artifactId>github-com-vpusher-game-card</artifactId> <version>1.0.6</version></dependency>

Page 35: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 36: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 37: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

@Tag("game-card")@HtmlImport("bower_components/game-card/game-card.html")public class GameCardTemplate extends Component{}

Page 38: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 39: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

public MainView() { GameCardTemplate gameCard = new GameCardTemplate(); gameCard.getElement().setAttribute("symbol", "♦"); gameCard.getElement().setAttribute("rank", "k"); add(gameCard);}

Page 40: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 41: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

@Tag("game-card")@HtmlImport("bower_components/game-card/game-card.html")public class GameCardTemplate extends PolymerTemplate<GameCardModel>{ public GameCardTemplate(){

getModel().setRank("k"); getModel().setSymbol("♦");}

}

public interface GameCardModel extends TemplateModel { void setSymbol(String symbol); String getSymbol();

void setRank(String rank); String getRank();}

<game-card symbol=”[[symbol]]” rank=”[[rank]]”></game-card>

Page 42: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 43: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

Make My Own Template?

Page 44: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

<hello-world></hello-world>

Hello World!

Page 45: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

Native Approach<template id="template1"> Hello world! </template> <script> customElements.define('hello-world', class extends HTMLElement { constructor() { super(); let shadowRoot = this.attachShadow({mode: 'open'}); const t = document.querySelector('#template1'); const instance = t.content.cloneNode(true); shadowRoot.appendChild(instance); } });</script>

Page 46: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 47: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

Polymer<dom-module id="hello-world"> <template> Hello world! </template> <script> class HelloWorld extends Polymer.Element{ static get is() { return 'hello-world'; } }

customElements.define(HelloWorld.is, HelloWorld); </script> </dom-module>

Page 48: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

What about me?

Page 49: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 50: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 51: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

Designer is an IDE plugin

Page 52: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 53: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 54: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 55: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 56: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 57: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 58: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 59: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 60: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

@Tag("hello-world")@HtmlImport("frontend://Intro/Exercises/Solutions/hello-world.html")public class HelloWorld extends PolymerTemplate<HelloWorld.HelloWorldModel> {

public interface HelloWorldModel extends TemplateModel {

}}

Page 61: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 62: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 63: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

@Tag("hello-world")@HtmlImport("frontend://hello-world.html")public class HelloWorld extends PolymerTemplate<HelloWorld.HelloWorldModel> {

@Id("helloButton") private Button helloButton;

public interface HelloWorldModel extends TemplateModel {

}}

Page 64: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM

@Tag("hello-world")@HtmlImport("frontend://hello-world.html")public class HelloWorld extends PolymerTemplate<HelloWorld.HelloWorldModel> {

@Id("helloButton") private Button helloButton;

public HelloWorld(){ helloButton.addClickListener(e->{ Notification.show("Hello"); }); }

public interface HelloWorldModel extends TemplateModel {

}}

Page 65: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM
Page 66: Web Components Vaadin 10 }> Java - 2018.javacro.hr · Web Components FOUR HTML5 SPECIFICATIONS 1. Custom Elements 2. Templates 3. HTML imports (ES6 modules) 4. Shadow DOM