# Table of contents - [`dompa.coordinates`](#dompa.coordinates) - [`->nodes`](#dompa.coordinates/->nodes) - Transform given html according to given coordinates into a tree of nodes, each representing one HTML node and its children. - [`compose`](#dompa.coordinates/compose) - Composes a given html string into a vector of coordinates. - [`unify`](#dompa.coordinates/unify) - Joins together given coordinates that represent one HTML node in html, using a stack-based approach to correctly handle nested and void tags. - [`dompa.html`](#dompa.html) - [`->coordinates`](#dompa.html/->coordinates) - Transform a html string into a vector of coordinates indicating where an HTML node ends and begins. - [`->nodes`](#dompa.html/->nodes) - Transform a html string into a tree of nodes, each representing one HTML node and its children. - [`dompa.nodes`](#dompa.nodes) - [`$`](#dompa.nodes/$) - Creates a new node Usage: clojure ($ :div ($ "hello world" )) . - [`->html`](#dompa.nodes/->html) - Transform a vector of nodes into an HTML string. - [`defhtml`](#dompa.nodes/defhtml) - Creates a new function with name that outputs HTML. - [`traverse`](#dompa.nodes/traverse) - Recursively traverses given tree of nodes with a traverser-fn that gets a single node passed to it and returns a new updated tree. ----- # dompa.coordinates ## `->nodes` ``` clojure (->nodes {:keys [html coordinates]}) ``` Function. Transform given `html` according to given `coordinates` into a tree of nodes, each representing one HTML node and its children. Direct output of both [`compose`](#dompa.coordinates/compose) and [`unify`](#dompa.coordinates/unify) can be given to this function, allowing chaining such as: ```clojure (-> "some html ..." coordinates/compose coordinates/unify coordinates/->nodes) ```

Source

## `compose` ``` clojure (compose html) ``` Function. Composes a given `html` string into a vector of coordinates. These are single-pass coordinates without awareness of context, thus HTML such as: ```html
hello
``` will return 3 coordinates (div, text, div) instead of 2 (div, text). To unify the coordinates in a context-aware way, you pass the result of this function to the [`unify`](#dompa.coordinates/unify) function.

Source

## `unify` ``` clojure (unify {:keys [html coordinates]}) ``` Function. Joins together given `coordinates` that represent one HTML node in `html`, using a stack-based approach to correctly handle nested and void tags.

Source

----- # dompa.html ## `->coordinates` ``` clojure (->coordinates html) ``` Function. Transform a `html` string into a vector of coordinates indicating where an HTML node ends and begins.

Source

## `->nodes` ``` clojure (->nodes html) ``` Function. Transform a `html` string into a tree of nodes, each representing one HTML node and its children.

Source

----- # dompa.nodes ## `$` ``` clojure ($ name & opts) ``` Function. Creates a new node Usage: ```clojure ($ :div ($ "hello world" )) ```

Source

## `->html` ``` clojure (->html nodes) (->html nodes {:keys [void-nodes]}) ``` Function. Transform a vector of `nodes` into an HTML string. Options: - `void-nodes` - A set of node names that are self-closing, defaults to: - `:!doctype` - `:area` - `:base` - `:br` - `:col` - `:embed` - `:hr` - `:img` - `:input` - `:link` - `:meta` - `:source` - `:track` - `:wbr`

Source

## `defhtml` ``` clojure (defhtml name & args-and-elements) ``` Macro. Creates a new function with `name` that outputs HTML. Example usage: ```clojure (defhtml about-page [who] ($ :div ($ "hello " who))) (about-page "world") ```

Source

## `traverse` ``` clojure (traverse nodes traverser-fn) ``` Function. Recursively traverses given tree of `nodes` with a `traverser-fn` that gets a single node passed to it and returns a new updated tree. If the traverses function returns `nil`, the node will be removed. In any other case the node will be replaced. If you wish to keep a node unchanged, just return it as-is.

Source