Preface 1. The Web As Application Platform Adding Power to Web Applications Developing Web Applications JavaScript's Triumph 2. The Power of JavaScript Nonblocking I/O and Callbacks Lambda Functions Are Powerful Closures Functional Programming Prototypes and How to Expand Objects Expanding Functions with Prototypes Currying and Object Parameters Array Iteration Operations You Can Extend Objects, Too 3. Testing JavaScript Applications QUnit A Simple Example Testing with QUnit Selenium Selenium Commands Constructing Tests with the Selenium IDE Automatically Running Tests Selenese Command Programming Interface Running QUnit from Selenium Selenium RC and a Test Farm 4. Local Storage The localStorage and sessionStorage Objects Using localStorage in ExtJS Offline Loading with a Data Store Storing Changes for a Later Server Sync JQuery Plug-ins DSt jStore 5. IndexedDB Adding and Updating Records Adding Indexes Retrieving Data Deleting Data 6. Files Blobs Working with Files Uploading Files Drag-and-Drop Putting It All Together Fiiesystem 7. Taking It Offline . Introduction to the Manifest File Structure of the Manifest File Updates to the Manifest File Events Debugging Manifest Files 8. Splitting Up Work Through Web Workers Web Worker Use Cases Graphics Maps Using Web Workers The Worker Environment Worker Communication Web Worker Fractal Example Testing and Debugging Web Workers A Pattern for Reuse of Muhithread Processing Libraries for Web Workers 9. Web Sockets The Web Sockets Interface Setting Up a Web Socket Web Socket Example Web Socket Protocol Ruby Event Machine Erlang Yaws 10. New Tags Tags for Applications Accessibility Through WAI-ARIA Microdata New Form Types Audio and Video Canvas and SVG Geolocation New CSS Appendix: JavaScript Tools You Should Know Index