SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Rich Internet Applications
         with Dojo
         Tom Mahieu
         24 - 04 - 2010
About
•Tom Mahieu
 • http://www.mahieu.org
 • SW Engineer, Phd Computer Science
•PeopleWare
 • http://www.peopleware.be
 • Custom software development
   • Desktop/Web/Mobile apps, EAI
   • Technology: Java, .NET, Delphi
 • Business Intelligence
 • Training
                2
Outline
•Evolution in Web Applications
•Why dojo
•Showcase
•Future




              3
Web App Evolution




      4
Web App Evolution




      5
Web app evolution
Browser tier                Web tier



                                  Static
                                  HTML
                 Internet          files
    JavaScript
      HTML




                    6
Web App Evolution

Browser tier                  Web tier

                                     HTML

                                  PHP        ASP
                                  Servlets         Data tier
                   Internet                  JSP
                                    JSF
    JavaScript
                                         Spring
      HTML                              ...




                              7
Web App Evolution
Browser tier                Web tier
                                 HTML      PHP
                                    ASP
                                          Servlets
                                    JSP
                                            JSF
                                 Spring

                 Internet
                             Web Services
                                                     Data tier
    JavaScript
                                     REST
      HTML




                             8
Web App Evolution
•Browser incompatibilities
 • Javascript
 • Document Object Model (DOM)
•In-browser software development
 • SW Engineering support
   • Testing JavaScript code?
   • cross-browser?
 • Good debugging tools
   • Browser plugins: Firebug
   • Built in development tools
     •   IE8, Safari


                       9
JavaScript library goals
•Eliminate Browser incompatibilities
•JavaScript language enhancements
 • Class based concepts
•Library of common functionality
 • Ajax
 • DOM querying
 • DOM animation
 • UI (User Interface) widgets
   • Form controls
   • Layout controls
                10
JavaScript libraries




       11
Dojo
•http://dojotoolkit.org




              12
Outline
•Evolution in Web Applications
•Why dojo
•Showcase
•Future




             13
Why dojo
•Server side technology independent
•Software engineering paradise
 • Layered
 • Modular
 • Extensible
 • Optimizable
 • Testable
•Large Open Source Community
•Dojo foundation
                 14
Layered
                dijit                                 dojoX
• Declarative • Page Layout                      • Extensions
• Forms           • Tabs container               • Extra’s
   • validation • Border container               • Experimental
   • widgets    • CSS Themes
                                dojo core
• Internationalization     • Animation effects            • Cookie management
• Drag & Drop              • History management           • ...
                                dojo base
• Browser detection        • JavaScript                    • Animations
• DOM Querying (CSS3) • inheritance emulation              • JSON Tools
• Events, Publish/Subscribe • address incompatibilities    • Ajax communication


                                15
Layered
•Dojo-enable your page: dojo base
<html>
  <body>
    <script type="text/javascript" src="js/dojo/dojo/dojo.js">
    </script>
  </body>
</html>



•Content Delivery Networks
<html>
  <body>
    <script type="text/javascript"
     src="http://ajax.googleapis.com/ajax/libs/dojo/1.4/dojo/dojo.xd.js">
    </script>
</body>
</html>




                           16
Modular
•Declaratively add functionality
•Select components
 <script type="text/javascript">
 	 dojo.require("dojo.parser");
 	 dojo.require("dijit.form.Form");
 	 dojo.require("dijit.form.Slider");
 	 dojo.require("dijit.form.DateTextBox");
 	 dojo.require("dijit.layout.TabContainer");
    ...
 </script>



•Select a theme
 <link rel="stylesheet" type="text/css"
       href="dojo/dojo/resources/dojo.css";
 <link rel="stylesheet" type="text/css"
       href="dojo/dijit/themes/tundra/tundra.css";

 <body class="tundra"></body>


                         17
Modular
•Add components to your page
 <form dojoType="dijit.form.Form">
   <div dojoType="dijit.layout.TabContainer" class="tabcontainer">
     <div dojoType="dijit.layout.ContentPane" title="Main">
       <input dojoType="dijit.form.DateTextBox"
              name="releasedate"
              type="text">
     </div>
   </div>
 </form>




                         18
Modular
•There are many




            19
Extensible
                      •Build Custom Components
<form dojoAttachEvent="onreset:_onReset,onsubmit:_onSubmit" name="${name}">
                                                                              @CHARSET "UTF-8";
  <div dojoAttachPoint="containerNode"></div>



                                                     HTML Template
  <div style="height: 1em;">&nbsp;</div>
                                                                              .CrudFormBusyPanel {
  <div dojoAttachPoint="errorMessagesNode"></div>
                                                                              	    text-align: center;
  <div dojoAttachPoint="buttonContainerNode"></div>
                                                                              	    position: absolute;
</form>
                                                                              	    top: 50%;
                                                                              	    width: 100%;


                                                                                                         CSS
     dojo.provide("ppwcode.form.CrudForm");                                   	    margin-top: -1ex;
                                                                              }
     dojo.require("ppwcode.form.ObjectForm");
     dojo.require("dijit.form.Button");                                       .CrudFormBusyMessage {
     dojo.require("dijit.Tooltip");                                             display: inline;
     dojo.require("dojo.i18n");                                               	    vertical-align: middle;
     dojo.requireLocalization("ppwcode.form", "CrudForm");                    	    margin-left: 0.5em;
                                                                              }



                                                                Dojo class
     dojo.declare(                                                            .CrudFormErrorBox {
       "ppwcode.form.CrudForm",                                               	    margin-top: 1.5ex;
       ppwcode.form.ObjectForm,                                               	    padding: 0.5ex;


                                                               (JavaScript)
       {                                                                        background-color: #FFEEEE;
         constructor: function() {                                              border: 1px solid red;
            this._tooltips = new Object();                                    }
            this._localizationbundle =
              dojo.i18n.getLocalization("ppwcode.form", "CrudForm");          .CrudFormErrorBoxTitle {
         },                                                                   	    font-weight: bold;
         postMixInProperties: function() {                                    }
            ...
         },                                                                   .CrudFormError {
         ...                                                                  	    color: red;
       });                                                                    }




                                                                       20
Extensible
           •register component library
               <script type="text/javascript"
                       src="js/dojo-release/dojo/dojo.js"
                       djConfig="modulePaths: {ppwcode: '../ppwcode'}”>
               </script>




           •Include them in your dojo page
<form id="frmYourMovie"
      dojoType="ppwcode.form.CrudForm"
      constructorFunction="Movie">
   ...
</form>




                                         21
Optimizable
•Download components
 • 1 component = 1 file
•Custom dojo builds
 • collect components in layers
   • 1 layer = 1 file
•JavaScript Optimization
 • Shrinksafe or Google closure
 • Compression rates to about 60%
   • shorten local variable names
   • remove comments, line breaks, ...
                   22
Testable
•Built-in unit test framework
•DOH: Dojo Objective Harness




             23
Community
•Forum
 • http://dojotoolkit.org/community
•Chat (IRC)
 • http://dojotoolkit.org/chat
•dojo.beer()



               24
Dojo foundation
•http://www.dojofoundation.org
•Hosts open source projects
•Goal: promote the Open Web
 • open, non-proprietary web technologies
•Some Projects

•Some (large) Contributors

               25
Outline
•Evolution in Web Applications
•Why dojo
•Showcase
 • Photo Gallery
 • CRUD applications
 • Facebook demo
 • WaveMaker
•Future

              26
Photo Gallery
•   http://hypocrates.peopleware.be:8080/Scroller
•   http://www.mahieu.org/Scroller




                   27
CRUD applications
•Custom dojo components
 • HTML Forms with CRUD semantics
 • DWR communication (Ajax)
 • Open Source
   • http://www.ppwcode.org
•Talk on Devoxx
 • http://www.mahieu.org/?p=424



               28
CRUD applications




      29
Facebook demo
http://hypocrates.peopleware.be:8080/
           FacebookDemo




               30
Facebook demo




    31
WaveMaker




  32
WaveMaker




  33
Outline
•Evolution in Web Applications
•Why dojo
•Showcase
•Future




             34
Future
•Mobile Devices
 • Mobile applications
 • Native vs. Mobile web app
 • Dojo
  • E.g. http://eventninja.net
 • Access hardware
  • PhoneGap (http://phonegap.com/)
  • Titanium (http://www.appcelerator.com)
  • E.g. http://humanapi.org


                35
Future
•Towards an open web
 • Standardization!
 • W3C Widgets
  • Similar to Dojo widgets
  • download once, store on device.
  • http://www.quirksmode.org/blog/archives/
     2009/04/introduction_to.html
 • HTML 5
  • Scripting API’s
    •   drag and drop, offline data storage, history mgt.
    •   SVG support, canvas element, timed media elements

  • E.g. http://www.youtube.com/html5
                   36
Thanks!
Questions?


  37

Weitere ähnliche Inhalte

Was ist angesagt?

Divya ASP Developer
Divya ASP Developer Divya ASP Developer
Divya ASP Developer
divya k
 

Was ist angesagt? (14)

CV
CVCV
CV
 
Kiely mitchell
Kiely mitchellKiely mitchell
Kiely mitchell
 
Built to Last
Built to LastBuilt to Last
Built to Last
 
JavaScript-Core
JavaScript-CoreJavaScript-Core
JavaScript-Core
 
Starting with jQuery
Starting with jQueryStarting with jQuery
Starting with jQuery
 
Mohamed ali ibrahim
Mohamed ali ibrahimMohamed ali ibrahim
Mohamed ali ibrahim
 
Divya ASP Developer
Divya ASP Developer Divya ASP Developer
Divya ASP Developer
 
Modular applications with montage components
Modular applications with montage componentsModular applications with montage components
Modular applications with montage components
 
Custom PrimeFaces components
Custom PrimeFaces componentsCustom PrimeFaces components
Custom PrimeFaces components
 
Unit 02: Web Technologies (2/2)
Unit 02: Web Technologies (2/2)Unit 02: Web Technologies (2/2)
Unit 02: Web Technologies (2/2)
 
Python - A Comprehensive Programming Language
Python - A Comprehensive Programming LanguagePython - A Comprehensive Programming Language
Python - A Comprehensive Programming Language
 
Jsf Framework
Jsf FrameworkJsf Framework
Jsf Framework
 
Advanced PrimeFaces
Advanced PrimeFacesAdvanced PrimeFaces
Advanced PrimeFaces
 
新版阿尔法城背后的前端MVC实践
新版阿尔法城背后的前端MVC实践新版阿尔法城背后的前端MVC实践
新版阿尔法城背后的前端MVC实践
 

Andere mochten auch (9)

Dojo & HTML5
Dojo & HTML5Dojo & HTML5
Dojo & HTML5
 
Angularjs vs Dojo toolkit | SuperSpeaker@CodeCamp Iasi 2014
Angularjs vs Dojo toolkit | SuperSpeaker@CodeCamp Iasi 2014Angularjs vs Dojo toolkit | SuperSpeaker@CodeCamp Iasi 2014
Angularjs vs Dojo toolkit | SuperSpeaker@CodeCamp Iasi 2014
 
How dojo works
How dojo worksHow dojo works
How dojo works
 
Advanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojoAdvanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojo
 
Dojo toolkit
Dojo toolkitDojo toolkit
Dojo toolkit
 
Dojo tutorial
Dojo tutorialDojo tutorial
Dojo tutorial
 
Introduction to HTML
Introduction to HTMLIntroduction to HTML
Introduction to HTML
 
The Dojo Toolkit An Introduction
The Dojo Toolkit   An IntroductionThe Dojo Toolkit   An Introduction
The Dojo Toolkit An Introduction
 
Complete Dojo
Complete DojoComplete Dojo
Complete Dojo
 

Ähnlich wie Ria with dojo

An Introduction to webOS
An Introduction to webOSAn Introduction to webOS
An Introduction to webOS
Kevin Decker
 
GDG Addis - An Introduction to Django and App Engine
GDG Addis - An Introduction to Django and App EngineGDG Addis - An Introduction to Django and App Engine
GDG Addis - An Introduction to Django and App Engine
Yared Ayalew
 
Introduction To Dojo
Introduction To DojoIntroduction To Dojo
Introduction To Dojo
yoavrubin
 
django_introduction20141030
django_introduction20141030django_introduction20141030
django_introduction20141030
Kevin Wu
 
Hdv309 - Real World Sandboxed Solutions
Hdv309 - Real World Sandboxed SolutionsHdv309 - Real World Sandboxed Solutions
Hdv309 - Real World Sandboxed Solutions
woutervugt
 
HTML5 kickstart - Brooklyn Beta workshop 21.10.2010
HTML5 kickstart - Brooklyn Beta workshop 21.10.2010HTML5 kickstart - Brooklyn Beta workshop 21.10.2010
HTML5 kickstart - Brooklyn Beta workshop 21.10.2010
Patrick Lauke
 
Jquery dojo slides
Jquery dojo slidesJquery dojo slides
Jquery dojo slides
helenmga
 

Ähnlich wie Ria with dojo (20)

Dojo: Beautiful Web Apps, Fast
Dojo: Beautiful Web Apps, FastDojo: Beautiful Web Apps, Fast
Dojo: Beautiful Web Apps, Fast
 
How to make Ajax Libraries work for you
How to make Ajax Libraries work for youHow to make Ajax Libraries work for you
How to make Ajax Libraries work for you
 
Ext JS Introduction
Ext JS IntroductionExt JS Introduction
Ext JS Introduction
 
Html5 and web technology update
Html5 and web technology updateHtml5 and web technology update
Html5 and web technology update
 
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web ToolkitJava Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
 
An Introduction to webOS
An Introduction to webOSAn Introduction to webOS
An Introduction to webOS
 
GDG Addis - An Introduction to Django and App Engine
GDG Addis - An Introduction to Django and App EngineGDG Addis - An Introduction to Django and App Engine
GDG Addis - An Introduction to Django and App Engine
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Introduction To Dojo
Introduction To DojoIntroduction To Dojo
Introduction To Dojo
 
django_introduction20141030
django_introduction20141030django_introduction20141030
django_introduction20141030
 
netbeans
netbeansnetbeans
netbeans
 
netbeans
netbeansnetbeans
netbeans
 
Hdv309 - Real World Sandboxed Solutions
Hdv309 - Real World Sandboxed SolutionsHdv309 - Real World Sandboxed Solutions
Hdv309 - Real World Sandboxed Solutions
 
HTML5 kickstart - Brooklyn Beta workshop 21.10.2010
HTML5 kickstart - Brooklyn Beta workshop 21.10.2010HTML5 kickstart - Brooklyn Beta workshop 21.10.2010
HTML5 kickstart - Brooklyn Beta workshop 21.10.2010
 
Intro to mobile web application development
Intro to mobile web application developmentIntro to mobile web application development
Intro to mobile web application development
 
Styling components with JavaScript
Styling components with JavaScriptStyling components with JavaScript
Styling components with JavaScript
 
How to bake an app in Dart and Polymer
How to bake an app in Dart and PolymerHow to bake an app in Dart and Polymer
How to bake an app in Dart and Polymer
 
Seven Versions of One Web Application
Seven Versions of One Web ApplicationSeven Versions of One Web Application
Seven Versions of One Web Application
 
qooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Frameworkqooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Framework
 
Jquery dojo slides
Jquery dojo slidesJquery dojo slides
Jquery dojo slides
 

Kürzlich hochgeladen

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Kürzlich hochgeladen (20)

Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 

Ria with dojo

  • 1. Rich Internet Applications with Dojo Tom Mahieu 24 - 04 - 2010
  • 2. About •Tom Mahieu • http://www.mahieu.org • SW Engineer, Phd Computer Science •PeopleWare • http://www.peopleware.be • Custom software development • Desktop/Web/Mobile apps, EAI • Technology: Java, .NET, Delphi • Business Intelligence • Training 2
  • 3. Outline •Evolution in Web Applications •Why dojo •Showcase •Future 3
  • 6. Web app evolution Browser tier Web tier Static HTML Internet files JavaScript HTML 6
  • 7. Web App Evolution Browser tier Web tier HTML PHP ASP Servlets Data tier Internet JSP JSF JavaScript Spring HTML ... 7
  • 8. Web App Evolution Browser tier Web tier HTML PHP ASP Servlets JSP JSF Spring Internet Web Services Data tier JavaScript REST HTML 8
  • 9. Web App Evolution •Browser incompatibilities • Javascript • Document Object Model (DOM) •In-browser software development • SW Engineering support • Testing JavaScript code? • cross-browser? • Good debugging tools • Browser plugins: Firebug • Built in development tools • IE8, Safari 9
  • 10. JavaScript library goals •Eliminate Browser incompatibilities •JavaScript language enhancements • Class based concepts •Library of common functionality • Ajax • DOM querying • DOM animation • UI (User Interface) widgets • Form controls • Layout controls 10
  • 13. Outline •Evolution in Web Applications •Why dojo •Showcase •Future 13
  • 14. Why dojo •Server side technology independent •Software engineering paradise • Layered • Modular • Extensible • Optimizable • Testable •Large Open Source Community •Dojo foundation 14
  • 15. Layered dijit dojoX • Declarative • Page Layout • Extensions • Forms • Tabs container • Extra’s • validation • Border container • Experimental • widgets • CSS Themes dojo core • Internationalization • Animation effects • Cookie management • Drag & Drop • History management • ... dojo base • Browser detection • JavaScript • Animations • DOM Querying (CSS3) • inheritance emulation • JSON Tools • Events, Publish/Subscribe • address incompatibilities • Ajax communication 15
  • 16. Layered •Dojo-enable your page: dojo base <html> <body> <script type="text/javascript" src="js/dojo/dojo/dojo.js"> </script> </body> </html> •Content Delivery Networks <html> <body> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.4/dojo/dojo.xd.js"> </script> </body> </html> 16
  • 17. Modular •Declaratively add functionality •Select components <script type="text/javascript"> dojo.require("dojo.parser"); dojo.require("dijit.form.Form"); dojo.require("dijit.form.Slider"); dojo.require("dijit.form.DateTextBox"); dojo.require("dijit.layout.TabContainer"); ... </script> •Select a theme <link rel="stylesheet" type="text/css" href="dojo/dojo/resources/dojo.css"; <link rel="stylesheet" type="text/css" href="dojo/dijit/themes/tundra/tundra.css"; <body class="tundra"></body> 17
  • 18. Modular •Add components to your page <form dojoType="dijit.form.Form"> <div dojoType="dijit.layout.TabContainer" class="tabcontainer"> <div dojoType="dijit.layout.ContentPane" title="Main"> <input dojoType="dijit.form.DateTextBox" name="releasedate" type="text"> </div> </div> </form> 18
  • 20. Extensible •Build Custom Components <form dojoAttachEvent="onreset:_onReset,onsubmit:_onSubmit" name="${name}"> @CHARSET "UTF-8"; <div dojoAttachPoint="containerNode"></div> HTML Template <div style="height: 1em;">&nbsp;</div> .CrudFormBusyPanel { <div dojoAttachPoint="errorMessagesNode"></div> text-align: center; <div dojoAttachPoint="buttonContainerNode"></div> position: absolute; </form> top: 50%; width: 100%; CSS dojo.provide("ppwcode.form.CrudForm"); margin-top: -1ex; } dojo.require("ppwcode.form.ObjectForm"); dojo.require("dijit.form.Button"); .CrudFormBusyMessage { dojo.require("dijit.Tooltip"); display: inline; dojo.require("dojo.i18n"); vertical-align: middle; dojo.requireLocalization("ppwcode.form", "CrudForm"); margin-left: 0.5em; } Dojo class dojo.declare( .CrudFormErrorBox { "ppwcode.form.CrudForm", margin-top: 1.5ex; ppwcode.form.ObjectForm, padding: 0.5ex; (JavaScript) { background-color: #FFEEEE; constructor: function() { border: 1px solid red; this._tooltips = new Object(); } this._localizationbundle = dojo.i18n.getLocalization("ppwcode.form", "CrudForm"); .CrudFormErrorBoxTitle { }, font-weight: bold; postMixInProperties: function() { } ... }, .CrudFormError { ... color: red; }); } 20
  • 21. Extensible •register component library <script type="text/javascript" src="js/dojo-release/dojo/dojo.js" djConfig="modulePaths: {ppwcode: '../ppwcode'}”> </script> •Include them in your dojo page <form id="frmYourMovie" dojoType="ppwcode.form.CrudForm" constructorFunction="Movie"> ... </form> 21
  • 22. Optimizable •Download components • 1 component = 1 file •Custom dojo builds • collect components in layers • 1 layer = 1 file •JavaScript Optimization • Shrinksafe or Google closure • Compression rates to about 60% • shorten local variable names • remove comments, line breaks, ... 22
  • 23. Testable •Built-in unit test framework •DOH: Dojo Objective Harness 23
  • 24. Community •Forum • http://dojotoolkit.org/community •Chat (IRC) • http://dojotoolkit.org/chat •dojo.beer() 24
  • 25. Dojo foundation •http://www.dojofoundation.org •Hosts open source projects •Goal: promote the Open Web • open, non-proprietary web technologies •Some Projects •Some (large) Contributors 25
  • 26. Outline •Evolution in Web Applications •Why dojo •Showcase • Photo Gallery • CRUD applications • Facebook demo • WaveMaker •Future 26
  • 27. Photo Gallery • http://hypocrates.peopleware.be:8080/Scroller • http://www.mahieu.org/Scroller 27
  • 28. CRUD applications •Custom dojo components • HTML Forms with CRUD semantics • DWR communication (Ajax) • Open Source • http://www.ppwcode.org •Talk on Devoxx • http://www.mahieu.org/?p=424 28
  • 34. Outline •Evolution in Web Applications •Why dojo •Showcase •Future 34
  • 35. Future •Mobile Devices • Mobile applications • Native vs. Mobile web app • Dojo • E.g. http://eventninja.net • Access hardware • PhoneGap (http://phonegap.com/) • Titanium (http://www.appcelerator.com) • E.g. http://humanapi.org 35
  • 36. Future •Towards an open web • Standardization! • W3C Widgets • Similar to Dojo widgets • download once, store on device. • http://www.quirksmode.org/blog/archives/ 2009/04/introduction_to.html • HTML 5 • Scripting API’s • drag and drop, offline data storage, history mgt. • SVG support, canvas element, timed media elements • E.g. http://www.youtube.com/html5 36