Vaadin Components

98
Vaadin X @joonaslehtinen Founder & CEO

Transcript of Vaadin Components

Page 1: Vaadin Components

VaadinX @joonaslehtinen Founder & CEO

Page 2: Vaadin Components

Introduction to Vaadin Framework

Page 3: Vaadin Components

User interface framework for rich

web applications

Page 4: Vaadin Components

User Interface Components

Page 5: Vaadin Components

Developer

Productivity

Rich

UX

Page 6: Vaadin Components

htmljava

Page 10: Vaadin Components

1.6 Going mobile

GWT is a versatile technology that allows developers to create application UI for desktop, tablet, and mobile consumption. As can be expected, over 98% of apps support desktop browsers, but we found it interesting that tablets had overtaken phones (at least when it came to support from GWT-based apps). In US, the number of apps supporting tablets was as high as 46%, while it was just 34% in Europe.

What kind of devices does your app support?

98.1%25.7%

Phones

36.1%

Tablets

Desktop browsers

Others

2.1%

“Since gwt is used extensively in the enterprise, this may explain why tablets are more popular than support for phones”

Daniel

Browsers developers expect to support in 2013

3.5 Browsers to support in 2012

IE 6/7 Safari Opera IE 8

6/7 8

14% 18% 36% 54%

Chrome

9 10IE 9 IE 10 Firefox

79% 80% 94% 94%Browsers developers expect to support in 2013

3.5 Browsers to support in 2012

IE 6/7 Safari Opera IE 8

6/7 8

14% 18% 36% 54%

Chrome

9 10IE 9 IE 10 Firefox

79% 80% 94% 94%

1.6 Going mobile

GWT is a versatile technology that allows developers to create application UI for

desktop, tablet, and mobile consumption. As can be expected, over 98% of apps

support desktop browsers, but we found it interesting that tablets had overtaken

phones (at least when it came to support from GWT-based apps). In US, the number

of apps supporting tablets was as high as 46%, while it was just 34% in Europe.

What kind of devices does your app support?

98.1%

25.7%

Phones

36.1%

Tablets

Desktop

browsers

Others2.1%

“Since gwt is used extensively

in the enterprise, this may

explain why tablets are more

popular than support for

phones”

Daniel

iPhone Android

WP

1.6 Going mobile

GWT is a versatile technology that allows developers to create application UI for

desktop, tablet, and mobile consumption. As can be expected, over 98% of apps

support desktop browsers, but we found it interesting that tablets had overtaken

phones (at least when it came to support from GWT-based apps). In US, the number

of apps supporting tablets was as high as 46%, while it was just 34% in Europe.

What kind of devices does your app support?

98.1%

25.7%

Phones

36.1%

Tablets

Desktop

browsers

Others2.1%

“Since gwt is used extensively

in the enterprise, this may

explain why tablets are more

popular than support for

phones”

Daniel

iPad Android Windows

++

Page 11: Vaadin Components

How does server-side UI work, really?

Page 12: Vaadin Components
Page 13: Vaadin Components

• Initial HTML • CSS (theme) • Images • JavaScript

1.2M total

307k

compress

135k

reduced widgetset

Page 14: Vaadin Components
Page 15: Vaadin Components

• name=”Joonas” • button clicked

261 bytes

Page 16: Vaadin Components
Page 17: Vaadin Components

• name=”Joonas” • button clicked

261 bytes

• Add notification

267 bytes

Page 18: Vaadin Components

Trends changing Web Frameworks

Page 19: Vaadin Components

Client - Model View WhateverDisruptive trend today

Page 20: Vaadin Components
Page 21: Vaadin Components

AngularJS

GWT

Page 22: Vaadin Components

? ??

Page 23: Vaadin Components

AngularJS: Spreadsheet

for HTML

Page 24: Vaadin Components

<input type="text" ng-model="yourName">

<h1>Hello {{yourName}}!</h1>

=SUM(A1:A100)

Page 25: Vaadin Components

<input type="text" ng-model="yourName">

<h1>Hello {{yourName}}!</h1>

=SUM(A1:A100)

Enables designers to build web prototypes

Enables business people to build financial "apps"

Page 26: Vaadin Components

"Designed bya developer"

Design driven

Page 27: Vaadin Components

Developer productivity Powerful testing

Page 28: Vaadin Components

Web Components The next disruptive trend?

Page 29: Vaadin Components
Page 30: Vaadin Components

<x-gangnam-style> </x-gangnam-style>

Page 31: Vaadin Components
Page 32: Vaadin Components

? ??disruptive

Page 33: Vaadin Components

Simplification

Reusability

Robustness

Page 34: Vaadin Components

Enables developers & designers to build UIs that would otherwise be too hard or expensive

Page 35: Vaadin Components

Component oriented web frameworks

Page 36: Vaadin Components

value proposition

Statically typed Java

Components

Automated Communication

Statically typed Java

Components

Page 37: Vaadin Components

Statically typed Java

Automated Communication

Statically typed Java

Page 38: Vaadin Components
Page 39: Vaadin Components

Disruption

Page 40: Vaadin Components

Opportunity :)

Page 41: Vaadin Components

Vaadin ComponentsC

Page 42: Vaadin Components

</v-grid></v-slider> </v-progress-bar>

Vaadin Components 0.1<v-grid><v-slider> <v-progress-bar>

Page 43: Vaadin Components
Page 44: Vaadin Components
Page 45: Vaadin Components
Page 46: Vaadin Components
Page 47: Vaadin Components
Page 48: Vaadin Components
Page 49: Vaadin Components
Page 50: Vaadin Components

<v-grid>Super fast lazy loading rendering engine

Mobile friendly

Complex headers and footers

Renderers

Page 51: Vaadin Components

Vaadin Labs• stuff is still experimental • timeline is not set

Page 52: Vaadin Components

Automated Communication

Statically typed Java

Components

Page 53: Vaadin Components

Automated Communication

Statically typed Java

Components

Framework

Components web

Page 54: Vaadin Components

<v-grid>Sass API for theme engine

<v-component> / JS API

GWTAPI

Java Server

Automatic communication

API

AngularJSAPI

Page 55: Vaadin Components
Page 56: Vaadin Components

<v-absolute-layout id="absoluteLayout"> <v-label id="label" size-auto="true" :top="0px" :left="21px"> <h3>Edit customer</h3> </v-label> <v-form-layout id="formLayout" margin="" :top="69px" :right="22px" :left="20px"> <v-text-field caption="First name" id="firstName" width-full="true"></v-text-field> <v-text-field caption="Last name" id="lastName" width-full="true"></v-text-field> <v-text-field caption="Email" required="true" id="email"></v-text-field> <v-popup-date-field caption="Birth day" id="birthDay"></v-popup-date-field> <v-native-select caption="Status" id="status"></v-native-select> </v-form-layout> <v-horizontal-layout spacing="true" id="horizontalLayout" width-full="true" :right="22px" :bottom="17px" :left="20px"> <v-button style-name="primary" id="save" plain-text="">Save</v-button> <v-button id="cancel" plain-text="">Cancel</v-button> <v-button style-name="FontAwesome" id="delete" plain-text="":expand="">!</v-button> </v-horizontal-layout> </v-absolute-layout>

Page 57: Vaadin Components

design.htmlFramework

Page 58: Vaadin Components
Page 59: Vaadin Components
Page 60: Vaadin Components
Page 61: Vaadin Components

design.htmlFramework

Designer

Page 62: Vaadin Components

design.htmlFramework

ComponentsDesigner

Page 63: Vaadin Components

design.htmlFramework

ComponentsDesigner

Page 64: Vaadin Components

Not if, but when?

Page 65: Vaadin Components

Do web components actually work?

Page 66: Vaadin Components
Page 67: Vaadin Components

HTML Template Support by browser market share

Page 68: Vaadin Components

Custom Elements Support by browser market share

Page 69: Vaadin Components

Shadow DOM Support by browser market share

Page 70: Vaadin Components

HTML Import Support by browser market share

Page 71: Vaadin Components

Summary Only works in blink

Custom Element

HTML Template

Shadow DOM

HTML Import

CHROME OPERA FIREFOX SAFARI IE

Page 72: Vaadin Components

Do web components actually work? No, but Yes :)

Page 73: Vaadin Components

webcomponents.js Polyfill

http://webcomponents.org/polyfills/

Web Components Custom Elements HTML Imports Shadow DOM

DOM WeakMap Mutation Observers{

Page 74: Vaadin Components
Page 75: Vaadin Components

Timeline When could you really use web components

With full CSS sandbox (native)

Evergreen browsers (polyfilled)

Old browsersIE <10, Safari <6, < latest iOS/FF/Chrome/Android

Today Soonish? ∞

Page 76: Vaadin Components

Building Web Components With GWT

Page 77: Vaadin Components

<v-grid> 193 files 32 kLOC 17 months 5 persons No human sacrifices ;)</v-grid>

Page 78: Vaadin Components

Elements.registerElement("v-grid", new WCVGrid());

@JsExport@JsTypepublic class WCVGrid extends HTMLElement.Prototype implements LifeCycle.Attached { private Grid<JsArrayMixed> grid = new Grid<>();

@Override public void attachedCallback() { HTMLShadow shadow = createShadowRoot(); shadow.appendChild(style); shadow.appendChild(container);

Panel shadowPanel = wrapAsWidget(container); shadowPanel.add(grid); }

@JsProperty public void setDataSource(JavaScriptObject jso) { grid.setDataSource(wrapJsoDataSource(jso)); }}

Page 79: Vaadin Components

Elements.registerElement("v-grid", new WCVGrid());

@JsExport@JsTypepublic class WCVGrid extends HTMLElement.Prototype implements LifeCycle.Attached { private Grid<JsArrayMixed> grid = new Grid<>();

@Override public void attachedCallback() { HTMLShadow shadow = createShadowRoot(); shadow.appendChild(style); shadow.appendChild(container);

Panel shadowPanel = wrapAsWidget(container); shadowPanel.add(grid); }

@JsProperty public void setDataSource(JavaScriptObject jso) { grid.setDataSource(wrapJsoDataSource(jso)); }}

Page 80: Vaadin Components

Elements.registerElement("v-grid", new WCVGrid());

@JsExport@JsTypepublic class WCVGrid extends HTMLElement.Prototype implements LifeCycle.Attached { private Grid<JsArrayMixed> grid = new Grid<>();

@Override public void attachedCallback() { HTMLShadow shadow = createShadowRoot(); shadow.appendChild(style); shadow.appendChild(container);

Panel shadowPanel = wrapAsWidget(container); shadowPanel.add(grid); }

@JsProperty public void setDataSource(JavaScriptObject jso) { grid.setDataSource(wrapJsoDataSource(jso)); }}

Page 81: Vaadin Components

Elements.registerElement("v-grid", new WCVGrid());

@JsExport@JsTypepublic class WCVGrid extends HTMLElement.Prototype implements LifeCycle.Attached { private Grid<JsArrayMixed> grid = new Grid<>();

@Override public void attachedCallback() { HTMLShadow shadow = createShadowRoot(); shadow.appendChild(style); shadow.appendChild(container);

Panel shadowPanel = wrapAsWidget(container); shadowPanel.add(grid); }

@JsProperty public void setDataSource(JavaScriptObject jso) { grid.setDataSource(wrapJsoDataSource(jso)); }}

Page 82: Vaadin Components

Elements.registerElement("v-grid", new WCVGrid());

@JsExport@JsTypepublic class WCVGrid extends HTMLElement.Prototype implements LifeCycle.Attached { private Grid<JsArrayMixed> grid = new Grid<>();

@Override public void attachedCallback() { HTMLShadow shadow = createShadowRoot(); shadow.appendChild(style); shadow.appendChild(container);

Panel shadowPanel = wrapAsWidget(container); shadowPanel.add(grid); }

@JsProperty public void setDataSource(JavaScriptObject jso) { grid.setDataSource(wrapJsoDataSource(jso)); }}

Page 83: Vaadin Components

Elements.registerElement("v-grid", new WCVGrid());

@JsExport@JsTypepublic class WCVGrid extends HTMLElement.Prototype implements LifeCycle.Attached { private Grid<JsArrayMixed> grid = new Grid<>();

@Override public void attachedCallback() { HTMLShadow shadow = createShadowRoot(); shadow.appendChild(style); shadow.appendChild(container);

Panel shadowPanel = wrapAsWidget(container); shadowPanel.add(grid); }

@JsProperty public void setDataSource(JavaScriptObject jso) { grid.setDataSource(wrapJsoDataSource(jso)); }}

Page 84: Vaadin Components

<v-grid>Sass API for theme engine

<v-component> / JS API

GWTAPI

Java Server

Automatic communication

API

AngularJSAPI

Page 85: Vaadin Components

Autogenerated

<v-grid>Sass API for theme engine

<v-component> / JS API

AngularJS GWTAPI

Java Server

Automatic communication

API

PolymerJavaScript

GWT ElementJava

GWT Element

GWT WidgetJava

API

Page 86: Vaadin Components

github.com/vaadin/components

Page 87: Vaadin Components

Getting started

Page 88: Vaadin Components

Designer

Page 89: Vaadin Components

Vaadin Labs

vaadin.com/labs

Page 90: Vaadin Components

Elements

Page 91: Vaadin Components

Vaadin Labs

vaadin.com/labs

Page 92: Vaadin Components

Components

Page 93: Vaadin Components

Vaadin Labs

vaadin.com/labs

Page 94: Vaadin Components

vaadin-components-0.1.0.zip • vaadin-components.js • Polymer HTML fies • GWT API wrappers • AngularJS support

Read more at http://vaadin.com/labsexperimental

Page 95: Vaadin Components

Bower vaadin-components • vaadin-components.js • Polymer HTML fies

• AngularJS support

Read more at http://vaadin.com/labsexperimental

Page 96: Vaadin Components

cdn.vaadin.com • vaadin-components.js • Polymer HTML fies • AngularJS support

Read more at http://vaadin.com/labsexperimental

Page 97: Vaadin Components

vaadin-widgets-7.4.0.jar • Grid Widget API

• Stable and supported • Wide browser support

• IE8+ • All the modern ones: FF, Chrome, iOS, Android, …

• Example: https://github.com/Artur-/grid-gwt

Get from http://vaadin.com/downloadbeta or Maven

Page 98: Vaadin Components

@joonaslehtinen Founder & CEO

[email protected]

slides slideshare.com/joonaslehtinen feel free to reuse :)

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben