combining advanced javascript/dom techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf ·...

94
Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces Thomas Fuchs

Upload: nguyenhanh

Post on 12-Jul-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Combining advanced JavaScript/DOM techniques

and Ajax to build better User Interfaces

Thomas Fuchs

Page 2: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Or:Create Happy Users

Thomas Fuchs

Page 3: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Thomas Fuchs

• wollzelle• Core team member of

Ruby on Rails

• script.aculo.us

• mir.aculo.us

Page 4: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

• Branding/Design/Web

• fluxiom Digital Asset Managementhttp://www.fluxiom.com

• http://www.wollzelle.com/

Page 5: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Tools

Page 6: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

JavaScript,as seen by the browser

Source: http://www.pollux.franken.de/KNF/

Page 7: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

JavaScript Frameworksmake you…

Page 8: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

…write less code…

Page 9: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

…code more elegantly…

Page 10: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

…deal less withbrowser bugs…

Page 11: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

…and ultimately stay happy.

Page 12: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Concentrate on your application…

Page 13: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

…and not onbrowser bugs.

Page 14: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

1.5

Page 15: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Prototype isJavaScript, reloaded

Page 16: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Ajax

Page 17: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Basic Ajax calls(HTML snippets)

Page 18: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Ajax Forms

Page 19: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Ajax behavioursServer-side JavaScript generation:

Prototype automatically evaluates JavaScript when Content-type: text/javascript is set

The hot topic

of 2006!

Page 20: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Hooks for integration with UI enhancements(like activity indicators)

Page 21: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Extensions tobuilt-in object types

Page 22: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces
Page 23: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Enumerables

Page 24: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces
Page 25: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

$ and $$

Page 26: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces
Page 27: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Direct Element extensions

Page 28: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

vs

Prototype 1.4

Prototype 1.5

Page 29: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

.update()

.replace()

.remove()

.visible()

.setStyle()

.addClassName()

(…and lots more)

Page 30: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Events(without cross-browser

pain)

Page 31: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces
Page 32: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

http://www.snook.ca/archives/000531.php

cheat sheet!

Page 33: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Of course,just think of it as magic.

Sam Stephenson,author of Prototype

Page 34: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

1.6

Page 35: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Visual effects

Page 36: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Drag and Drop

Page 37: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

2 lines of code!

Page 38: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Ready-to-use controls

Page 39: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Real-time search

Autocompleting

Drag and Drop

Inplace editor

Slider

Page 40: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Plus some extrasJavaScript unit testing, DOM Builder

Page 41: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces
Page 42: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Docs & Help

• Wiki:http://wiki.script.aculo.us/

• Mailing list:http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs

• IRC channel:#prototype on freenode.net

Page 43: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Add-ons

Page 44: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

event:Selectors

http://encytemedia.com/event-selectors/

Page 45: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Lightbox JS

http://www.huddletogether.com/projects/lightbox2/

Page 46: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Windows

http://blogus.xilinus.com/pages/javawin

Page 47: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Visual effectsSliding panels and homegrown effects

Page 48: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Advancedengine for visual effects

Time-based

Complex effects easily possible

Page 49: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

More than just „eye candy“

Visual feedback

Loading times „feel shorter“

Can help move away from proprietary plugins

Page 50: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

On board

Often-used effects

„Yellow Fade Technique“

Fade in and out

Sliding panels

Puff, Shake, etc.

Page 51: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces
Page 52: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces
Page 53: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces
Page 55: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Do-it-yourself effects

Very easy to do

Automatically use all the features from the visual

effects engine

Page 57: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Activity indicatorsShow what‘s going on

Page 58: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

„There‘s something going on, wait a sec“

Revival of theanimated GIF

Both „per use“ and „global“ indicators possible

Page 59: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

„Local“ indicator

for a specific request,show/hide indicator image

Page 60: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

„Global“ indicator

for a all Ajax requests,appear/fade an indicator image

Page 61: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Need an indicator image?

http://www.ajaxload.info/

Page 62: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Annonyances & Debugging

Page 63: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Lessons learnedfrom a year of Ajax

Page 64: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Not all Browsers are created equal.

Page 65: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

CSS

Page 66: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

CSS can eliminate or save on server accesses

HTML sizes are reduced

Be creative, CSS is extremely capable

Page 67: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

JavaScript performance

Page 68: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

DOM-API can be slow

Firefox is the slowest (better in 1.5)

Caching references in JavaScript vars

.innerHTML is your friend

Venkman profiling

Page 69: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Ajax Security

Page 70: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Ajax is as secure as any browser request

So: Don‘t trust it

Always verify user submitted data on the server

Page 71: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Which data format?

Page 72: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Trivial updates: HTML

Complex updates: JavaScript

Use HTTP caching

Don‘t overengineer

be pragmatic!

Page 73: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Some helpful hints

Page 74: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Local calls only

• Ajax can only call originating server

• Also works with file:// URLs

• Use server-side proxying if you want to tie in other services

Page 75: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

The Back button

• The browser back button works by returning the user to the last „non-ajax“ loaded page

• Keep that in mind, especially for public sites

• Workarounds available, but aren‘t working with all browsers

Page 76: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

display: none

• Don‘t use display:none in external CSS

• Browser can‘t determine the original (built-in) display value of an element (like „block“ for DIVs, and „inline“ for SPANs)

• Use the style attribute instead:<div style=“display:none“>...</div>

Page 77: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Internet Explorerimage cache

• Internet Explorer doesn‘t use its cache when HTML page fragments that are inserted via Ajax are loading images (IMG tag)

• Some proprietary HTTP headers exist to work around this (hey, it‘s Microsoft!):

• http://mir.aculo.us/articles/2005/08/28/internet-explorer-and-ajax-image-caching-woes

Page 78: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

The verboten IDsof Internet Explorer

• IE 6 has some bugs regarding naming ID attributes

• Don‘t use: „length“, „item“, „namedItem“, „tags“ or „urns“

• http://meyerweb.com/eric/thoughts/2005/08/29/reserved-id-values/

Page 79: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

JavaScript objectsnew Ajax.Updater('test', 'update.php', { onComplete: function() {}, insertion: Insertion.Top,});

This code works in Firefox,but doesn‘t in Safari.

evil commaof browser

death

Always test in all browsers you want to support!

Page 80: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Debugging JavaScript

Page 81: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

No rocket surgery here

Page 82: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

The first rule of AJAX

debugging:Use Firefox

Page 83: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

+Extensions

The second rule of AJAX

debugging:Use Firefox

Page 84: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Firebug

Page 85: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Firebug

Version 0.4 will include a lightweight JavaScript debugger

Page 86: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Web DeveloperExtension

Page 87: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Venkman JavaScript Debugger

also does

profiling!

Page 88: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Tamperdata

Page 89: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

The third rule:

Test with all browsers

you want to support

Page 90: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Safari Web Inspector

Page 92: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

„It‘s more like Web 3.0“What can you actually do with all this?

Page 93: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Available nowwww.fluxiom.com

Page 94: Combining advanced JavaScript/DOM techniques and …mir.aculo.us/stuff/orcreatehappyusers.pdf · Combining advanced JavaScript/DOM techniques and Ajax to build better User Interfaces

Q & A