# 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