package htmlit
Install
Dune Dependency
Authors
Maintainers
Sources
sha512=b51050da1bdabd9dc96f362fe75d53098523146698cdd442fab1fa882ed7052a29cb61c0e68dc13631be4aef9c4cb6eec1c890e08a29372d2864a1599e49b94c
doc/htmlit/Htmlit/El/index.html
Module Htmlit.El
HTML elements and fragments.
See the element constructors and minimal page generation.
HTML fragments
The type for HTML fragments. A fragment is either:
- A single HTML element.
- Text: character data.
- A splice: a list of fragments.
- Unsafe raw data: character data output as is, without escaping.
Elements
v ?at n cs
is an element with name n
, attributes at
and children cs
. Favour element constructors whenever possible. Regarding at
:
at
defaults to[]
.- Except for
At.class'
andAt.style
attributes,at
must not specify an attribute more than once. This is not checked by the module and what happens on multiple definitions is undefined. - For
At.class'
attributes, multiple specifications are gathered to form a single, space separated, attribute value for theclass
HTML attribute. - For
At.style
attributes, multiple specifications are gathered to form a single, semi-colon separated, attribute value for thestyle
HTML attribute.
Text
val txt : string -> html
txt d
is character data d
.
val txt_of : ('a -> string) -> 'a -> html
txt_of f v
is txt (f v)
. Cuts a bit on delimiter orgies.
val sp : html
sp
is El.txt " "
.
val nbsp : html
nbsp
is El.txt "\u{00A0}"
.
Splices
splice ?sep hs
is the list of fragments hs
separated by sep
(if any). When added to an element's children, the list is spliced in the element's children.
Unsafe raw data
val unsafe_raw : string -> html
unsafe_raw s
is the raw string s
without escaping markup delimiters. s
must be well-formed HTML otherwise invalid markup is generated. This can be used to:
- Include foreign markup, for example markup generated by another mechanism.
- Avoid unpleasant surprises with the
style
element. - Let user-generated content create XSS attacks in your application.
Voids
Like void attributes, void fragments render nothing.
val is_void : html -> bool
is_void h
is true
iff h
is an empty splice
, an empty txt
or an empty unsafe_raw
. These fragments render nothing. See also void
.
Rendering
buffer_add ~doctype b h
adds the HTML fragment h
to b
. If doc_type
is true
an HTML doctype declaration is prepended.
val to_string : doctype:bool -> html -> string
to_string
is like buffer_add
but returns directly a string.
module Low : sig ... end
Low level representation (unstable).
Page
There's more than one way to generate a basic minimal HTML page. The following provides good defaults for quick minimal pages.
val page :
?lang:string ->
?generator:string ->
?styles:string list ->
?scripts:string list ->
?more_head:html ->
title:string ->
html ->
html
page ~lang ~title body
is an El.html
element with an At.lang
attribute of lang
(if specified and non-empty) containing a El.head
element followed by body
which must be a El.body
element.
The children of the El.head
element are in order:
- An
El.meta
charset with valueutf-8
, unconditional. - An
El.meta
generator with valuegenerator
, if specified and non-empty. - An
El.meta
viewport with valuewidth=device-width, initial-scale=1
, unconditional. - For each non-empty element
href
ofstyles
(defaults to[]
), anEl.link
withAt.type'
text/css
andAt.href
valuehref
. In order. - For each non-empty element
src
ofscripts
(defaults to[]
), anEl.script
withAt.defer
,At.type'
valuetext/javascript
andAt.src
valuesrc
. In order. more_head
fragment (defaults toEl.void
). Be careful if you addstyle
tags with direct CSS source.- An
El.title
with valuetitle
which isString.trim
ed. If the result is empty falls back to"Untitled"
. See alsotitle_of_filepath
to derive titles from file paths.
title_of_filepath f
is a non-empty page title for filepath f
. Either the basename of f
without extension or if that results in "index"
or ""
the basename of the parent directory without extension or if that results in ""
the value "Untitled"
. Directory separators can be '/'
or '\\'
regardless of the platform.
Element constructors
See the MDN HTML element reference.
The type for element constructors. This is simply El.v
with a pre-applied element name.
The type for void element constructors. This is simply El.v
with a pre-applied element name and without children.
val blockquote : cons
val figcaption : cons
val style : cons
Warning. If your style element contains CSS source, use unsafe_raw
to specify it. Otherwise the CSS child combinator '>'
gets escaped.