Top Banner
22.03.2011
55
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Qooxdoo at B::IT

22.03.2011

Page 2: Qooxdoo at B::IT

• M.Sc. Martin Wittemann

• works at

• framework architect

• started in 2007 with

•@wittemann on

• won $18 in Atlantic City!

ABOUT ME

Page 3: Qooxdoo at B::IT

pure JavaScript

no HTML or CSS know-how for RIAs

no plugin needed

LGPL / EPL

Page 4: Qooxdoo at B::IT

JAVASCRIPT, REALLY?

c=document.body.children[0];h=t=150;L=w=c.width=800;u=D=50;H=[];R=Math.random;for($ in C=c.getContext('2d'))C[$[J=X=Y=0]+($[6]||'')]=C[$];setInterval("if(D)for(x=405,i=y=I=0;i<1e4;)L=H[i++]=i<9|L<w&R()<.3?w:R()*u+80|0;$=++t%99-u;$=$*$/8+20;y+=Y;x+=y-H[(x+X)/u|0]>9?0:X;j=H[o=x/u|0];Y=y<j|Y<0?Y+1:(y=j,J?-10:0);with(C){A=function(c,x,y,r){r&&a(x,y,r,0,7,0);fillStyle=c.P?c:'#'+'ceff99ff78f86eeaaffffd45333'.substr(c*3,3);f();ba()};for(D=Z=0;Z<21;Z++){Z<7&&A(Z%6,w/2,235,Z?250-15*Z:w);i=o-5+Z;S=x-i*u;B=S>9&S<41;ta(u-S,0);G=cL(0,T=H[i],0,T+9);T%6||(A(2,25,T-7,5),y^j||B&&(H[i]-=.1,I++));G.P=G.addColorStop;G.P(0,i%7?'#7e3':(i^o||y^T||(y=H[i]+=$/99),'#c7a'));G.P(1,'#ca6');i%4&&A(6,t/2%200,9,i%2?27:33);m(-6,h);qt(-6,T,3,T);l(47,T);qt(56,T,56,h);A(G);i%3?0:T<w?(A(G,33,T-15,10),fc(31,T-7,4,9)):(A(7,25,$,9),A(G,25,$,5),fc(24,$,2,h),D=B&y>$-9?1:D);ta(S-u,0)}A(6,u,y-9,11);A(5,M=u+X*.7,Q=y-9+Y/5,8);A(8,M,Q,5);fx(I+'¢',5,15)}D=y>h?1:D",u);onkeydown=onkeyup=function(e){E=e.type[5]?4:0;e=e.keyCode;J=e^38?J:E;X=e^37?e^39?X:E:-E}

http://js1k.com/2010-first/demo/635

Page 5: Qooxdoo at B::IT

OBJECT ORIENTATION

qx.Class.define("Bicycle", { extend : qx.core.Object, members : { __speed : 0, speedUp : function(increment) { this.__speed += increment; } }});

Page 6: Qooxdoo at B::IT

OBJECT ORIENTATION

qx.Class.define("Bicycle", { extend : qx.core.Object, members : { __speed : 0, speedUp : function(increment) { this.__speed += increment; } }});

class Bicycle { int speed = 0;

void speedUp(int increment) { speed = speed + increment; }}

Page 7: Qooxdoo at B::IT

OBJECT ORIENTATION

Page 10: Qooxdoo at B::IT

ARCHITECTURE

OO Language Extension Custom EventsCore

Transport BOM DOM Browser Events

BrowserAbstraction

HTML Rendering

CSS Selector AnimationPartsLow-Level

UI Core

Widgets Layouts Theming

Dat

a B

indi

ng

I18n

GUIToolkit

Page 11: Qooxdoo at B::IT

ARCHITECTURE

OO Language Extension Custom EventsCore

Transport BOM DOM Browser Events

BrowserAbstraction

HTML Rendering

CSS Selector AnimationPartsLow-Level

UI Core

Widgets Layouts Theming

Dat

a B

indi

ng

I18n

GUIToolkit

Page 12: Qooxdoo at B::IT

ARCHITECTURE

OO Language Extension Custom EventsCore

Transport BOM DOM Browser Events

BrowserAbstraction

HTML Rendering

CSS Selector AnimationPartsLow-Level

UI Core

Widgets Layouts Theming

Dat

a B

indi

ng

I18n

GUIToolkit

Page 13: Qooxdoo at B::IT

ARCHITECTURE

OO Language Extension Custom EventsCore

Transport BOM DOM Browser Events

BrowserAbstraction

HTML Rendering

CSS Selector AnimationPartsLow-Level

UI Core

Widgets Layouts Theming

Dat

a B

indi

ng

I18n

GUIToolkit

Page 14: Qooxdoo at B::IT

ARCHITECTURE

OO Language Extension Custom EventsCore

Transport BOM DOM Browser Events

BrowserAbstraction

HTML Rendering

CSS Selector AnimationPartsLow-Level

UI Core

Widgets Layouts Theming

Dat

a B

indi

ng

I18n

GUIToolkit

Page 15: Qooxdoo at B::IT

ARCHITECTURE

OO Language Extension Custom EventsCore

Transport BOM DOM Browser Events

BrowserAbstraction

HTML Rendering

CSS Selector AnimationPartsLow-Level

UI Core

Widgets Layouts Theming

Dat

a B

indi

ng

I18n

GUIToolkit

Page 16: Qooxdoo at B::IT

LOW LEVEL FRAMEWORK

• Base for the Widget Toolkit

• Cross browser layer

• Works standalone

• Feature set like and more

Page 17: Qooxdoo at B::IT

USED ON 1UND1.DE

Page 18: Qooxdoo at B::IT
Page 19: Qooxdoo at B::IT

ARCHITECTURE

OO Language Extension Custom EventsCore

Transport BOM DOM Browser Events

BrowserAbstraction

HTML Rendering

CSS Selector AnimationPartsLow-Level

UI Core

Widgets Layouts Theming

Dat

a B

indi

ng

I18n

GUIToolkit

Page 20: Qooxdoo at B::IT

WIDGETS

Page 21: Qooxdoo at B::IT

WIDGETSToolbar

Page 22: Qooxdoo at B::IT

WIDGETSTree

Page 23: Qooxdoo at B::IT

WIDGETS

Window

Page 24: Qooxdoo at B::IT

WIDGETS

TextField

Page 25: Qooxdoo at B::IT

WIDGETS

Button

Page 26: Qooxdoo at B::IT
Page 27: Qooxdoo at B::IT

VIRTUAL• Suitable for huge data sets

• Does not render all data

SelectBox ComboBox List Tree Table

Page 28: Qooxdoo at B::IT

INLINE APPLICATIONplain HTML

qooxdooapplication

Page 29: Qooxdoo at B::IT

LAYOUTS

• Custom layout managers built in JavaScript

• No cross browser issues

• predefined set of layouts

Page 30: Qooxdoo at B::IT

THEMING

ModernClassic

• No CSS knowledge needed

• No cross browser code

Simple

Page 31: Qooxdoo at B::IT

DATA BINDING

Model View

Formating

FilteringSorting

ValidationConverting

Page 32: Qooxdoo at B::IT

IDEAa : A

+ prop :

b : A+ prop :12

<<binding>>

Page 33: Qooxdoo at B::IT

IDEAa : A

+ prop :

b : A+ prop :12 12

<<binding>>

Page 34: Qooxdoo at B::IT

IDEAa : A

+ prop :

b : A+ prop :23 23

<<binding>>

Page 35: Qooxdoo at B::IT

IDEAa : A

+ prop :

b : A+ prop :23 30

a.bind("prop", b, "prop");

<<binding>>

Page 36: Qooxdoo at B::IT

DATA BINDING

Model ViewControllerData Store

Page 37: Qooxdoo at B::IT

DATA BINDING

Model ViewControllerData Store

JSON file / service

Page 38: Qooxdoo at B::IT

DATA BINDING

Model ViewControllerData Store

load JSON, convert to model

Page 39: Qooxdoo at B::IT

DATA BINDING

Model ViewControllerData Store

simple qooxdoo object with properties

Page 40: Qooxdoo at B::IT

DATA BINDING

Model ViewControllerData Store

keeps model and view in sync

Page 41: Qooxdoo at B::IT

DATA BINDING

Model ViewControllerData Store

simple widget like list, tree, form, ...

Page 42: Qooxdoo at B::IT

INTERNATIONALIZATION

• Built-in internationalization support

• Based on standardized files

• Easy to switch during runtime

Page 43: Qooxdoo at B::IT

INTERNATIONALIZATION

var button1 = new qx.ui.form.Button("First Button");this.getRoot().add(button1);

without translation

var button1 = new qx.ui.form.Button(this.tr("First Button"));this.getRoot().add(button1);

with translation

var button1 = new qx.ui.form.Button(this.tr("First Button"));this.getRoot().add(button1);

with translation

Page 44: Qooxdoo at B::IT

USED ON GMX.COM

Page 45: Qooxdoo at B::IT

USED ON GMX.COM

Page 47: Qooxdoo at B::IT

DEVELOPMENT SUPPORT

Page 48: Qooxdoo at B::IT

TOOLING

• Automatic dependency detection

• Packaging for development and deployment

• Optimization and minification

Page 49: Qooxdoo at B::IT

TESTING

• Integrated unit test framework

• Integrated support for Selenium tests

• Continuous integration for the framework

Page 50: Qooxdoo at B::IT

INSPECTOR

• Special qooxdoo debugging tool

• Handy console for debugging

• Select widget by mouse

• Selenium integration

Page 51: Qooxdoo at B::IT

INSPECTOR

Page 52: Qooxdoo at B::IT

ARCHITECTURE

OO Language Extension Custom EventsCore

Transport BOM DOM Browser Events

BrowserAbstraction

HTML Rendering

CSS Selector AnimationPartsLow-Level

UI Core

Widgets Layouts Theming

Dat

a B

indi

ng

I18n

GUIToolkit

Page 53: Qooxdoo at B::IT

ARCHITECTURE

OO Language Extension Custom EventsCore

Transport BOM DOM Browser Events

BrowserAbstraction

HTML Rendering

CSS Selector AnimationPartsLow-Level

UI Core

Widgets Layouts Theming

Dat

a B

indi

ng

I18n

GUIToolkit

Universal Framework

Low Level Framework

RIA Framework

{

Page 54: Qooxdoo at B::IT

ARCHITECTURE

Low Level Framework

RIA Framework

{OO Language

Extension Custom Events

HTML Rendering

CSS Selector Animation

UI Core

Widgets Layouts Theming

Transport

Data

Bin

ding

Parts

I18n

BOM DOM Browser Events

Core

BrowserAbstraction

Low-Level

GUIToolkit

Mobile

Widgets

Mobile Framework

NEW!

Universal Framework