Web Standards and Introduction
SGML, HTML History
CSS History
Browser Support For CSS
“Quirky” Browsers
Quirks Mode
Standards Mode
Almost-Standards Mode
DTDs and Browser DOCTYPE Switching
Guides for Selecting DOCTYPEs
Development Tools: FireFox, Firebug
JavaScript Console
DOM Inspector
Venkmann JavaScript Debugger
Microsoft Script Debugger
Layered Semantic Markup
Presentational HTML
Semantic HTML
Block vs. Inline Elements
Replaced and Non-replaced Elements
CSS Basics
CSS Rules
Inline Rules
Embedded Styles
Linked Style Sheets
Working with New and Old Browsers
Creating a Common Starting Point with Browsers
A Template CSS
Selectors
Descendent Groupings
Child/Sibling Selectors
Classes
ID Selectors
Contextual Selectors
Attribute Selectors
Pseudo-Elements
Pseudo-Classes
Determining Cascade Order
Specificities
CSS Inheritance
!important
General CSS Rule Layouts
IE and CSS incompatibilities
CSS Design: Fonts, Colors, Backgrounds
Numbers and Units
Specifying Colors
Font Properties
Text Properties
Background Properties
Creating Lists
Styling Lists
List Properties
CSS Box Model, Positioning, Visual Formatting
The CSS Box Model
Setting Borders and Margins
Special Styles and Colors
Shorthand Notations
Collapsing Margins
Box Paddings
IE vs. W3C Box Model Differences
IE Box Model Hacks
Height and Widths
Block vs. Inline Styles
Absolute Positioning
Relative Positioning
Floating Elements
Three-Column Layouts
Fixed Positioning
Clearing Elements
Two-Column Layouts
Using Rounded Corners on Layouts
Drop Shadows on Text
Drop Shadows on Images
Image Opacities
Improving Design
Creating Complex Designs
Fixed Width Layouts
Design Tips: Line Lengths
Design Tips: Text Units
Design Tips: Removing Tag Soup
Styling Tables
Highlighting Table Rows
Creating Tooltips
Styling Forms
Creating Tabbed Layouts
Creating Drop Down Menus
JavaScript Basics
How Does JavaScript Fit In?
JavaScript: The Old Way
Modern JavaScript
ECMAScript Syntax
Various Operators
JavaScript Types
NaN
Manipulating Strings
Conversions
Control Structures
Functions
Object-Oriented JavaScript
Native Objects
String, Date, Boolean, Number
Array, Function, Object
Creating and Working with Arrays
Encapsulation: public and private
Static variables
This
Creating Objects Using Factories
Creating Objects Using Prototypes
Creating Objects Using Constructors
Constructor/Prototype Combinations
Advanced JavaScript
The Function Class
call()
apply()
Argument Passing
Advanced Argument Passing: Argument Object
Overloading
Functional Closures
Inheritance
Prototype Chaining
OO Best Practices
Utility Libraries
Error Handling
Exception Handling
Try-catch
Onerror Event Handler
Throwing Exceptions
Debugging Techniques
DHTML and JavaScript
What is the DOM?
Accessing Nodes
DOM Traversal
Node Properties
Manipulating the DOM Tree
Dynamically Changing Style Properties
Adding and Removing Classes
Creating Interactions
Browser Object Model (BOM)
Browser Detection Techniques
Working with Windows
Working with Timeouts
InnerHTML
Manipulating Styles
Events and DHTML
W3C Event Model
IE Event Model
The Event Object
Event Types
Creating a Browser-Independent Event Object
Sorting Data within Tables
Reverse Sorting
Sorting and Events
Forms and Event Handling
Controlling the Requests
Asynchronous Operations
Creating Callback Functions
Monitoring the state of the XHR
Communicating with the Server
XML as a response
Creating a more Robust Solution
Graceful degradation and Error Handling
Creating Rich AJAX Interactions
An AJAX Utility Library
Automating Requests
Object-Oriented Responses
JavaScript Object Notation (JSON)
XML vs. JSON
The Prototype Toolkit
Architecture in the Solution
A Front-End Model View Controller
Creating a Complex Controller
Inline Data Retrieval
Dynamic Forms and Updates
Rolling Forms into Ajax Requests Automatically
POSTing Data
Dynamic Validation Routines
Advanced Client-Server Communication and Other Topics
Using Cross-Domain Proxies
Incorporating a Dynamic Script Tag Solution
Utilizing RSS and XML Feeds
Server-to-Client Status Submit
Validation
Regular Expressions
Editing Lists
Dragging and Dropping Items
Asynchronous JavaScript and XML Overview
Rich Internet Application Development
Incorporating AJAX Solutions into Applications
Practical Examples of AJAX and Web 2.0
Understanding the Layered Semantic Architectures
Asynchronous JavaScript and XML Principles
Introducing the XMLHttpRequest Object
Creating the XHR for any Browser
Sending Updates (Server Push)
Browser Memory Leaks
JavaScript Performance
Integrating AJAX and J2EE
Implementing With AJAX
Creating Dynamic Tooltips
Look Ahead Type Suggestion Boxes
Event-based Rich User Interactions
Appendix A
Server-side support of AJAX
Java-based Server Support
Ruby on Rails
READING
Due to the amount of material covered, reading ahead of time is recommended. The following sources are suggested reading before and during the course:
Designing with Web Standards, by Jeffrey Zeldman, New Riders, 2003
JavaScript For Web Developers, by Nicholas C. Zakas, Wrox, 2005
Head Rush AJAX, by Brett McLaughlin, O’Reilly, 2006
COURSE COVERAGE
This course spends approximately 50% of time on labs and 50% in lecture. Approximately 1 day is spent on CSS and related topics, about 1 day on JavaScript Syntax, 1 day on DHTML, and 1 day of AJAX. The discussions build upon each other and topics from the first days are used in the later days.