blob: c45d355bf33f310cf627773906e714b4a26b3994 (plain
`LibNSLayout` is a library for performing layout on a Document Object Model
for HTML. Its purpose is to allow client applications to provide DOM
information and convert that into a render list, which can be displayed
by the client.
Clients of `LibNSLayout` must use the following additional libraries, because
their types are used in the `LibNSLayout` interface:
* `LibDOM` is used to provide the DOM interface.
* `LibCSS` is used to provide the CSS handling.
* `LibWapcaplet` is used for interned strings.
The devision of responsibilities between `LibNSLayout` and its clients are
* Fetching the document to be displayed.
* Creating a CSS selection context (with default user-agent, and user CSS).
* Generating DOM.
* Creating a `LibNSLayout` layout for the document, passing the DOM document,
CSS selection context, and appropriate CSS media descriptor.
* Listening to DOM changes.
* Fetching resources needed by DOM.
* CSS (STYLE elements, and LINK elements):
* Parsing the CSS.
* Updating CSS selection context as stylesheets are fetched,
and notifying `LibNSLayout`.
* Favicons (LINK elements.)
* Images, Frames, Iframes.
* Notifying `LibNSLayout` of DOM changes.
* Performing resource fetches on behalf of LibNSLayout.
* (Such as when LibNSLayout requires a background image or web font for
an element due to CSS.)
* Asking `LibNSLayout` to perform layout.
* Displaying the returned render list.
* Passing mouse actions to `LibNSLayout`.
* Passing keyboard input to `LibNSLayout`.
* Measuring text???
* Creates a layout object that's opaque to the client, and returns its
* Performs CSS selection as appropriate when DOM changes.
* Asking client to fetch a resource that's needed for a computed style.
* Performs layout (if required) when asked by client and returns render list.
* Performs layout (if required) when asked by client for layout info.