YOUR FEEDBACK
John Portnov wrote: This code does not work for me. I created a new website and a C# console applic...
AJAXWorld RIA Conference
$300 Savings Expire August 22
Register Today and SAVE!


2008 East
DIAMOND SPONSOR:
Data Direct
Frontiers in Data Access: The Coming Wave in Data Services
PLATINUM SPONSORS:
Red Hat
The Opening of Virtualization
Intel
Virtualization – Path to Predictive Enterprise
Green Hills
IT Security in a Hostile World
JBoss / freedom oss
Practical SOA Approach
GOLD SPONSORS:
Software AG
The Art & Science of SOA: How Governance Enables Adoption
PlateSpin
Effective Planning for Virtual Infrastructure Growth
Fujitsu
Automated Business Process Discovery & Virtualization Service
Ceedo
Workspace Virtualization
Click For 2007 West
Event Webcasts

2008 East
PLATINUM SPONSORS:
Appcelerator
Think Fast: Accelerate AJAX Development with Appcelerator
GOLD SPONSORS:
DreamFace Interactive
The Ultimate Framework for Creating Personalized Web 2.0 Mashups
ICEsoft
AJAX and Social Computing for the Enterprise
Kaazing
Enterprise Comet: Real–Time, Real–Time, or Real–Time Web 2.0?
Nexaweb
Now Playing: Desktop Apps in the Browser!
Sun
jMaki as an AJAX Mashup Framework
POWER PANELS:
The Business Value
of RIAs
What Lies Beyond AJAX?
KEYNOTES:
Douglas Crockford
Can We Fix the Web?
Anthony Franco
2008: The Year of the RIA
Click For 2007 Event Webcasts
SYS-CON.TV
TOP LINKS YOU MUST CLICK ON


AjaxWord: An Open Source Web Word Processor
AjaxWord: An Open Source Web Word Processor

The Code
The AjaxWord client consists of JavaScript and HMTL code. The application's user interface is defined in HTML. Client-side logic written in JavaScript defines the behavior of the user interface by leveraging a generic JavaScript/DHTML toolkit that's built from scratch. From a Model-View-Controller perspective, the HTML files are "Views" and the JavaScript code acts as "Controllers."

The JavaScript/DHTML toolkit defines all the UI widgets. By separating UI widgets from the application, it's easier to develop and maintain the application code. Because of the level of richness required by AjaxWord and the limited availability of AJAX toolkits in the late 1990s, this entire toolkit was written from scratch. It would have been easier to build AjaxWord today by leveraging some of the available toolkits that have emerged in the last 12 months.

A Generic DHTML/JavaScript Toolkit
The AjaxWord DHTML/JavaScript toolkit is a generic toolkit that contains a list of rich user interface components, event management, and code for doing asynchronous communications.

In Figure 10, the left items are available with Web browsers. All other items aren't available in browsers and have to be built from scratch. In addition to UI elements, the toolkit provides a systematic way of managing UI events and doing asynchronous communications. When the application was written, the popular XmlHttpRequest object wasn't available in browsers, so AjaxWord actually uses hidden frames to asynchronously communicate.

Instead of elaborating on how each component is built, we will use the "window" object as an example. The window object that we are referring to is a draggable, resizable window that resides inside a standard browser window, giving the look-and-feel of a multiple document interface. It is a basic component for desktop application user interfaces, but isn't available for Web applications.

Creating a "Window" Widget
Figure 11 shows how an AjaxWord UI Toolkit window is running inside a browser alongside some HTML text. We'll explain how to define its view and its behavior below.

Defining the View
The view is defined using HTML. To mimic a window look, the view defines 14 different areas of a "window" user interface: the four corners, the four edges, the window content, the title bar, and the four window control areas (close, maximize, minimize, and the window icon). Figure 12 shows how a window user interface is split into 14 different regions.

Each window area is defined by a "DIV" tag. For the four corners and four edges, each DIV tag contains an image. Each of the four window controls also contain an image. When necessary, these images can be changed according to style requirements. Some of DIV tags have event handlers defined too so that the window can respond to events. The view definition code is shown in Listing 1.

Defining the Controller
The controller logic of a window widget is defined using JavaScript. The JavaScript file "NWindow.js" is one of the controllers that define the basic behavior of a window widget.

Window Initialization
When a window is created, "NWindow.js" initializes it by connecting the JavaScript object with the "view" object (HTML code), hooking up event handlers and initializing object properties. See Listing 2 for the initialization code.

Window Event Handling
The JavaScript file handles various window-related events such as resizing the window in response to mouse-drag events on the four edges, maximizing the window or closing the window in response to mouse-click events, or moving the window in response to mouse-drag events on the title bar. On the other side, the JavaScript file also fires window events to the toolkit's event management system so that if a listener is registered for a certain window event, the listener can be called.

Window Widget API
The JavaScript file also provides an API for developers to program this window object, such as setting the window title or resizing the window programmatically. The code in Listing 3 lets developers set the title, status, and icon of a window object

AjaxWord Client Application Logic
AjaxWord does a significant amount of processing on the client side for application performance reasons. With a lot of code on the client side, applications can deliver better performance. However, such applications must be designed and coded carefully to avoid code maintenance problems.

The abstraction of UI widgets into a generic AJAX toolkit certainly helps code maintenance. AjaxWord also uses an object-oriented, event-driven approach to develop the application's client-side logic to manage and maintain the client-side code.

All client-side logic resides in two JavaScript files: nwWord.js and nwWordMenuListener.js. The first JavaScript file defines the application-wide logic while the second one responds to menu and toolbar events.

Loading the Application
For applications that have a significant amount of code on the client side, developers have to consider how the application is being loaded. Otherwise users will think the application is slow and abandon it.

AjaxWord requires a significant amount of initial download (several hundred kilobytes, dozens of HTML and JavaScript files, and many image files). This download process can take anywhere from a few seconds on a fast connection to 40 seconds on a slow dialup connection. To engage the user and improve perceived performance, AjaxWord uses a progress bar to indicate the loading progress so that the user knows the status and gets constant visual feedback, as shown in Figure 13

AjaxWord uses the code snippet below to update the progress bar and the status message. This code snippet follows each JavaScript file declaration statement so the "loadProgress1()" method will be executed every time a new file finishes loading:

<SCRIPT TYPE="text/JavaScript">loadProgress1();</script>

This way the user sees the progress being made as the application loads. Listing 4 is the loading page for AjaxWord.


About Coach Wei
Coach Wei is the Founder and Chairman of Nexaweb (www.nexaweb.com), developers of the leading software platform for building and deploying Web 2.0 and AJAX applications. Previously, he played a key role at EMC Corporation in the development of a new generation of storage network management software. Wei has his master's degree from MIT, holds several patents, is the author of several technology publications including JDJ, Web 2.0 Journal, and AJAXWorld Magazine, and is an industry advocate for the proliferation of open standards.

ENTERPRISE OPEN SOURCE MAGAZINE LATEST STORIES . . .
Money is being made with Open Source. Some make spectacular money by exploiting Open Source (Google, Apple) and some things wouldn't even exist without it (Internet, Software as a Service, Cloud Computing) - so it really boils down to finding the right business model.
ELASTRA announced Elastra Cloud Server support for the Eucalyptus platform. ELASTRA’s products are designed for portability across compute clouds and currently provide support for the Amazon EC2 and S3 compute and storage environments. Because Eucalyptus exposes its virtual machines ...
Jitterbit has announced the availability of Jitterbit 2.0 Enterprise, which includes new capabilities, scalability and management tools. With this new release, organizations have the ability to solve integration challenges between legacy, enterprise, and on-demand applications and data...
A new API is supposed to integrate LinMin Bare Metal Provisioning 5.2 into environments that haven’t been able to do bare metal provisioning of Windows, Red Hat, Novell, Ubuntu, CentOS, Fedora or Asianux on physical systems or virtual machines before. The rev also features single-com...
The United States Court of Appeals for the Federal Circuit Wednesday overturned a year-old San Francisco district court decision that deprived the aggrieved plaintiff in a dispute over open source software governed by the Artistic License of the right to sue for copyright infringement ...
Google has waded into the encryption business with an open source cross-platform toolkit called Keyczar that’s supposed to make it easier for ISVs to put cryptography in their applications. It says Keyczar supports both encryption and authentication with both symmetric and asymmetric...
SUBSCRIBE TO THE WORLD'S MOST POWERFUL NEWSLETTERS
SUBSCRIBE TO OUR RSS FEEDS & GET YOUR SYS-CON NEWS LIVE!
Click to Add our RSS Feeds to the Service of Your Choice:
Google Reader or Homepage Add to My Yahoo! Subscribe with Bloglines Subscribe in NewsGator Online
myFeedster Add to My AOL Subscribe in Rojo Add 'Hugg' to Newsburst from CNET News.com Kinja Digest View Additional SYS-CON Feeds
Publish Your Article! Please send it to editorial(at)sys-con.com!

Advertise on this site! Contact advertising(at)sys-con.com! 201 802-3021


SYS-CON FEATURED WHITEPAPERS

ADS BY GOOGLE