nixite/nixite/elems.nix
2024-01-02 10:53:45 +00:00

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
)) "";
}