- Table of Contents
- Copyright
- Preface
- 1. Mozilla Background
- 2. The State of Mozilla
- 3. Who Should Read This Book
- 4. Platform and Applications
- 5. Structure of the Book
- 6. How This Book Was Written
- 7. Mozilla Licensing Information
- 8. Conventions
- 9. Comments and Questions
- 10. Acknowledgments
- 1. Mozilla as Platform
- 1.1. Visualizing Mozilla's Front End
- 1.1.1. XPFE Framework
- 1.1.2. Comparing XPFE and DHTML
- 1.1.3. Components of a Mozilla Application
- 1.2. Setting Up Your System
- 1.3. Mozilla Applications
- 1.3.1. Applications as Web Pages
- 2. Getting Started
- 2.1. Simple XUL Example
- 2.2. Basic XUL Concepts
- 2.2.1. The XUL File Format
- 2.2.2. Conventions
- 2.2.3. The XUL Namespace
- 2.2.4. Basic XUL Layout
- 2.2.5. Using XUL Windows
- 2.3. Making Mozilla Work for You
- 2.3.1. Importing Resources from Mozilla
- 2.4. Displaying XUL Files as Chrome
- 2.5. Creating a Package
- 2.5.1. Architecture of a Chrome Package
- 2.5.2. Package Components
- 2.5.3. Directory Structure
- 2.5.4. Package Manifests
- 2.5.5. Separating the Files
- 2.5.6. Registering a Package
- 2.6. Launching the Application
- 2.6.1. Windows launch
- 3. XUL Elements and Features
- 3.1. The XUL Document Object
- 3.1.1. XUL Parsing and the Document Object Model
- 3.2. Application Windows
- 3.2.1. Dialogs
- 3.2.2. Pages
- 3.2.3. Wizards
- 3.3. Application Widgets
- 3.3.1. The Toolbox
- 3.3.2. Selection Lists
- 3.4. Tabular and Hierarchical Information
- 3.4.1. List Boxes
- 3.4.2. High Performance Trees
- 3.4.3. Grid
- 3.5. Words and Pictures
- 3.5.1. Text Input
- 3.5.2. Text Display
- 3.5.3. Images
- 3.6. Form Controls
- 3.6.1. Radio
- 3.6.2. Checkbox
- 3.6.3. Buttons
- 3.7. Widget Interaction
- 3.7.1. Broadcaster and Observers
- 3.7.2. Commands
- 3.8. Content Panels
- 3.8.1. Browser and IFrame
- 3.8.2. Editor
- 3.9. The Box Model
- 3.9.1. Box Attributes
- 3.9.2. Box-Like Containers
- 3.9.3. Additional Box Features
- 3.9.4. Stacks and Decks
- 3.10. XUL Attributes
- 3.10.1. Stretchiness
- 3.10.2. Style
- 3.10.3. Persistence
- 3.10.4. The debug Attribute
- 3.11. Overlays
- 3.11.1. How to Use Overlays
- 3.11.2. Content Positioning
- 3.12. The Extras
- 3.12.1. Tooltips
- 3.12.2. Progress Meter
- 3.12.3. Links
- 3.13. Building the Application Shell
- 4. CSS in Mozilla Applications
- 4.1. Interface Basics
- 4.1.1. Skins Versus Themes
- 4.1.2. Limitations of a Skin
- 4.1.3. Theme Abstraction (or Building Good Skins)
- 4.1.4. Cross-Platform Interface Considerations
- 4.2. Introduction to CSS in Mozilla
- 4.2.1. Basic XUL + CSS Interaction
- 4.2.2. Stylesheet Syntax
- 4.2.3. Special Mozilla Extensions
- 4.2.4. Referencing Images in CSS
- 4.2.5. Menu Skinning
- 4.3. Mozilla Skins
- 4.3.1. CSS and Skin Hierarchies
- 4.3.2. Basic Skin Structure
- 4.3.3. The Modern and Classic Themes
- 4.3.4. Skin Files
- 4.4. Creating New Skins
- 4.4.1. Importing the Global Skin
- 4.4.2. Getting Started with Custom Styles
- 4.4.3. Creating Styles for the xFly Buttons
- 4.4.4. Describing the Skin in RDF
- 4.5. What Is Possible in a Skin?
- 4.5.1. Binding New Widgets to the Interface Using XBL
- 4.5.2. User Stylesheets
- 4.5.3. Theme Security Restrictions
- 5. Scripting Mozilla
- 5.1. Faces of JavaScript in Mozilla
- 5.2. JavaScript and the DOM
- 5.2.1. What Is the DOM?
- 5.2.2. The DOM Standards and Mozilla
- 5.2.3. DOM Methods and Properties
- 5.3. Adding Scripts to the UI
- 5.3.1. Handling Events from a XUL Element
- 5.3.2. Events and the Mozilla Event Model
- 5.3.3. Changing an Element's CSS Style Using JavaScript
- 5.3.4. Creating Elements Dynamically
- 5.3.5. Sharing Data Between Documents
- 5.4. XPConnect and Scriptable Components
- 5.4.1. What Is XPConnect?
- 5.5. JavaScript Application Code
- 5.5.1. JavaScript Libraries
- 6. Packaging and Installing Applications
- 6.1. Packaging and Installing Overview
- 6.2. Packaging Mozilla Applications
- 6.2.1. Package Manifests
- 6.2.2. Registering Packages
- 6.2.3. Creating a Package
- 6.2.4. The Chrome Registry
- 6.3. Installing Mozilla Applications
- 6.3.1. The XPI File Format
- 6.3.2. Installation Scripts
- 6.3.3. XPInstall
- 6.3.4. Uninstalling Applications
- 6.4. Finishing Things Up
- 6.4.1. Creating the xFly XPI
- 6.4.2. Adding the Installation Script
- 6.4.3. Web Page Installer
- 6.5. Extra Tricks for Customizing an Application
- 6.5.1. Icons
- 6.5.2. Splash Screen
- 7. Extending the UI with XBL
- 7.1. What Is XBL?
- 7.1.1. XBL Terminology
- 7.1.2. An XBL Document
- 7.1.3. Namespaces and XBL
- 7.1.4. XBL and HTML
- 7.2. Anatomy of a Binding
- 7.2.1. CSS Attachment
- 7.2.2. The XBL Content Element
- 7.2.3. The Implementation Element
- 7.2.4. Handlers
- 7.2.5. Style
- 7.3. Adding Behavior to Bindings
- 7.3.1. Binding Methods
- 7.3.2. Binding Properties
- 7.4. XBL and the DOM
- 7.4.1. The XBL DOM Interfaces
- 7.4.2. Binding Parents
- 7.4.3. Accessing Anonymous Nodes
- 7.4.4. Extra Binding Content and Insertion Points
- 7.5. Inheritance
- 7.5.1. Binding Inheritance
- 7.5.2. Attribute Inheritance
- 7.5.3. Implementation Inheritance
- 7.6. Event Handling
- 7.6.1. The Time and Venue
- 7.7. Resources for Bindings
- 7.7.1. Stylesheets in XBL
- 8. XPCOM
- 8.1. What Is XPCOM?
- 8.1.1. What Is a Component?
- 8.1.2. XPConnect and the Component Object
- 8.1.3. XPCOM Interfaces and the IDL
- 8.1.4. XPCOM Type Libraries
- 8.1.5. XPCOM Identifiers
- 8.1.6. Component Manager
- 8.1.7. Getting and Using XPCOM
- 8.2. Creating XPCOM Components
- 8.2.1. Creating a JavaScript XPCOM Component
- 8.2.2. Compiling the Component
- 8.2.3. Testing the Component
- 8.2.4. Useful C++ Macros and Types
- 8.2.5. C++ Implementation of nsISimple
- 8.2.6. The nsSimple module code
- 8.2.7. Other Languages for XPCOM
- 8.2.8. XPCOM as an Open Cross-Platform Solution
- 9. XUL Templates
- 9.1. Understanding XUL Templates
- 9.1.1. Basic template structure
- 9.2. Enhancing XUL Templates
- 9.2.1. Nested Content Sample
- 9.2.2. Using Data for Style
- 9.2.3. Tree Template
- 9.2.4. Multiple Rules Tree
- 9.2.5. Multiple Rules Menubar
- 9.3. Using Other XUL Tags for Templates
- 10. RDF, RDF Tools, and the Content Model
- 10.1. RDF Basics
- 10.1.1. RDF Data Model
- 10.1.2. RDF Syntax
- 10.1.3. Building an RDF File from Scratch
- 10.2. The Mozilla Content Model
- 10.2.1. Datasources
- 10.3. RDF Components and Interfaces
- 10.3.1. What Is an RDF Component?
- 10.3.2. What Are RDF Interfaces?
- 10.3.3. nsIRDFService
- 10.3.4. nsIRDFCompositeDataSource
- 10.3.5. nsIRDFDataSource
- 10.3.6. nsIRDFRemoteDataSource
- 10.3.7. nsIRDFPurgeableDataSource
- 10.3.8. nsIRDFNode, nsIRDFResource, and nsIRDFLiteral
- 10.3.9. nsIRDFContainerUtils
- 10.3.10. nsIRDFContainer
- 10.3.11. nsIRDFXML Interfaces
- 10.4. Template Dynamics
- 10.4.1. Template Dynamics in XBL
- 10.5. JSLib RDF Files
- 10.6. Manifests
- 10.6.1. RDF and Dynamic Overlays
- 11. Localization
- 11.1. Localization Basics
- 11.1.1. For the Developer
- 11.1.2. Files and File Formats
- 11.1.3. UI Aesthetics and Principles
- 11.2. DTD Entities
- 11.2.1. Inserting Entities
- 11.2.2. External and Inline Entities
- 11.3. String Bundles
- 11.3.1. Inside a Bundle
- 11.3.2. String Bundle Methods and Properties
- 11.3.3. Creating Your Own Bundle
- 11.4. Programming and Localization
- 11.4.1. Naming Conventions
- 11.4.2. Breaking Up the Text
- 11.4.3. Anonymous Content and Locale
- 11.4.4. Localizable Resources in HTML
- 11.4.5. Localizable Resources in RDF
- 11.5. The Chrome Registry and Locale
- 11.5.1. The Directory Structure
- 11.5.2. Interaction with the Chrome Registry
- 11.5.3. Distribution
- 11.6. Localization Issues
- 11.6.1. XPFE and Unicode
- 11.6.2. Language Quirks
- 12. Remote Applications
- 12.1. Directions in Remote Application Development
- 12.2. Basic Remote Application Example
- 12.2.1. Case Study: Snake (a.k.a. Hiss-zilla)
- 12.3. Setting Up XPFE for Remote Applications
- 12.3.1. Server Configuration
- 12.4. Generated Content
- 12.4.1. Generating Content with Scripting Languages
- 12.4.2. Generating Content from a Database
- 12.4.3. Localizing Remote Applications
- 12.5. Certificate Authorities and Digital Signatures
- 12.5.1. Mozilla Network Security Services (NSS)
- 12.5.2. CA Certificates, Signing Certificates, and the Certificate Chain
- 12.5.3. Setting Up a Certificate Authority
- 12.5.4. Issuing Signing Certificates
- 12.5.5. Distributing Distribution Certificates
- 12.6. Creating Signed Remote Applications
- 12.6.1. certs.mozdev.org CA Certificate
- 12.6.2. Signing Certificates
- 12.6.3. Creating and Signing the Application
- 12.6.4. Receiving a Signed Application
- 12.7. Expanded Privileges in Mozilla
- 12.8. Signed Remote Snake Game
- 12.8.1. How to Expand Mozilla to Full Screen
- 12.9. Mozilla's XML Extras and SOAP
- 12.9.1. Mozilla, SOAP, and .NET
- 12.9.2. Setting Up a .NET Web Service
- 12.9.3. .NET WSDL
- 12.9.4. SOAP Call XML Formats
- 12.9.5. Adding SnakeService SOAP to Snake
- 12.9.6. Make SOAP Functions Work in XUL Documents
- 12.9.7. Examining SOAP Functions for Snake
- 12.10. Looking Forward
- A. Getting and Building the Mozilla Source
- A.1. Getting the Source Code
- A.1.1. Downloading the Source with FTP
- A.1.2. Downloading the Source with CVS
- A.1.3. Working with Branching
- A.2. Building the Source Code
- A.2.1. Unix Environment
- A.2.2. Windows Environment
- A.2.3. Macintosh Environment
- B. Development Tools
- B.1. XULKit
- B.1.1. new-from-template.pl Script
- B.1.2. makexpi.pl Script
- B.1.3. Using XULKit
- B.2. Patch Maker 2.0
- B.2.1. CVS Mode
- B.2.2. Build Mode
- B.3. The DOM Inspector
- B.4. The Component Viewer
- B.5. Venkman: The JavaScript Debugger
- B.6. MozillaTranslator
- B.7. Missing Parts
- B.7.1. Visual XUL Editors
- B.7.2. Toolkits and Libraries
- B.7.3. Integrating the Pieces
- C. Programmer's Reference
- C.1. XUL Element Set
- action -- Child element in a XUL template structure that draws content for matched data
- arrowscrollbox -- Container box for scrolling contents
- autorepeatbutton -- Provides arrows for a scrolling area
- binding -- Child element in a XUL template that optionally matches in the data
- bindings -- Substructure in a XUL template that collects the optional binding rules
- box -- Generic container and layout element
- broadcaster -- Notifies elements when a change occurs in the UI
- broadcasterset -- Container for broadcaster elements
- browser -- Web-content container
- button -- A widget that activates some functionality when pressed
- caption -- Provides heading for a groupbox element
- checkbox -- Indicates a specified feature's on/off state
- colorpicker -- Widget used to choose a color
- column -- A column in a grid
- columns -- Container for the number of columns in a grid
- command -- Defines functionality that can be called from multiple sources
- commands -- Container for a group of command sets
- commandset -- A container for multiple command elements
- conditions -- Defines the conditions within a template rule
- content -- Binds variables in a template
- deck -- Box container that displays one child element at a time
- description -- Holder for block of text that can wrap to multiple lines
- dialog -- Root element for secondary XUL window
- dialogheader -- Styled text heading for UI panel
- editor -- Content area for editable web content
- grid -- Widget for laying out content in a structured tabular fashion
- grippy -- Visible widget used on a grippy bar to expand or collapse a UI region
- groupbox -- Box with frame surrounding it
- hbox -- Box container whose children are laid out horizontally
- iframe -- Web content area
- image -- Display of a supported type image
- key -- Definition for a keyboard shortcut
- keybinding -- Container for a keyset or group of keysets
- keyset -- Container for one or more key elements
- label -- Simple text display element and label for a control element
- listbox -- Used for display of a flat list of items
- listcell -- Single cell of a listbox
- listcol -- Listbox column definition
- listcols -- Container for listbox columns (listcol)
- listhead -- Container for column header in list boxes (listheader)
- listheader -- Text header for listbox column
- listitem -- Listbox row definition
- member -- Matches container relationships in which the parent element is given by a container element and the child by a child element
- menu -- A menu element for containing menu items
- menubar -- Containing element for one or more menus
- menuitem -- Single selectable choice in a menu
- menulist -- Drop-down list of selectable items
- menupopup -- Pop-up container for menu items
- menuseparator -- Line separating menu items
- observes -- Broadcast event and attribute listener
- overlay -- Root element in a separate file that contains reusable XUL content
- page -- Root element of XUL file loaded in a content frame
- popup -- Box container as child window
- popupset -- Container for popup elements
- progressmeter -- Visual progress indicator of a time-consuming operation
- radio -- Single on/off choice represented as selectable circle
- radiogroup -- Framed box for containing radio elements
- resizer -- Window-resizing element
- row -- Container for grid cells laid out consecutively
- rows -- Definition for grid rows
- rule -- Defines rules for rendering data as XUL
- script -- Declaration of script used in XUL file
- scrollbar -- Widget for scrolling in a container
- scrollbarbutton -- Button used to move position of scrollbar thumb
- scrollbox -- Box for scrolling content
- separator -- Bar between elements
- slider -- A scrollbar without buttons
- spacer -- Blank space separating element
- splitter -- Element for dragging and resizing associated elements
- stack -- Shows children one on top of one another, all at the same time
- statusbar -- Box container for status elements
- statusbarpanel -- Single unit of a statusbar
- stringbundle -- Holder of localized properties for use in script
- stringbundleset -- Container for stringbundle elements
- tab -- A single selectable tab of a tabbox
- tabbox -- Box container for tab panels
- tabbrowser -- Tabbed holder for a set of web content views
- tabpanel -- A single panel of a tabbox
- tabpanels -- Container for tabpanel elements
- tabs -- Container for tab elements
- template -- A high-level widget used to build content dynamically from data
- textbox -- Accepts text input from user
- thumb -- Object used to move content in scrollable area
- toolbar -- Holder of buttons for quick-access UI functionality
- toolbarbutton -- Specially adapted button for use in a toolbar
- toolbarseparator -- Visible separator for elements contained in a toolbar
- toolbox -- Optional container for menu bars and toolbars
- tooltip -- Pop-up window for context-sensitive help
- tree -- Hierarchical holder of information represented as rows
- treecell -- A single cell in a tree
- treechildren -- The main body of a tree; a container for treeitems
- treecol -- A single column of a tree
- treecols -- Container for tree columns
- treeitem -- A treerow container
- treerow -- A single row of a tree
- triple -- Substructure of a template that matches RDF statements in the data
- vbox -- Box container with vertically laid out children
- window -- Root element of a top-level XUL window document
- wizard -- Window used to step though a task
- wizardpage -- A single panel (step) of a wizard
- C.2. XBL Element Set
- binding -- A single XBL binding
- bindings -- An XBL document's root element
- body -- Container for JavaScript code to be executed by an XBL method
- children -- Insertion point for children of a bound element, or inherited binding
- constructor -- Container for code to be executed when a binding is created
- content -- Container for anonymous content to be inserted into a bound document
- destructor -- Container for code to be executed when a binding is destroyed
- element -- Insertion point for bound elements in anonymous content
- field -- Holder property for simple data
- getter -- Script access point for an element's property
- handler -- Single event handler for an XBL element
- handlers -- Container for event-handler elements
- image -- An image resource in a binding
- implementation -- Container for binding methods and properties
- method -- Script function to be accessed on a binding object
- parameter -- Single paramter declaration for a method
- property -- Definition of a single binding object property
- resources -- Container for list of resources that can be used by a binding
- setter -- Change a binding property's value
- stylesheet -- Captures an external stylesheet for use by anonymous content
- C.3. Event Attributes
- onblur -- //FIXME purpose should go here
- onbroadcast -- //FIXME purpose should go here
- onchange -- //FIXME purpose should go here
- onclick -- //FIXME purpose should go here
- onclose -- //FIXME purpose should go here
- oncommand -- //FIXME purpose should go here
- oncommandupdate -- //FIXME purpose should go here
- oncontextmenu -- //FIXME purpose should go here
- oncreate -- //FIXME purpose should go here
- ondblclick -- //FIXME purpose should go here
- ondestroy -- //FIXME purpose should go here
- ondragdrop -- //FIXME purpose should go here
- ondragenter -- //FIXME purpose should go here
- ondragexit -- //FIXME purpose should go here
- ondraggesture -- //FIXME purpose should go here
- ondragover -- //FIXME purpose should go here
- onfocus -- //FIXME purpose should go here
- oninput -- //FIXME purpose should go here
- onkeydown -- //FIXME purpose should go here
- onkeypress -- //FIXME purpose should go here
- onkeyup -- //FIXME purpose should go here
- onload -- //FIXME purpose should go here
- onmousedown -- //FIXME purpose should go here
- onmousemove -- //FIXME purpose should go here
- onmouseout -- //FIXME purpose should go here
- onmouseover -- //FIXME purpose should go here
- onmouseup -- //FIXME purpose should go here
- onoverflow -- //FIXME purpose should go here
- onoverflowchanged -- //FIXME purpose should go here
- onpopuphidden -- //FIXME purpose should go here
- onpopuphiding -- //FIXME purpose should go here
- onpopupshowing -- //FIXME purpose should go here
- onpopupshown -- //FIXME purpose should go here
- onselect -- //FIXME purpose should go here
- onunderflow -- //FIXME purpose should go here
- onunload -- //FIXME purpose should go here
- Colophon