SlideShare a Scribd company logo
1 of 69
Download to read offline
Building Accessible User Interfaces
                   with jQuery and Fluid Infusion



  Colin Clark, Fluid Project Technical Lead,
  Adaptive Technology Resource Centre
Monday, September 14, 2009
Topics We’ll Cover

                • The Fluid community
                • Introducing Infusion
                • Developing accessible JavaScript
                • Infusion’s Architecture
                • Techniques for portals, mashups, CMS’s
                • Where we’re headed
Monday, September 14, 2009
Fluid...
                               http://fluidproject.org

                     • Is an open source community of
                      • Designers
                      • Developers
                      • Accessibility experts
                     • Helps other open communities
                     • Consists of universities, museums and
                       individuals

Monday, September 14, 2009
What We Do
                     • Offer design advice and resources
                     • Contribute to other communities:
                      • jQuery UI
                      • Dojo
                      • W3C Accessibility
                     • Build Infusion, our JavaScript
                       application framework

Monday, September 14, 2009
Introducing




                             http://fluidproject.org/products/infusion/
Monday, September 14, 2009
World, Meet Infusion

                • Application framework built on top of jQuery
                • The culmination of our work helping others
                • Designed for usability and accessibility
                • Open architecture: everything is configurable

Monday, September 14, 2009
What’s in Infusion?


                • A development framework for building apps
                • UI components you can reuse and adapt
                • Lightweight CSS framework for styling
                • Accessibility tools and plugins for jQuery

Monday, September 14, 2009
Building Great UIs Is Hard

                     • Your code gets unruly as it grows
                     • UIs are hard to reuse or repurpose
                     • Design change requires big code change
                     • Accessibility is confusing
                     • Combining different code/libraries doesn’t
                       always work


Monday, September 14, 2009
Flexible User Interfaces


                Infusion is an application framework designed to
                provide unprecedented flexibility while
                preserving interoperability.




Monday, September 14, 2009
Types of JavaScript Tools

                     • Foundational Toolkits
                     • Application Frameworks
                             ... compare and contrast




Monday, September 14, 2009
Foundational toolkits

               •      Totally presentation focused
               •      DOM manipulation
               •      Event binding                     jQuery
               •      Ajax                           Prototype
                                                     Dojo core



Monday, September 14, 2009
Application frameworks

               •      Model notifications “something changed here”
               •      Views to help keep your presentational code clean
               •      Data binding to sync the display with your model

                                                                 SproutCore
                                                                  Dojo/Dijit/
                                                                      Dojox
                                                                 Cappuccino


Monday, September 14, 2009
Infusion is Different

                     • Accessibility baked right in
                     • Carefully designed interactions
                     • Markup is in your control
                     • Not the same old MVC
                     • Supports portals, mashups and CMS’s

Monday, September 14, 2009
Deeply Accessible



Monday, September 14, 2009
What is Accessibility?



Monday, September 14, 2009
A New Definition

                   • Accessibility is the ability of the system to
                             accommodate the needs of the user
                   • Disability is the mismatch between the user
                             and the interface provided
                   • We all experience disability
                   • Accessible software = better software

Monday, September 14, 2009
Assistive Technologies
                   • Present and control the user interface in
                             different ways
                   • Not just screen readers!
                   • Use built-in operating system APIs to
                             understand the user interface

                                                             Screen readers
                                                           Screen magnifiers
                                                        On-screen keyboards
Monday, September 14, 2009
DHTML: A New Can of Worms


                   • Shift from documents to applications
                   • Familiar a11y techniques aren’t enough
                   • Most DHTML is completely inaccessible
                   • New techniques are still being figured out

Monday, September 14, 2009
The Problem

                   • Custom widgets often look, but don’t act,
                             like their counterparts on the desktop
                   • HTML provides only simple semantics
                   • Not enough information for ATs
                   • Dynamic updates require new design
                             strategies to be accessible


Monday, September 14, 2009
The Solution


                   • Describe user interfaces with ARIA
                   • Add consistent keyboard controls
                   • Provide flexible styling and presentation


Monday, September 14, 2009
Supporting Assistive Technology




Monday, September 14, 2009
Opaque Markup
                      // These are tabs. How would you know?
                      <ol>
                        <li><a href=”#cats”>Cats</a></li>
                        <li><a href=”#dogs”>Dogs</a></li>
                        <li><a href=”#gators”>Gators</a></li>
                      </ol>
                      <div>
                        <div id=”cats”>Cats meow.</div>
                        <div id=”dogs”>Dogs bark.</div>
                        <div id=”gators”>Gators bite.</div>
                      </div>


Monday, September 14, 2009
Opaque Markup: Tabs




Monday, September 14, 2009
ARIA

                   • Accessible Rich Internet Applications
                   • W3C specification in the works
                   • Fills the semantic gaps in HTML
                   • Roles, states, and properties
                   • Live regions

Monday, September 14, 2009
Roles, States, Properties
             • Roles describe widgets not present in HTML 4
                   • slider,        menubar, tab, dialog

             • Properties describe characteristics:
                   •         draggable, hasPopup, required

             • States describe what’s happening:
                   •         busy, disabled, selected, hidden


Monday, September 14, 2009
Using ARIA
  // Now *these* are Tabs!
  <ol id=”animalTabs” role=”tablist” tabindex=”0”>
    <!-- Individual Tabs shouldn’t be focusable -->
    <!-- We’ll focus them with JavaScript instead -->
    <li role=”tab”><a href=”#” tabindex=”-1”>Cats</a></li>
    <li role=”tab”><a href=”#” tabindex=”-1”>Dogs</a></li>
    <li role=”tab”><a href=”#” tabindex=”-1”>Gators</a></li>
  </ol>
  <div id=”panels”>
    <div role=”tabpanel” aria-labelledby=”cats”>Cats meow.</div>
    <div role=”tabpanel” aria-labelledby=”dogs”>Dogs bark.</div>
    <div role=”tabpanel” aria-labelledby=”gators”>Gators bite.</div>
  </div>



Monday, September 14, 2009
Adding ARIA in Code
                 // Identify the container as a list of tabs.
                 tabContainer.attr("role", "tablist");

                 // Give each tab the "tab" role.
                 tabs.attr("role", "tab");

                 // Give each panel the appropriate role,
                 panels.attr("role", "tabpanel");
                 panels.each(function (idx, panel) {
                     var tabForPanel = that.tabs.eq(idx);
                     // Relate the panel to the tab that labels it.
                     $(panel).attr("aria-labelledby", tabForPanel[0].id);
                 });



Monday, September 14, 2009
Keyboard Accessibility



Monday, September 14, 2009
Keyboard Navigation

                   • Everything that works with the mouse
                             should work with the keyboard
                   • ... but not always in the same way
                   • Support familiar conventions
                              http://dev.aol.com/dhtml_style_guide

Monday, September 14, 2009
Keyboard Conventions
                   • Tab key focuses the control or widget
                   • Arrow keys select an item
                   • Enter or Spacebar activate an item

                   • Tab is handled by the browser. For the rest,
                             you need to write code. A lot of code.


Monday, September 14, 2009
Keyboard a11y: Tabs




Monday, September 14, 2009
Tabindex examples
                      <!-- Tab container should be focusable -->
                      <ol id=”animalTabs” tabindex=”0”>
                        <!-- Individual Tabs shouldn’t be focusable -->
                        <!-- We’ll focus them with JavaScript instead -->
                        <li id=”tab1”>
                          <a href=”#cats” tabindex=”-1”>Cats</a>
                        </li>
                        <li id=”tab2”>
                          <a href=”#cats” tabindex=”-1”>Dogs</a>
                        </li>
                        <li id=”tab3”>
                          <a href=”#cats” tabindex=”-1”>Alligators</a>
                        </li>
                      </ol>


Monday, September 14, 2009
Making Things Tabbable
               • Tabindex varies subtly across browsers
               • jquery.attr() normalizes it as of 1.3
               • For all the gory details:
                      http://fluidproject.org/blog/2008/01/09/
                         getting-setting-and-removing-tabindex-values-with-javascript/


          // Make the tablist accessible with the Tab key.
          tabContainer.attr("tabindex", "0");
          // And take the anchors out of the Tab order.
          $(“a”, tabs).attr("tabindex", "-1");
Monday, September 14, 2009
Adding the Arrow Keys
         // Make each tab accessible with the left and right arrow keys.
         tabContainer.fluid("selectable", {
             selectableSelector: that.options.selectors.tabs,
             direction: fluid.a11y.orientation.HORIZONTAL,
             onSelect: function (tab) {
                 $(tab).addClass(that.options.styles.highlighted);
             },

                   onUnselect: function (tab) {
                       $(tab).removeClass(that.options.styles.highlighted);
                   }
         });




Monday, September 14, 2009
Making Them Activatable

             // Make each tab activatable with Spacebar and Enter.
             tabs.fluid("activatable", function (evt) {
                 // Your handler code here. Maybe the same as .click()?
             });




Monday, September 14, 2009
Documentation

              • Tutorial:
                 http://wiki.fluidproject.org/display/fluid/Keyboard+Accessibility+Tutorial


              • API Reference:
                 http://wiki.fluidproject.org/display/fluid/Keyboard+Accessibility+Plugin+API




Monday, September 14, 2009
Infusion Goes Deeper

                   • jQuery Keyboard Navigation Plugin
                   • ARIA everywhere
                   • Everything is highly adaptable and flexible
                   • UI Options and the Fluid Skinning System:
                    • Users can customize their environment

Monday, September 14, 2009
UI Options
                   • One size doesn’t fit all
                   • Allows users to customize your app:
                    • layout
                    • styling
                    • navigation
                   • Uses FSS by default; can be configured to
                             work with your own classes

Monday, September 14, 2009
UI Options & FSS




Monday, September 14, 2009
UI Options & FSS




Monday, September 14, 2009
CSS Frameworks
                      “If you’re going to use a framework, it
                      should be yours; one that you’ve created.
                      You can look at existing frameworks for
                      ideas and hack at it. But the professionals
                      in this room are not well served by picking
                      up a framework and using it as-is.”
                                                     - Eric Meyer


Monday, September 14, 2009
Fluid Skinning System

                   • FSS is built to be hacked on
                   • Provides a core set of building blocks
                   • Reset, text, layouts, themes
                   • Namespaced: no conflicts with your stuff
                   • Themes for better legibility & readability
                             http://wiki.fluidproject.org/x/96M7
Monday, September 14, 2009
Open Architecture



Monday, September 14, 2009
Markup Agnosticism
                     • HTML is so fundamental to Web UIs
                     • Others lock away markup in a black box
                     • Markup should be totally free to edit, adapt,
                             or replace
                     • Libraries shouldn’t bake in assumptions
                             about your markup
                     • Unobtrusiveness everywhere
Monday, September 14, 2009
Handling Markup: Dojo
         <div class="dijitDialog" tabindex="-1" waiRole="dialog"
         waiState="labelledby-${id}_title">
            <div dojoAttachPoint="titleBar" class="dijitDialogTitleBar">
            <span dojoAttachPoint="titleNode" class="dijitDialogTitle"
         id="${id}_title"></span>
            <span dojoAttachPoint="closeButtonNode"
         class="dijitDialogCloseIcon" dojoAttachEvent="onclick: onCancel,
         onmouseenter: _onCloseEnter, onmouseleave: _onCloseLeave"
         title="${buttonCancel}">
                <span dojoAttachPoint="closeText" class="closeText"
         title="${buttonCancel}">x</span>
            </span>
            </div>
                <div dojoAttachPoint="containerNode"
         class="dijitDialogPaneContent"></div>
         </div>

Monday, September 14, 2009
Handling Markup: jQuery UI




Monday, September 14, 2009
Handling Markup: Infusion
      fluid.defaults("fluid.fileQueueView", {
         selectors: {
           fileRows: ".flc-uploader-file",
           fileName: ".flc-uploader-file-name",
           fileSize: ".flc-uploader-file-size",
           fileIconBtn: ".flc-uploader-file-action",
           errorText: ".flc-uploader-file-error"
      },




Monday, September 14, 2009
Components
      “Components suck. Apps built with components look like it”

                     • Infusion components aren’t black boxes
                     • Fundamentally adaptable:
                      • Change the markup
                      • Restyle with CSS
                      • Add/replace actual behaviour
                     • Everything is super-loosely coupled
Monday, September 14, 2009
Component Families: Reorderer




                    lists                    images             layouts



                             Infusion components come in families



Monday, September 14, 2009
More Components




                             Uploader           Inline Edit




                                        Pager
Monday, September 14, 2009
Model, View... but not Controller


                     • MVC is a given in most framework
                     • JavaScript’s functional idioms offer
                             alternatives (hint: events)
                     • Infusion has no controller layer at all
                     • ... and none of the classical inheritance cruft
                             that usually goes with it


Monday, September 14, 2009
Traditional MVC

                                              Model


                                                       n
                                                   atio
                                              oti c
                             State Query                               State Change
                                            ge N
                                               n
                                           Cha




                                                    View Selection


                                View                                 Controller
                                                   User Gestures




Monday, September 14, 2009
The Problem with Controllers

                 • Controllers are the least defined
                 • What’s “glue?”
                 • Always referred to as the non-reusable part
                 • MVC has been warped over the decades
                 • The framework should take care of the glue

Monday, September 14, 2009
Infusion Models & Views
                                                          Model
    • Controller is replaced by events                  Change Noti cation




    • Reads to the model are transparent
    • State changes and notification are
           just events                           State Query         State Change



    • Transparent architecture: you can use                View
           the same events we use
                                                     Framework

Monday, September 14, 2009
Plain Old Models

                   • M is the most important thing in your app
                   • Data needs to travel seamlessly between
                             client and server
                   • Most toolkits force a model to extend
                             some base class or particular structure

                             In Infusion, models are just plain old JSON


Monday, September 14, 2009
Playing Nice With Others



Monday, September 14, 2009
Portals, Mashups, and CMS’s


               • These days, diverse code and markup coexists
               • Most JavaScript is written as if it owns the
                      whole browser
               • As you combine stuff, things can break
               • Namespacing and privacy is essential

Monday, September 14, 2009
Writing Collision-Free JavaScript

           • Put code in a unique namespace
           • Use closures for privacy
           • Support more than one on the page
                 •      Scope all variables to an instance

                 •      Avoid hard-baking ID selectors

           • Constrain selectors within a specific element
Monday, September 14, 2009
Keeping it to Ourselves

                   • Infusion takes namespacing seriously
                   • We won’t steal your names
                   • Components are carefully scoped
                   • We won’t accidently grab the wrong stuff
                   • Infusion doesn’t expect control of the page

Monday, September 14, 2009
Tying it All Together

                   • Infusion helps you with accessibility
                   • Components you can really work with
                   • Simple structure so your code can grow
                   • Totally transparent, event-driven design
                   • Markup and models are under your control
                   • No inheritance or controller cruft
Monday, September 14, 2009
Where We’re Going



Monday, September 14, 2009
Infusion Next Steps

                • Infusion 1.2 coming in October:
                 • New lightweight Inversion of Control
                 • Data Grid and reworked Pager components
                 • Lots of bug fixes
                 • New demos portal with example code
                 • Screencasts
Monday, September 14, 2009
Fluid Engage

                • Open source collaboration with museums
                • Visitor engagement: learn and contribute
                • Use phones visitors bring into the museum
                • Mobile apps and in-gallery kiosks
                • All built with open source Web technology
Monday, September 14, 2009
Our Mobile Approach


                     • No hard intrusions on your content
                     • Don’t subvert good Web idioms
                     • Your choice: native-like or webbish


Monday, September 14, 2009
Infusion Mobile


                • mFSS: themes for iPhone, Android, more
                • ScreenNavigator: unobtrusive mobile navigation
                • Components designed for the mobile Web


Monday, September 14, 2009
Kettle: Server-side JS
                     • Built on top of the JSGI server spec
                     • Don’t need lots of new APIs on server
                     • Envjs provides a full browser
                     • Infusion as application framework
                     • Choose where markup gets rendered
                     • Natural, familiardesigners for Web
                       developers and
                                         environment


Monday, September 14, 2009
Wrapping Up
                     • Tools for everyone:
                      • ARIA
                      • Dojo
                      • jQuery
                      • Infusion
                     • Give Infusion a try and let us know
                     • We’re a friendly community!
Monday, September 14, 2009
Wrapping Up



                    Please fill out an evaluation.



Monday, September 14, 2009
Questions?
                             http://fluidproject.org




Monday, September 14, 2009

More Related Content

Viewers also liked

11 оригинальных способов использования Wrike
11 оригинальных способов использования Wrike11 оригинальных способов использования Wrike
11 оригинальных способов использования WrikeWrike
 
McCormick Mobile Media - Mobile Giving
McCormick Mobile Media - Mobile GivingMcCormick Mobile Media - Mobile Giving
McCormick Mobile Media - Mobile GivingEric McCormick
 
High Performance Green Building: What is it worth?
High Performance Green Building: What is it worth?High Performance Green Building: What is it worth?
High Performance Green Building: What is it worth?scottbrooker
 
Chapter 1 section 3 models
Chapter 1 section 3 modelsChapter 1 section 3 models
Chapter 1 section 3 modelscharsh
 
Transmedia and the Independent Filmmaker
Transmedia and the Independent FilmmakerTransmedia and the Independent Filmmaker
Transmedia and the Independent FilmmakerRobert Pratten
 
New book ch 1, sect 1
New book ch 1, sect 1New book ch 1, sect 1
New book ch 1, sect 1charsh
 
Presentatie Workshop FP Advance Sept 2010 Fv
Presentatie Workshop FP Advance Sept 2010 FvPresentatie Workshop FP Advance Sept 2010 Fv
Presentatie Workshop FP Advance Sept 2010 Fvuw84me2
 
Kagaya Yutaka Art - PPS by Sonia Medeiros
Kagaya Yutaka Art - PPS by Sonia MedeirosKagaya Yutaka Art - PPS by Sonia Medeiros
Kagaya Yutaka Art - PPS by Sonia MedeirosSonia Medeiros
 
Trend Report July 2011: Facebook, Brands & TV in Germany
Trend Report July 2011:  Facebook, Brands & TV in GermanyTrend Report July 2011:  Facebook, Brands & TV in Germany
Trend Report July 2011: Facebook, Brands & TV in GermanyZucker.Kommunikation
 
David Wei And Changhao Jiang Presentation
David Wei And Changhao Jiang PresentationDavid Wei And Changhao Jiang Presentation
David Wei And Changhao Jiang PresentationAjax Experience 2009
 
Earths Interior Andie
Earths Interior AndieEarths Interior Andie
Earths Interior Andiecharsh
 
Team Census Ulhaas10 Brochure
Team Census   Ulhaas10 BrochureTeam Census   Ulhaas10 Brochure
Team Census Ulhaas10 Brochurephilemons
 
How to Create a Circle of Raving Fans Through Social Media
How to Create a Circle of Raving Fans Through Social MediaHow to Create a Circle of Raving Fans Through Social Media
How to Create a Circle of Raving Fans Through Social MediaEduCyber, Inc.
 
Ga Minerals
Ga MineralsGa Minerals
Ga Mineralscharsh
 

Viewers also liked (20)

4.2 voorlichting
4.2 voorlichting4.2 voorlichting
4.2 voorlichting
 
11 оригинальных способов использования Wrike
11 оригинальных способов использования Wrike11 оригинальных способов использования Wrike
11 оригинальных способов использования Wrike
 
McCormick Mobile Media - Mobile Giving
McCormick Mobile Media - Mobile GivingMcCormick Mobile Media - Mobile Giving
McCormick Mobile Media - Mobile Giving
 
High Performance Green Building: What is it worth?
High Performance Green Building: What is it worth?High Performance Green Building: What is it worth?
High Performance Green Building: What is it worth?
 
Chapter 1 section 3 models
Chapter 1 section 3 modelsChapter 1 section 3 models
Chapter 1 section 3 models
 
Transmedia and the Independent Filmmaker
Transmedia and the Independent FilmmakerTransmedia and the Independent Filmmaker
Transmedia and the Independent Filmmaker
 
New book ch 1, sect 1
New book ch 1, sect 1New book ch 1, sect 1
New book ch 1, sect 1
 
Artha Graha Peduli
Artha Graha PeduliArtha Graha Peduli
Artha Graha Peduli
 
Presentatie Workshop FP Advance Sept 2010 Fv
Presentatie Workshop FP Advance Sept 2010 FvPresentatie Workshop FP Advance Sept 2010 Fv
Presentatie Workshop FP Advance Sept 2010 Fv
 
Kagaya Yutaka Art - PPS by Sonia Medeiros
Kagaya Yutaka Art - PPS by Sonia MedeirosKagaya Yutaka Art - PPS by Sonia Medeiros
Kagaya Yutaka Art - PPS by Sonia Medeiros
 
Ai Tshort
Ai TshortAi Tshort
Ai Tshort
 
Trend Report July 2011: Facebook, Brands & TV in Germany
Trend Report July 2011:  Facebook, Brands & TV in GermanyTrend Report July 2011:  Facebook, Brands & TV in Germany
Trend Report July 2011: Facebook, Brands & TV in Germany
 
Eklavya gold v1.2
Eklavya gold v1.2Eklavya gold v1.2
Eklavya gold v1.2
 
David Wei And Changhao Jiang Presentation
David Wei And Changhao Jiang PresentationDavid Wei And Changhao Jiang Presentation
David Wei And Changhao Jiang Presentation
 
Earths Interior Andie
Earths Interior AndieEarths Interior Andie
Earths Interior Andie
 
Flipbook complete
Flipbook completeFlipbook complete
Flipbook complete
 
Team Census Ulhaas10 Brochure
Team Census   Ulhaas10 BrochureTeam Census   Ulhaas10 Brochure
Team Census Ulhaas10 Brochure
 
Love poem
Love poemLove poem
Love poem
 
How to Create a Circle of Raving Fans Through Social Media
How to Create a Circle of Raving Fans Through Social MediaHow to Create a Circle of Raving Fans Through Social Media
How to Create a Circle of Raving Fans Through Social Media
 
Ga Minerals
Ga MineralsGa Minerals
Ga Minerals
 

Similar to Colin Clark Accessible U Is With J Query And Infusion[1]

Dynamic Languages In The Enterprise (4developers march 2009)
Dynamic Languages In The Enterprise (4developers march 2009)Dynamic Languages In The Enterprise (4developers march 2009)
Dynamic Languages In The Enterprise (4developers march 2009)Ivo Jansch
 
Portlets
PortletsPortlets
Portletsssetem
 
Hey open source, don’t forget the user! - by Chad Kieffer
Hey open source,  don’t forget the user! - by Chad KiefferHey open source,  don’t forget the user! - by Chad Kieffer
Hey open source, don’t forget the user! - by Chad Kiefferdmthompson
 
Samuel Asher Rivello - PureMVC Hands On Part 2
Samuel Asher Rivello - PureMVC Hands On Part 2Samuel Asher Rivello - PureMVC Hands On Part 2
Samuel Asher Rivello - PureMVC Hands On Part 2360|Conferences
 
Symfony Day 2009 - Symfony vs Integrating products
Symfony Day 2009 - Symfony vs Integrating productsSymfony Day 2009 - Symfony vs Integrating products
Symfony Day 2009 - Symfony vs Integrating productsXavier Lacot
 
Inleiding tot CHI
Inleiding tot CHIInleiding tot CHI
Inleiding tot CHIErik Duval
 
Cloud4all Architecture Overview
Cloud4all Architecture OverviewCloud4all Architecture Overview
Cloud4all Architecture Overviewicchp2012
 
Sharing Best Practices and Recommendations from the Integration Battlefield
Sharing Best Practices and Recommendations from the Integration BattlefieldSharing Best Practices and Recommendations from the Integration Battlefield
Sharing Best Practices and Recommendations from the Integration BattlefieldWSO2
 
AJUBY Open Source Application Builder
AJUBY Open Source Application BuilderAJUBY Open Source Application Builder
AJUBY Open Source Application Builderajuby
 
nokia and opensource n800
nokia and opensource n800nokia and opensource n800
nokia and opensource n800winsopc
 
Evolving Mobile Architectures
Evolving Mobile ArchitecturesEvolving Mobile Architectures
Evolving Mobile Architecturessgleadow
 
iPhone Development For .Net Dev
iPhone Development For .Net DeviPhone Development For .Net Dev
iPhone Development For .Net DevAlex Hung
 
Software Engineering In PHP
Software Engineering In PHPSoftware Engineering In PHP
Software Engineering In PHPRalph Schindler
 
Design Prototyping: Bringing Wireframes to Life
Design Prototyping: Bringing Wireframes to LifeDesign Prototyping: Bringing Wireframes to Life
Design Prototyping: Bringing Wireframes to Lifegoodfriday
 
Effective UI Development using Adobe Flex
Effective UI Development using Adobe FlexEffective UI Development using Adobe Flex
Effective UI Development using Adobe FlexUday Shankar
 
Tool review
Tool reviewTool review
Tool reviewwm175309
 
NRWConf - Workshop Mobile Apps
NRWConf - Workshop Mobile AppsNRWConf - Workshop Mobile Apps
NRWConf - Workshop Mobile AppsPeter Hecker
 

Similar to Colin Clark Accessible U Is With J Query And Infusion[1] (20)

Dynamic Languages In The Enterprise (4developers march 2009)
Dynamic Languages In The Enterprise (4developers march 2009)Dynamic Languages In The Enterprise (4developers march 2009)
Dynamic Languages In The Enterprise (4developers march 2009)
 
Portlets
PortletsPortlets
Portlets
 
Scaling Django Dc09
Scaling Django Dc09Scaling Django Dc09
Scaling Django Dc09
 
Hey open source, don’t forget the user! - by Chad Kieffer
Hey open source,  don’t forget the user! - by Chad KiefferHey open source,  don’t forget the user! - by Chad Kieffer
Hey open source, don’t forget the user! - by Chad Kieffer
 
Samuel Asher Rivello - PureMVC Hands On Part 2
Samuel Asher Rivello - PureMVC Hands On Part 2Samuel Asher Rivello - PureMVC Hands On Part 2
Samuel Asher Rivello - PureMVC Hands On Part 2
 
Symfony Day 2009 - Symfony vs Integrating products
Symfony Day 2009 - Symfony vs Integrating productsSymfony Day 2009 - Symfony vs Integrating products
Symfony Day 2009 - Symfony vs Integrating products
 
Inleiding tot CHI
Inleiding tot CHIInleiding tot CHI
Inleiding tot CHI
 
Cloud4all Architecture Overview
Cloud4all Architecture OverviewCloud4all Architecture Overview
Cloud4all Architecture Overview
 
Sharing Best Practices and Recommendations from the Integration Battlefield
Sharing Best Practices and Recommendations from the Integration BattlefieldSharing Best Practices and Recommendations from the Integration Battlefield
Sharing Best Practices and Recommendations from the Integration Battlefield
 
AJUBY Open Source Application Builder
AJUBY Open Source Application BuilderAJUBY Open Source Application Builder
AJUBY Open Source Application Builder
 
nokia and opensource n800
nokia and opensource n800nokia and opensource n800
nokia and opensource n800
 
Evolving Mobile Architectures
Evolving Mobile ArchitecturesEvolving Mobile Architectures
Evolving Mobile Architectures
 
JavaFX Uni Parthenope
JavaFX Uni ParthenopeJavaFX Uni Parthenope
JavaFX Uni Parthenope
 
iPhone Development For .Net Dev
iPhone Development For .Net DeviPhone Development For .Net Dev
iPhone Development For .Net Dev
 
Software Engineering In PHP
Software Engineering In PHPSoftware Engineering In PHP
Software Engineering In PHP
 
Design Prototyping: Bringing Wireframes to Life
Design Prototyping: Bringing Wireframes to LifeDesign Prototyping: Bringing Wireframes to Life
Design Prototyping: Bringing Wireframes to Life
 
Effective UI Development using Adobe Flex
Effective UI Development using Adobe FlexEffective UI Development using Adobe Flex
Effective UI Development using Adobe Flex
 
Tool review
Tool reviewTool review
Tool review
 
Symfony for non-techies
Symfony for non-techiesSymfony for non-techies
Symfony for non-techies
 
NRWConf - Workshop Mobile Apps
NRWConf - Workshop Mobile AppsNRWConf - Workshop Mobile Apps
NRWConf - Workshop Mobile Apps
 

More from Ajax Experience 2009

Adam Peller Interoperable Ajax Tools And Mashups
Adam Peller Interoperable Ajax Tools And MashupsAdam Peller Interoperable Ajax Tools And Mashups
Adam Peller Interoperable Ajax Tools And MashupsAjax Experience 2009
 
Eric Beland Ajax Load Testing Considerations
Eric Beland Ajax Load Testing ConsiderationsEric Beland Ajax Load Testing Considerations
Eric Beland Ajax Load Testing ConsiderationsAjax Experience 2009
 
Chanhao Jiang And David Wei Presentation Quickling Pagecache
Chanhao Jiang And David Wei Presentation Quickling PagecacheChanhao Jiang And David Wei Presentation Quickling Pagecache
Chanhao Jiang And David Wei Presentation Quickling PagecacheAjax Experience 2009
 
Jason.O Keefe.Genuitec.Presentation.Final
Jason.O Keefe.Genuitec.Presentation.FinalJason.O Keefe.Genuitec.Presentation.Final
Jason.O Keefe.Genuitec.Presentation.FinalAjax Experience 2009
 
Scott Isaacs Presentationajaxexperience (Final)
Scott Isaacs Presentationajaxexperience (Final)Scott Isaacs Presentationajaxexperience (Final)
Scott Isaacs Presentationajaxexperience (Final)Ajax Experience 2009
 
Sergey Ilinsky Presentation Ample Sdk
Sergey Ilinsky Presentation Ample SdkSergey Ilinsky Presentation Ample Sdk
Sergey Ilinsky Presentation Ample SdkAjax Experience 2009
 
Chris Williams Presentation Dissident
Chris Williams Presentation DissidentChris Williams Presentation Dissident
Chris Williams Presentation DissidentAjax Experience 2009
 
Ted Husted Presentation Testing Ajax Applications Ae2009
Ted Husted Presentation Testing Ajax Applications Ae2009Ted Husted Presentation Testing Ajax Applications Ae2009
Ted Husted Presentation Testing Ajax Applications Ae2009Ajax Experience 2009
 
Ted Husted Api Doc Smackdown Ae2009
Ted Husted Api Doc Smackdown Ae2009Ted Husted Api Doc Smackdown Ae2009
Ted Husted Api Doc Smackdown Ae2009Ajax Experience 2009
 
Patrick Lightbody Presentation Tae Slides
Patrick Lightbody Presentation Tae SlidesPatrick Lightbody Presentation Tae Slides
Patrick Lightbody Presentation Tae SlidesAjax Experience 2009
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationLaurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationAjax Experience 2009
 
Jon Trelfa Presentation From Desktop To Web – Getting It Right
Jon Trelfa Presentation From Desktop To Web – Getting It RightJon Trelfa Presentation From Desktop To Web – Getting It Right
Jon Trelfa Presentation From Desktop To Web – Getting It RightAjax Experience 2009
 
Douglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsDouglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsAjax Experience 2009
 
Douglas Crockford Presentation Jsonsaga
Douglas Crockford Presentation JsonsagaDouglas Crockford Presentation Jsonsaga
Douglas Crockford Presentation JsonsagaAjax Experience 2009
 
Brian Le Roux Presentation Introducing Phone Gap
Brian Le Roux Presentation Introducing Phone GapBrian Le Roux Presentation Introducing Phone Gap
Brian Le Roux Presentation Introducing Phone GapAjax Experience 2009
 
Ted Husted Presentation Testing The Testers Ae2009
Ted Husted Presentation Testing The Testers Ae2009Ted Husted Presentation Testing The Testers Ae2009
Ted Husted Presentation Testing The Testers Ae2009Ajax Experience 2009
 

More from Ajax Experience 2009 (20)

Adam Peller Interoperable Ajax Tools And Mashups
Adam Peller Interoperable Ajax Tools And MashupsAdam Peller Interoperable Ajax Tools And Mashups
Adam Peller Interoperable Ajax Tools And Mashups
 
Eric Beland Ajax Load Testing Considerations
Eric Beland Ajax Load Testing ConsiderationsEric Beland Ajax Load Testing Considerations
Eric Beland Ajax Load Testing Considerations
 
Chanhao Jiang And David Wei Presentation Quickling Pagecache
Chanhao Jiang And David Wei Presentation Quickling PagecacheChanhao Jiang And David Wei Presentation Quickling Pagecache
Chanhao Jiang And David Wei Presentation Quickling Pagecache
 
Jason.O Keefe.Genuitec.Presentation.Final
Jason.O Keefe.Genuitec.Presentation.FinalJason.O Keefe.Genuitec.Presentation.Final
Jason.O Keefe.Genuitec.Presentation.Final
 
Jenny Donnelly
Jenny DonnellyJenny Donnelly
Jenny Donnelly
 
Scott Isaacs Presentationajaxexperience (Final)
Scott Isaacs Presentationajaxexperience (Final)Scott Isaacs Presentationajaxexperience (Final)
Scott Isaacs Presentationajaxexperience (Final)
 
Sergey Ilinsky Presentation Ample Sdk
Sergey Ilinsky Presentation Ample SdkSergey Ilinsky Presentation Ample Sdk
Sergey Ilinsky Presentation Ample Sdk
 
Chris Williams Presentation Dissident
Chris Williams Presentation DissidentChris Williams Presentation Dissident
Chris Williams Presentation Dissident
 
Andrew Sutherland Presentation
Andrew Sutherland PresentationAndrew Sutherland Presentation
Andrew Sutherland Presentation
 
Bill Scott Presentation
Bill Scott PresentationBill Scott Presentation
Bill Scott Presentation
 
Ted Husted Presentation Testing Ajax Applications Ae2009
Ted Husted Presentation Testing Ajax Applications Ae2009Ted Husted Presentation Testing Ajax Applications Ae2009
Ted Husted Presentation Testing Ajax Applications Ae2009
 
Ted Husted Api Doc Smackdown Ae2009
Ted Husted Api Doc Smackdown Ae2009Ted Husted Api Doc Smackdown Ae2009
Ted Husted Api Doc Smackdown Ae2009
 
Patrick Lightbody Presentation Tae Slides
Patrick Lightbody Presentation Tae SlidesPatrick Lightbody Presentation Tae Slides
Patrick Lightbody Presentation Tae Slides
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationLaurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus Presentation
 
Jon Trelfa Presentation From Desktop To Web – Getting It Right
Jon Trelfa Presentation From Desktop To Web – Getting It RightJon Trelfa Presentation From Desktop To Web – Getting It Right
Jon Trelfa Presentation From Desktop To Web – Getting It Right
 
Joe Mc Cann Tae Aria Presentation
Joe Mc Cann Tae Aria PresentationJoe Mc Cann Tae Aria Presentation
Joe Mc Cann Tae Aria Presentation
 
Douglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsDouglas Crockford Presentation Goodparts
Douglas Crockford Presentation Goodparts
 
Douglas Crockford Presentation Jsonsaga
Douglas Crockford Presentation JsonsagaDouglas Crockford Presentation Jsonsaga
Douglas Crockford Presentation Jsonsaga
 
Brian Le Roux Presentation Introducing Phone Gap
Brian Le Roux Presentation Introducing Phone GapBrian Le Roux Presentation Introducing Phone Gap
Brian Le Roux Presentation Introducing Phone Gap
 
Ted Husted Presentation Testing The Testers Ae2009
Ted Husted Presentation Testing The Testers Ae2009Ted Husted Presentation Testing The Testers Ae2009
Ted Husted Presentation Testing The Testers Ae2009
 

Recently uploaded

Canada PR - Eligibility, Steps to apply and Visa processing fees
Canada PR - Eligibility, Steps to apply and Visa processing feesCanada PR - Eligibility, Steps to apply and Visa processing fees
Canada PR - Eligibility, Steps to apply and Visa processing feesY-Axis Overseas Careers
 
What Safety Precautions Are Recommended For Na Pali Snorkeling Adventure
What Safety Precautions Are Recommended For Na Pali Snorkeling AdventureWhat Safety Precautions Are Recommended For Na Pali Snorkeling Adventure
What Safety Precautions Are Recommended For Na Pali Snorkeling AdventureHanalei Charters
 
5 beautyfull places visiting in uttrakhand
5 beautyfull places visiting in uttrakhand5 beautyfull places visiting in uttrakhand
5 beautyfull places visiting in uttrakhandaradhya3287
 
László Puczkó Wellbeing Tourism and Economy
László Puczkó Wellbeing Tourism and EconomyLászló Puczkó Wellbeing Tourism and Economy
László Puczkó Wellbeing Tourism and EconomyEDGAR TARRÉS FALCÓ
 
Authentic Travel Experience 2024 Greg DeShields.pptx
Authentic Travel Experience 2024 Greg DeShields.pptxAuthentic Travel Experience 2024 Greg DeShields.pptx
Authentic Travel Experience 2024 Greg DeShields.pptxGregory DeShields
 
What Unwritten Rules Of Surfing Etiquette Are Crucial For Beginners To Grasp
What Unwritten Rules Of Surfing Etiquette Are Crucial For Beginners To GraspWhat Unwritten Rules Of Surfing Etiquette Are Crucial For Beginners To Grasp
What Unwritten Rules Of Surfing Etiquette Are Crucial For Beginners To GraspHanalei Surf School
 
Busy Season Mastery Simple Strategies to Optimize Your Lodging Business!.pptx
Busy Season Mastery Simple Strategies to Optimize Your Lodging Business!.pptxBusy Season Mastery Simple Strategies to Optimize Your Lodging Business!.pptx
Busy Season Mastery Simple Strategies to Optimize Your Lodging Business!.pptxRezStream
 
Top Five Best Places to Visit in India.pdf
Top Five Best Places to Visit in India.pdfTop Five Best Places to Visit in India.pdf
Top Five Best Places to Visit in India.pdfonlinevisaindia
 
Sizzling Summer Adventures Unforgettable Tours Under the Sun
Sizzling Summer Adventures Unforgettable Tours Under the SunSizzling Summer Adventures Unforgettable Tours Under the Sun
Sizzling Summer Adventures Unforgettable Tours Under the SunSnowshoe Tahoe
 
Paragliding Billing Bir at Himachal Pardesh
Paragliding Billing Bir at Himachal PardeshParagliding Billing Bir at Himachal Pardesh
Paragliding Billing Bir at Himachal PardeshParagliding Billing Bir
 
a presentation for foreigners about how to travel in Germany.
a presentation for foreigners about how to travel in Germany.a presentation for foreigners about how to travel in Germany.
a presentation for foreigners about how to travel in Germany.moritzmieg
 
Discover the Magic of Sicily: Your Travel Guide
Discover the Magic of Sicily: Your Travel GuideDiscover the Magic of Sicily: Your Travel Guide
Discover the Magic of Sicily: Your Travel GuideTime for Sicily
 
Melanie Smith Tourism, Wellbeing and Happiness
Melanie Smith Tourism, Wellbeing and HappinessMelanie Smith Tourism, Wellbeing and Happiness
Melanie Smith Tourism, Wellbeing and HappinessEDGAR TARRÉS FALCÓ
 
Transportation Options_ Getting to Keukenhof Gardens from Amsterdam.pdf
Transportation Options_ Getting to Keukenhof Gardens from Amsterdam.pdfTransportation Options_ Getting to Keukenhof Gardens from Amsterdam.pdf
Transportation Options_ Getting to Keukenhof Gardens from Amsterdam.pdfGlobalbustours
 
Sicily Holidays Guide Book: Unveiling the Treasures of Italy's Jewel
Sicily Holidays Guide Book: Unveiling the Treasures of Italy's JewelSicily Holidays Guide Book: Unveiling the Treasures of Italy's Jewel
Sicily Holidays Guide Book: Unveiling the Treasures of Italy's JewelTime for Sicily
 
It’s Time Get Refresh Travel Around The World
It’s Time Get Refresh Travel Around The WorldIt’s Time Get Refresh Travel Around The World
It’s Time Get Refresh Travel Around The WorldParagliding Billing Bir
 
What Are Some Tips For A Safe White River Rafting Experience
What Are Some Tips For A Safe White River Rafting ExperienceWhat Are Some Tips For A Safe White River Rafting Experience
What Are Some Tips For A Safe White River Rafting ExperienceTahoe Whitewater Tours
 
Lucknow to Sitapur Cab | Lucknow to Sitapur Taxi
Lucknow to Sitapur Cab | Lucknow to Sitapur TaxiLucknow to Sitapur Cab | Lucknow to Sitapur Taxi
Lucknow to Sitapur Cab | Lucknow to Sitapur TaxiCab Bazar
 
The Roles of Aviation Auditors - Presentation
The Roles of Aviation Auditors - PresentationThe Roles of Aviation Auditors - Presentation
The Roles of Aviation Auditors - PresentationTilak Ramaprakash
 
What Are The Must-Know Tips For First-Time Jet Skiers In Aruba
What Are The Must-Know Tips For First-Time Jet Skiers In ArubaWhat Are The Must-Know Tips For First-Time Jet Skiers In Aruba
What Are The Must-Know Tips For First-Time Jet Skiers In ArubaDelphi Watersports
 

Recently uploaded (20)

Canada PR - Eligibility, Steps to apply and Visa processing fees
Canada PR - Eligibility, Steps to apply and Visa processing feesCanada PR - Eligibility, Steps to apply and Visa processing fees
Canada PR - Eligibility, Steps to apply and Visa processing fees
 
What Safety Precautions Are Recommended For Na Pali Snorkeling Adventure
What Safety Precautions Are Recommended For Na Pali Snorkeling AdventureWhat Safety Precautions Are Recommended For Na Pali Snorkeling Adventure
What Safety Precautions Are Recommended For Na Pali Snorkeling Adventure
 
5 beautyfull places visiting in uttrakhand
5 beautyfull places visiting in uttrakhand5 beautyfull places visiting in uttrakhand
5 beautyfull places visiting in uttrakhand
 
László Puczkó Wellbeing Tourism and Economy
László Puczkó Wellbeing Tourism and EconomyLászló Puczkó Wellbeing Tourism and Economy
László Puczkó Wellbeing Tourism and Economy
 
Authentic Travel Experience 2024 Greg DeShields.pptx
Authentic Travel Experience 2024 Greg DeShields.pptxAuthentic Travel Experience 2024 Greg DeShields.pptx
Authentic Travel Experience 2024 Greg DeShields.pptx
 
What Unwritten Rules Of Surfing Etiquette Are Crucial For Beginners To Grasp
What Unwritten Rules Of Surfing Etiquette Are Crucial For Beginners To GraspWhat Unwritten Rules Of Surfing Etiquette Are Crucial For Beginners To Grasp
What Unwritten Rules Of Surfing Etiquette Are Crucial For Beginners To Grasp
 
Busy Season Mastery Simple Strategies to Optimize Your Lodging Business!.pptx
Busy Season Mastery Simple Strategies to Optimize Your Lodging Business!.pptxBusy Season Mastery Simple Strategies to Optimize Your Lodging Business!.pptx
Busy Season Mastery Simple Strategies to Optimize Your Lodging Business!.pptx
 
Top Five Best Places to Visit in India.pdf
Top Five Best Places to Visit in India.pdfTop Five Best Places to Visit in India.pdf
Top Five Best Places to Visit in India.pdf
 
Sizzling Summer Adventures Unforgettable Tours Under the Sun
Sizzling Summer Adventures Unforgettable Tours Under the SunSizzling Summer Adventures Unforgettable Tours Under the Sun
Sizzling Summer Adventures Unforgettable Tours Under the Sun
 
Paragliding Billing Bir at Himachal Pardesh
Paragliding Billing Bir at Himachal PardeshParagliding Billing Bir at Himachal Pardesh
Paragliding Billing Bir at Himachal Pardesh
 
a presentation for foreigners about how to travel in Germany.
a presentation for foreigners about how to travel in Germany.a presentation for foreigners about how to travel in Germany.
a presentation for foreigners about how to travel in Germany.
 
Discover the Magic of Sicily: Your Travel Guide
Discover the Magic of Sicily: Your Travel GuideDiscover the Magic of Sicily: Your Travel Guide
Discover the Magic of Sicily: Your Travel Guide
 
Melanie Smith Tourism, Wellbeing and Happiness
Melanie Smith Tourism, Wellbeing and HappinessMelanie Smith Tourism, Wellbeing and Happiness
Melanie Smith Tourism, Wellbeing and Happiness
 
Transportation Options_ Getting to Keukenhof Gardens from Amsterdam.pdf
Transportation Options_ Getting to Keukenhof Gardens from Amsterdam.pdfTransportation Options_ Getting to Keukenhof Gardens from Amsterdam.pdf
Transportation Options_ Getting to Keukenhof Gardens from Amsterdam.pdf
 
Sicily Holidays Guide Book: Unveiling the Treasures of Italy's Jewel
Sicily Holidays Guide Book: Unveiling the Treasures of Italy's JewelSicily Holidays Guide Book: Unveiling the Treasures of Italy's Jewel
Sicily Holidays Guide Book: Unveiling the Treasures of Italy's Jewel
 
It’s Time Get Refresh Travel Around The World
It’s Time Get Refresh Travel Around The WorldIt’s Time Get Refresh Travel Around The World
It’s Time Get Refresh Travel Around The World
 
What Are Some Tips For A Safe White River Rafting Experience
What Are Some Tips For A Safe White River Rafting ExperienceWhat Are Some Tips For A Safe White River Rafting Experience
What Are Some Tips For A Safe White River Rafting Experience
 
Lucknow to Sitapur Cab | Lucknow to Sitapur Taxi
Lucknow to Sitapur Cab | Lucknow to Sitapur TaxiLucknow to Sitapur Cab | Lucknow to Sitapur Taxi
Lucknow to Sitapur Cab | Lucknow to Sitapur Taxi
 
The Roles of Aviation Auditors - Presentation
The Roles of Aviation Auditors - PresentationThe Roles of Aviation Auditors - Presentation
The Roles of Aviation Auditors - Presentation
 
What Are The Must-Know Tips For First-Time Jet Skiers In Aruba
What Are The Must-Know Tips For First-Time Jet Skiers In ArubaWhat Are The Must-Know Tips For First-Time Jet Skiers In Aruba
What Are The Must-Know Tips For First-Time Jet Skiers In Aruba
 

Colin Clark Accessible U Is With J Query And Infusion[1]

  • 1. Building Accessible User Interfaces with jQuery and Fluid Infusion Colin Clark, Fluid Project Technical Lead, Adaptive Technology Resource Centre Monday, September 14, 2009
  • 2. Topics We’ll Cover • The Fluid community • Introducing Infusion • Developing accessible JavaScript • Infusion’s Architecture • Techniques for portals, mashups, CMS’s • Where we’re headed Monday, September 14, 2009
  • 3. Fluid... http://fluidproject.org • Is an open source community of • Designers • Developers • Accessibility experts • Helps other open communities • Consists of universities, museums and individuals Monday, September 14, 2009
  • 4. What We Do • Offer design advice and resources • Contribute to other communities: • jQuery UI • Dojo • W3C Accessibility • Build Infusion, our JavaScript application framework Monday, September 14, 2009
  • 5. Introducing http://fluidproject.org/products/infusion/ Monday, September 14, 2009
  • 6. World, Meet Infusion • Application framework built on top of jQuery • The culmination of our work helping others • Designed for usability and accessibility • Open architecture: everything is configurable Monday, September 14, 2009
  • 7. What’s in Infusion? • A development framework for building apps • UI components you can reuse and adapt • Lightweight CSS framework for styling • Accessibility tools and plugins for jQuery Monday, September 14, 2009
  • 8. Building Great UIs Is Hard • Your code gets unruly as it grows • UIs are hard to reuse or repurpose • Design change requires big code change • Accessibility is confusing • Combining different code/libraries doesn’t always work Monday, September 14, 2009
  • 9. Flexible User Interfaces Infusion is an application framework designed to provide unprecedented flexibility while preserving interoperability. Monday, September 14, 2009
  • 10. Types of JavaScript Tools • Foundational Toolkits • Application Frameworks ... compare and contrast Monday, September 14, 2009
  • 11. Foundational toolkits • Totally presentation focused • DOM manipulation • Event binding jQuery • Ajax Prototype Dojo core Monday, September 14, 2009
  • 12. Application frameworks • Model notifications “something changed here” • Views to help keep your presentational code clean • Data binding to sync the display with your model SproutCore Dojo/Dijit/ Dojox Cappuccino Monday, September 14, 2009
  • 13. Infusion is Different • Accessibility baked right in • Carefully designed interactions • Markup is in your control • Not the same old MVC • Supports portals, mashups and CMS’s Monday, September 14, 2009
  • 15. What is Accessibility? Monday, September 14, 2009
  • 16. A New Definition • Accessibility is the ability of the system to accommodate the needs of the user • Disability is the mismatch between the user and the interface provided • We all experience disability • Accessible software = better software Monday, September 14, 2009
  • 17. Assistive Technologies • Present and control the user interface in different ways • Not just screen readers! • Use built-in operating system APIs to understand the user interface Screen readers Screen magnifiers On-screen keyboards Monday, September 14, 2009
  • 18. DHTML: A New Can of Worms • Shift from documents to applications • Familiar a11y techniques aren’t enough • Most DHTML is completely inaccessible • New techniques are still being figured out Monday, September 14, 2009
  • 19. The Problem • Custom widgets often look, but don’t act, like their counterparts on the desktop • HTML provides only simple semantics • Not enough information for ATs • Dynamic updates require new design strategies to be accessible Monday, September 14, 2009
  • 20. The Solution • Describe user interfaces with ARIA • Add consistent keyboard controls • Provide flexible styling and presentation Monday, September 14, 2009
  • 22. Opaque Markup // These are tabs. How would you know? <ol> <li><a href=”#cats”>Cats</a></li> <li><a href=”#dogs”>Dogs</a></li> <li><a href=”#gators”>Gators</a></li> </ol> <div> <div id=”cats”>Cats meow.</div> <div id=”dogs”>Dogs bark.</div> <div id=”gators”>Gators bite.</div> </div> Monday, September 14, 2009
  • 23. Opaque Markup: Tabs Monday, September 14, 2009
  • 24. ARIA • Accessible Rich Internet Applications • W3C specification in the works • Fills the semantic gaps in HTML • Roles, states, and properties • Live regions Monday, September 14, 2009
  • 25. Roles, States, Properties • Roles describe widgets not present in HTML 4 • slider, menubar, tab, dialog • Properties describe characteristics: • draggable, hasPopup, required • States describe what’s happening: • busy, disabled, selected, hidden Monday, September 14, 2009
  • 26. Using ARIA // Now *these* are Tabs! <ol id=”animalTabs” role=”tablist” tabindex=”0”> <!-- Individual Tabs shouldn’t be focusable --> <!-- We’ll focus them with JavaScript instead --> <li role=”tab”><a href=”#” tabindex=”-1”>Cats</a></li> <li role=”tab”><a href=”#” tabindex=”-1”>Dogs</a></li> <li role=”tab”><a href=”#” tabindex=”-1”>Gators</a></li> </ol> <div id=”panels”> <div role=”tabpanel” aria-labelledby=”cats”>Cats meow.</div> <div role=”tabpanel” aria-labelledby=”dogs”>Dogs bark.</div> <div role=”tabpanel” aria-labelledby=”gators”>Gators bite.</div> </div> Monday, September 14, 2009
  • 27. Adding ARIA in Code // Identify the container as a list of tabs. tabContainer.attr("role", "tablist"); // Give each tab the "tab" role. tabs.attr("role", "tab"); // Give each panel the appropriate role, panels.attr("role", "tabpanel"); panels.each(function (idx, panel) { var tabForPanel = that.tabs.eq(idx); // Relate the panel to the tab that labels it. $(panel).attr("aria-labelledby", tabForPanel[0].id); }); Monday, September 14, 2009
  • 29. Keyboard Navigation • Everything that works with the mouse should work with the keyboard • ... but not always in the same way • Support familiar conventions http://dev.aol.com/dhtml_style_guide Monday, September 14, 2009
  • 30. Keyboard Conventions • Tab key focuses the control or widget • Arrow keys select an item • Enter or Spacebar activate an item • Tab is handled by the browser. For the rest, you need to write code. A lot of code. Monday, September 14, 2009
  • 31. Keyboard a11y: Tabs Monday, September 14, 2009
  • 32. Tabindex examples <!-- Tab container should be focusable --> <ol id=”animalTabs” tabindex=”0”> <!-- Individual Tabs shouldn’t be focusable --> <!-- We’ll focus them with JavaScript instead --> <li id=”tab1”> <a href=”#cats” tabindex=”-1”>Cats</a> </li> <li id=”tab2”> <a href=”#cats” tabindex=”-1”>Dogs</a> </li> <li id=”tab3”> <a href=”#cats” tabindex=”-1”>Alligators</a> </li> </ol> Monday, September 14, 2009
  • 33. Making Things Tabbable • Tabindex varies subtly across browsers • jquery.attr() normalizes it as of 1.3 • For all the gory details: http://fluidproject.org/blog/2008/01/09/ getting-setting-and-removing-tabindex-values-with-javascript/ // Make the tablist accessible with the Tab key. tabContainer.attr("tabindex", "0"); // And take the anchors out of the Tab order. $(“a”, tabs).attr("tabindex", "-1"); Monday, September 14, 2009
  • 34. Adding the Arrow Keys // Make each tab accessible with the left and right arrow keys. tabContainer.fluid("selectable", { selectableSelector: that.options.selectors.tabs, direction: fluid.a11y.orientation.HORIZONTAL, onSelect: function (tab) { $(tab).addClass(that.options.styles.highlighted); }, onUnselect: function (tab) { $(tab).removeClass(that.options.styles.highlighted); } }); Monday, September 14, 2009
  • 35. Making Them Activatable // Make each tab activatable with Spacebar and Enter. tabs.fluid("activatable", function (evt) { // Your handler code here. Maybe the same as .click()? }); Monday, September 14, 2009
  • 36. Documentation • Tutorial: http://wiki.fluidproject.org/display/fluid/Keyboard+Accessibility+Tutorial • API Reference: http://wiki.fluidproject.org/display/fluid/Keyboard+Accessibility+Plugin+API Monday, September 14, 2009
  • 37. Infusion Goes Deeper • jQuery Keyboard Navigation Plugin • ARIA everywhere • Everything is highly adaptable and flexible • UI Options and the Fluid Skinning System: • Users can customize their environment Monday, September 14, 2009
  • 38. UI Options • One size doesn’t fit all • Allows users to customize your app: • layout • styling • navigation • Uses FSS by default; can be configured to work with your own classes Monday, September 14, 2009
  • 39. UI Options & FSS Monday, September 14, 2009
  • 40. UI Options & FSS Monday, September 14, 2009
  • 41. CSS Frameworks “If you’re going to use a framework, it should be yours; one that you’ve created. You can look at existing frameworks for ideas and hack at it. But the professionals in this room are not well served by picking up a framework and using it as-is.” - Eric Meyer Monday, September 14, 2009
  • 42. Fluid Skinning System • FSS is built to be hacked on • Provides a core set of building blocks • Reset, text, layouts, themes • Namespaced: no conflicts with your stuff • Themes for better legibility & readability http://wiki.fluidproject.org/x/96M7 Monday, September 14, 2009
  • 44. Markup Agnosticism • HTML is so fundamental to Web UIs • Others lock away markup in a black box • Markup should be totally free to edit, adapt, or replace • Libraries shouldn’t bake in assumptions about your markup • Unobtrusiveness everywhere Monday, September 14, 2009
  • 45. Handling Markup: Dojo <div class="dijitDialog" tabindex="-1" waiRole="dialog" waiState="labelledby-${id}_title"> <div dojoAttachPoint="titleBar" class="dijitDialogTitleBar"> <span dojoAttachPoint="titleNode" class="dijitDialogTitle" id="${id}_title"></span> <span dojoAttachPoint="closeButtonNode" class="dijitDialogCloseIcon" dojoAttachEvent="onclick: onCancel, onmouseenter: _onCloseEnter, onmouseleave: _onCloseLeave" title="${buttonCancel}"> <span dojoAttachPoint="closeText" class="closeText" title="${buttonCancel}">x</span> </span> </div> <div dojoAttachPoint="containerNode" class="dijitDialogPaneContent"></div> </div> Monday, September 14, 2009
  • 46. Handling Markup: jQuery UI Monday, September 14, 2009
  • 47. Handling Markup: Infusion fluid.defaults("fluid.fileQueueView", { selectors: { fileRows: ".flc-uploader-file", fileName: ".flc-uploader-file-name", fileSize: ".flc-uploader-file-size", fileIconBtn: ".flc-uploader-file-action", errorText: ".flc-uploader-file-error" }, Monday, September 14, 2009
  • 48. Components “Components suck. Apps built with components look like it” • Infusion components aren’t black boxes • Fundamentally adaptable: • Change the markup • Restyle with CSS • Add/replace actual behaviour • Everything is super-loosely coupled Monday, September 14, 2009
  • 49. Component Families: Reorderer lists images layouts Infusion components come in families Monday, September 14, 2009
  • 50. More Components Uploader Inline Edit Pager Monday, September 14, 2009
  • 51. Model, View... but not Controller • MVC is a given in most framework • JavaScript’s functional idioms offer alternatives (hint: events) • Infusion has no controller layer at all • ... and none of the classical inheritance cruft that usually goes with it Monday, September 14, 2009
  • 52. Traditional MVC Model n atio oti c State Query State Change ge N n Cha View Selection View Controller User Gestures Monday, September 14, 2009
  • 53. The Problem with Controllers • Controllers are the least defined • What’s “glue?” • Always referred to as the non-reusable part • MVC has been warped over the decades • The framework should take care of the glue Monday, September 14, 2009
  • 54. Infusion Models & Views Model • Controller is replaced by events Change Noti cation • Reads to the model are transparent • State changes and notification are just events State Query State Change • Transparent architecture: you can use View the same events we use Framework Monday, September 14, 2009
  • 55. Plain Old Models • M is the most important thing in your app • Data needs to travel seamlessly between client and server • Most toolkits force a model to extend some base class or particular structure In Infusion, models are just plain old JSON Monday, September 14, 2009
  • 56. Playing Nice With Others Monday, September 14, 2009
  • 57. Portals, Mashups, and CMS’s • These days, diverse code and markup coexists • Most JavaScript is written as if it owns the whole browser • As you combine stuff, things can break • Namespacing and privacy is essential Monday, September 14, 2009
  • 58. Writing Collision-Free JavaScript • Put code in a unique namespace • Use closures for privacy • Support more than one on the page • Scope all variables to an instance • Avoid hard-baking ID selectors • Constrain selectors within a specific element Monday, September 14, 2009
  • 59. Keeping it to Ourselves • Infusion takes namespacing seriously • We won’t steal your names • Components are carefully scoped • We won’t accidently grab the wrong stuff • Infusion doesn’t expect control of the page Monday, September 14, 2009
  • 60. Tying it All Together • Infusion helps you with accessibility • Components you can really work with • Simple structure so your code can grow • Totally transparent, event-driven design • Markup and models are under your control • No inheritance or controller cruft Monday, September 14, 2009
  • 61. Where We’re Going Monday, September 14, 2009
  • 62. Infusion Next Steps • Infusion 1.2 coming in October: • New lightweight Inversion of Control • Data Grid and reworked Pager components • Lots of bug fixes • New demos portal with example code • Screencasts Monday, September 14, 2009
  • 63. Fluid Engage • Open source collaboration with museums • Visitor engagement: learn and contribute • Use phones visitors bring into the museum • Mobile apps and in-gallery kiosks • All built with open source Web technology Monday, September 14, 2009
  • 64. Our Mobile Approach • No hard intrusions on your content • Don’t subvert good Web idioms • Your choice: native-like or webbish Monday, September 14, 2009
  • 65. Infusion Mobile • mFSS: themes for iPhone, Android, more • ScreenNavigator: unobtrusive mobile navigation • Components designed for the mobile Web Monday, September 14, 2009
  • 66. Kettle: Server-side JS • Built on top of the JSGI server spec • Don’t need lots of new APIs on server • Envjs provides a full browser • Infusion as application framework • Choose where markup gets rendered • Natural, familiardesigners for Web developers and environment Monday, September 14, 2009
  • 67. Wrapping Up • Tools for everyone: • ARIA • Dojo • jQuery • Infusion • Give Infusion a try and let us know • We’re a friendly community! Monday, September 14, 2009
  • 68. Wrapping Up Please fill out an evaluation. Monday, September 14, 2009
  • 69. Questions? http://fluidproject.org Monday, September 14, 2009