+ All Categories
Home > Technology > DirectToWeb 2.0

DirectToWeb 2.0

Date post: 04-Dec-2014
Category:
Upload: wo-community
View: 1,775 times
Download: 0 times
Share this document with a friend
Description:
 
67
DirectToWeb 2.0 Ravi Mendis
Transcript
Page 1: DirectToWeb 2.0

DirectToWeb 2.0Ravi Mendis

Page 2: DirectToWeb 2.0

Why Web 2.0?

Page 3: DirectToWeb 2.0
Page 4: DirectToWeb 2.0

Problem• Fragile

• Large EOModel

• ~10^3 Rules

• ~10^2 Page Configs

• ~10^2 Custom Components

Page 5: DirectToWeb 2.0

Solution• Tests

• Selenium Support

• Consolidate Codebase

• Custom Components

• Rules

Page 6: DirectToWeb 2.0

Objectives

Page 7: DirectToWeb 2.0

Objectives• Hooks

• Selenium

• Ajax

• Themed UI

Page 8: DirectToWeb 2.0

How?

Page 9: DirectToWeb 2.0

DirectToWeb 2.0

• Semantic HTML

• Table-less

• Well-formed

• xHTML5 Validated

• CSS3

Page 10: DirectToWeb 2.0

DirectToWeb 2.0• Semantic HTML

• CSS3

• Ajax

• Dynamic D2W

• Scriptaculous

• Selenium

Page 11: DirectToWeb 2.0

Semantic HTML

Page 12: DirectToWeb 2.0

Semantic HTML

Page 13: DirectToWeb 2.0

Semantic HTML - Example

Page 14: DirectToWeb 2.0

Semantic HTML - Example

// Look Ma - No tables!<h2>Menu</h2><ul> <li class="home"> <a class="current" href="/cgi-bin/WebObjects/slowmation.woa/wa/default">Home</a> </li> <li class="public"> <a href="/cgi-bin/WebObjects/slowmation.woa/wa/galleryPage">Example slowmations</a> </li> <li class="resources"> <a href="/cgi-bin/WebObjects/slowmation.woa/wa/resourcesPage">Teaching resources</a> </li> <li class="software"> <a href="/cgi-bin/WebObjects/slowmation.woa/wa/softwarePage">Useful software</a> </li> <li class="instructions"> <a href="/cgi-bin/WebObjects/slowmation.woa/wa/instructionsPage">Instructions</a> </li> <li class="publications"> <a href="/cgi-bin/WebObjects/slowmation.woa/wa/researchPage">Research</a> </li> <li class="contact"> <a href="/cgi-bin/WebObjects/slowmation.woa/wa/contactsPage">Contact</a> </li></ul>

Page 15: DirectToWeb 2.0

Semantic HTML• No Tables!

...only for Tabular Data

• Use:

• <div>, <span>

• Lists: <ul>, <ol>

• Text: <p>

• No Images

Page 16: DirectToWeb 2.0

CSS3• ALL Layout

• Positions & Margins

• Columns

• Colours & Fonts

• Images

• 2D Effects

Page 17: DirectToWeb 2.0

Well Formed

Page 18: DirectToWeb 2.0

Well-Formed HTML

// Closed Elements.// E.g:<div>...</div>

<br />

// proper nesting<ul> <li>...</li></ul>

Page 19: DirectToWeb 2.0

Well-Formed HTML

// Unique IDs<div id=”a”>Hey, i’m unique...</div>

Page 20: DirectToWeb 2.0

Validate

Page 21: DirectToWeb 2.0

WO - elementID<form name="f_1_1" method="post" action="/cgi-bin/WebObjects/MyApp.woa/wo/vrsdatqeeGoxo1tAggnGoM/0.1.1"> <div>Username: <input type="text" name="1.1.1" /> </div> <div>Password: <input type="password" name="1.1.3" /> </div> <div><input title="Login" name="1.1.4" type="submit" /></div></form>

Page 22: DirectToWeb 2.0

Default Assignments • PageConfig → UID

• <entity, task>

• D2W Context → UID

• <entity, task, key>

Page 23: DirectToWeb 2.0

Default Assignments • idForPageConfiguration

• idForProperty

• nameForProperty (Forms)

Page 24: DirectToWeb 2.0

Default Assignments • Hooks

• CSS3

• Ajax

• Selenium

Page 25: DirectToWeb 2.0

D2W + Semantic HTML

Page 26: DirectToWeb 2.0

=

Page 27: DirectToWeb 2.0

Page 28: DirectToWeb 2.0

CSS3 - Customizations

• Title

• Buttons

Page 29: DirectToWeb 2.0

CSS3 - Pseudo-Classes

div#a h2.entity:after { content: " Management";}

Page 30: DirectToWeb 2.0

CSS3 - Pseudo-Classes// Backdiv#a ul.batch_nav_bar li.back a.return span:before { content: "< ";}

// Adddiv#a #ListActivityType ul.batch_nav_bar li.add a:after { content: " a New Activity";}

Page 31: DirectToWeb 2.0

CSS3 - Web Inspector

Page 32: DirectToWeb 2.0

Custom UI

Page 33: DirectToWeb 2.0

Rules + CSS

• ERD2WDisplayString

• D2W Delayed Assignment

• Key “class”

• CSS

• Image Replacement

Page 34: DirectToWeb 2.0

D2W Rules

Page 35: DirectToWeb 2.0

CSS - Image Replacement/* D2WDisplayBoolean2.css */

span.true, span.false { text-indent: -5000px; display: block; width: 16px; height: 16px;}

span.true { background: url(/WebObjects/Frameworks/JavaDirectToWeb.framework/WebServerResources/CheckboxOn.gif);}

span.false { background: url(/WebObjects/Frameworks/JavaDirectToWeb.framework/WebServerResources/CheckboxOff.gif);}

Page 36: DirectToWeb 2.0

Ajax

Page 37: DirectToWeb 2.0

Ajax

Rich ClientStateless Services:

XML,JSON

Stateless Servers:

Page 38: DirectToWeb 2.0

http://

Thin-clientStateful Servers:

WebObjects

Page 39: DirectToWeb 2.0

Demo

Page 40: DirectToWeb 2.0

Ajax

.show().hide() .toggle()

Element.showElement.hide Element.toggle

Page 41: DirectToWeb 2.0

Embrace Statelessness!

Page 42: DirectToWeb 2.0

Ajax Actions

jQuery.get()jQuery.post() .load()

Ajax.RequestAjax.Updater .update()

Page 43: DirectToWeb 2.0

Ajax Actions

Page Fragment

Web Page

Page 44: DirectToWeb 2.0

Web Actions

Web Page

Web Page

Page 45: DirectToWeb 2.0

Web State

WebObjects

Page 46: DirectToWeb 2.0

Ajax State

WebObjects

Page 47: DirectToWeb 2.0

No Backtrack Too Far!

Page 48: DirectToWeb 2.0

Dynamic D2W

Page 49: DirectToWeb 2.0

Demo

Page 50: DirectToWeb 2.0

Dynamic D2W

• NO Custom Components!

• Embedded List

• Ajax

• Delayed Assignment

Page 51: DirectToWeb 2.0

Dynamic D2W - Rules

Page 52: DirectToWeb 2.0

Dynamic D2W - Example

• restrictedChoiceKey

• Ajax updater

Page 53: DirectToWeb 2.0

Scriptaculous

Page 54: DirectToWeb 2.0

Effect - Toggle

• Effect.toggle

• ID

• slide

Page 55: DirectToWeb 2.0

Effect - Toggle// WOD

CollapseLink: WOHyperlink { href = "#"; onclick = onClick;}

Page 56: DirectToWeb 2.0

Effect - Toggle// Java - detail togglepublic String onClick() { return "Effect.toggle($('" + tbodyID() + "'), 'slide', {duration: 0.8}); return false;"; // tbodyID = Customer2_detail}

Page 57: DirectToWeb 2.0

Effect - Toggle// HTML<tr class = "detail"> <td class = "detail"> <div id = "Customer2_detail"> <div>....</div> // Second div nesting necessary for scriptaculous </div> </td></tr>

Page 58: DirectToWeb 2.0

Selenium

Page 59: DirectToWeb 2.0

XPath/* Save button *///button[@class='save ERXSubmitButton-submitAction']

/* Password field *///div[@id='Student_edit_password_container']/input

/* Error message *///div[@id='messages']/span[@class='error']

Page 61: DirectToWeb 2.0

Q: How Do I Modernize My D2W Application?

Page 62: DirectToWeb 2.0

Divalite

Page 63: DirectToWeb 2.0

Migration - Phase #1

• HTML5 & CSS3

• Strip Tables

• Themes

• Selenium Tests

Page 64: DirectToWeb 2.0

Migration - Phase #2• Ajax

• Widgets

• Effects

• Selenium Tests (Update)

Page 65: DirectToWeb 2.0

Migrating to DirectToWeb 2.0

Page Configurations

Rules Custom Components

34 126 2

40 183 4

67 180 0

Page 66: DirectToWeb 2.0

Q&A

Page 67: DirectToWeb 2.0

• Semantic HTMLhttp://en.wikipedia.org/wiki/Semantic_HTML

• What is Diva Look?http://wiki.objectstyle.org/confluence/display/WO/ERDivaLook

• Podcast - Test Driven Development with WebObjectshttp://www.wocommunity.org/podcasts/WOWODCW09-TDD.mov

References


Recommended