163 lines
4.1 KiB
Nix
163 lines
4.1 KiB
Nix
let
|
|
html = import ./html.nix;
|
|
in {
|
|
html = html.tag "html";
|
|
# Document metadata
|
|
head = html.tag "head";
|
|
title = html.tag "title";
|
|
base = html.tag "base";
|
|
link = html.tag "link";
|
|
meta = html.tag "meta";
|
|
style = html.tag "style";
|
|
# Sections
|
|
body = html.tag "body";
|
|
article = html.tag "article";
|
|
section = html.tag "section";
|
|
nav = html.tag "nav";
|
|
aside = html.tag "aside";
|
|
h1 = html.tag "h1";
|
|
h2 = html.tag "h2";
|
|
h3 = html.tag "h3";
|
|
h4 = html.tag "h4";
|
|
h5 = html.tag "h5";
|
|
h6 = html.tag "h6";
|
|
hgroup = html.tag "hgroup";
|
|
header = html.tag "header";
|
|
footer = html.tag "footer";
|
|
address = html.tag "address";
|
|
# Grouping content
|
|
p = html.tag "p";
|
|
hr = html.tag "hr";
|
|
pre = html.tag "pre";
|
|
blockquote = html.tag "blockquote";
|
|
ol = html.tag "ol";
|
|
ul = html.tag "ul";
|
|
menu = html.tag "menu";
|
|
li = html.tag "li";
|
|
dl = html.tag "dl";
|
|
dt = html.tag "dt";
|
|
dd = html.tag "dd";
|
|
figure = html.tag "figure";
|
|
figcaption = html.tag "figcaption";
|
|
main = html.tag "main";
|
|
div = html.tag "div";
|
|
# Text-level semantics
|
|
a =
|
|
html.tag "a"
|
|
// {
|
|
__functor = self: href: (
|
|
if builtins.isString href
|
|
then (self // html.baseTag) {inherit href;}
|
|
else (self // html.baseTag) href
|
|
);
|
|
};
|
|
em = html.tag "em";
|
|
strong = html.tag "strong";
|
|
small = html.tag "small";
|
|
s = html.tag "s";
|
|
cite = html.tag "cite";
|
|
q = html.tag "q";
|
|
dfn = html.tag "dfn";
|
|
abbr = html.tag "abbr";
|
|
ruby = html.tag "ruby";
|
|
rt = html.tag "rt";
|
|
rp = html.tag "rp";
|
|
data = html.tag "data";
|
|
time = html.tag "time";
|
|
code = html.tag "code";
|
|
var = html.tag "var";
|
|
samp = html.tag "samp";
|
|
kbd = html.tag "kbd";
|
|
sub = html.tag "sub";
|
|
sup = html.tag "sup";
|
|
i = html.tag "i";
|
|
b = html.tag "b";
|
|
u = html.tag "u";
|
|
mark = html.tag "mark";
|
|
bdi = html.tag "bdi";
|
|
bdo = html.tag "bdo";
|
|
span = html.tag "span";
|
|
br = html.tag "br";
|
|
wbr = html.tag "wbr";
|
|
# Edits
|
|
ins = html.tag "ins";
|
|
del = html.tag "del";
|
|
# Embedded content
|
|
picture = html.tag "picture";
|
|
source = html.tag "source";
|
|
img = html.tag "img";
|
|
iframe = html.tag "iframe";
|
|
embed = html.tag "embed";
|
|
object = html.tag "object";
|
|
param = html.tag "param";
|
|
video = html.tag "video";
|
|
audio = html.tag "audio";
|
|
track = html.tag "track";
|
|
map = html.tag "map";
|
|
area = html.tag "area";
|
|
# Tabular data
|
|
table = html.tag "table";
|
|
caption = html.tag "caption";
|
|
colgroup = html.tag "colgroup";
|
|
col = html.tag "col";
|
|
tbody = html.tag "tbody";
|
|
thead = html.tag "thead";
|
|
tfoot = html.tag "tfoot";
|
|
tr = html.tag "tr";
|
|
td = html.tag "td";
|
|
th = html.tag "th";
|
|
# Forms
|
|
form = html.tag "form";
|
|
label = html.tag "label";
|
|
input = html.tag "input";
|
|
button = html.tag "button";
|
|
select = html.tag "select";
|
|
datalist = html.tag "datalist";
|
|
optgroup = html.tag "optgroup";
|
|
option = html.tag "option";
|
|
textarea = html.tag "textarea";
|
|
output = html.tag "output";
|
|
progress = html.tag "progress";
|
|
meter = html.tag "meter";
|
|
fieldset = html.tag "fieldset";
|
|
legend = html.tag "legend";
|
|
# Interactive elements
|
|
details = html.tag "details";
|
|
summary = html.tag "summary";
|
|
dialog = html.tag "dialog";
|
|
# Scripting
|
|
script = html.tag "script";
|
|
noscript = html.tag "noscript";
|
|
template = html.tag "template";
|
|
slot = html.tag "slot";
|
|
canvas = html.tag "canvas";
|
|
|
|
# custom
|
|
List =
|
|
html.tag "ul"
|
|
// {
|
|
__functor = self: children: (
|
|
if builtins.isList children
|
|
then (self // html.baseTag) (map (html.tag "li") children)
|
|
else html.incorporateAttrs self children
|
|
);
|
|
};
|
|
|
|
Doc = params: child:
|
|
assert builtins.isList child;
|
|
assert builtins.length child == 2;
|
|
assert builtins.isList (builtins.elemAt child 0);
|
|
html.tag "html" ({lang = "en";} // params) [
|
|
(html.tag "head" {} (builtins.elemAt child 0))
|
|
(html.tag "body" {} (builtins.elemAt child 1))
|
|
];
|
|
Stylesheet = params:
|
|
html.tag "link" ({
|
|
rel = "stylesheet";
|
|
}
|
|
// (
|
|
if builtins.isString params
|
|
then {href = params;}
|
|
else params
|
|
)) "";
|
|
}
|