nixite/nixite/html.nix
2023-12-31 21:33:42 +00:00

40 lines
1 KiB
Nix

let
keyvalue = key: value:
assert builtins.isString key;
if value == "" || value == [ ] || value == { } then
""
else
''${key}="${toString value}"'';
in rec {
toHTML = elem:
if builtins.typeOf elem == "string" then
elem
else if builtins.typeOf elem == "list" then
builtins.toString (map toHTML elem)
else
"<${elem.tag} ${writeAttrs elem.attrs}>${
toHTML elem.child
}</${elem.tag}>";
writeAttrs = attrs:
toString (builtins.filter (value: value != "") (builtins.attrValues
(builtins.mapAttrs (key: value:
if (builtins.isPath value) then
keyvalue key (baseNameOf value)
else if (builtins.substring 0 2 key) == "__" then
""
else
keyvalue key value) attrs)));
tag = tag: attrs: child: {
inherit tag attrs child;
__toString = toHTML;
};
addToHead = page: heads:
page // {
child = map
(e: if e.tag == "head" then e // { child = e.child ++ heads; } else e)
page.child;
};
}