extract direct paths

This commit is contained in:
tristan 2023-12-31 09:15:25 +00:00
parent 77f70490df
commit c36fece776
4 changed files with 104 additions and 3 deletions

View file

@ -20,14 +20,16 @@
style = nixite.style; style = nixite.style;
packages.${system} = { packages.${system} = {
default = nixite.mkSite (nixite.site.applyStyle ./testing/src/style.css { default = nixite.mkSite (
nixite.site.applyStyle ./testing/src/style.css
(nixite.site.extractPaths {
"index.html" = with nixite.elems; (doc [ "index.html" = with nixite.elems; (doc [
[ [
(title "Nixite") (title "Nixite")
] ]
(main [ (main [
(nixite.md.readMd ./testing/src/index.md)
(link "/blog" "blog") (link "/blog" "blog")
(nixite.html.tag "img" {src = ./testing/src/favicon.png;} "")
(list [ (list [
"item 1" "item 1"
"item 2" "item 2"
@ -48,7 +50,7 @@
]) ])
]); ]);
}; };
}); }));
serve = self.serve self.packages.${system}.default; serve = self.serve self.packages.${system}.default;

View file

@ -14,6 +14,38 @@ in rec {
) )
site); site);
extractPaths = content:
switchPaths content // {static = getPaths content;};
switchPaths = content: (
if builtins.isAttrs content
then
builtins.mapAttrs (key: value:
if builtins.isPath value
then ("/static/" + baseNameOf value)
else switchPaths value)
content
else if builtins.isList content
then (map switchPaths content)
else content
);
getPaths = content: (builtins.listToAttrs (getPathsKV content));
getPathsKV = path:
(if builtins.isPath path
then [
{
name = baseNameOf path;
value = path;
}
]
else if builtins.isAttrs path
then builtins.concatLists (map getPathsKV ( builtins.attrValues path ))
else if builtins.isList path
then builtins.concatLists (map getPathsKV path)
else []);
copyTo = prefix: site: copyTo = prefix: site:
builtins.toString ( builtins.toString (
builtins.attrValues ( builtins.attrValues (

View file

@ -37,4 +37,71 @@ in
}; };
}; };
}) })
(it "extracts top level paths" {
actual = getPaths {
something = "";
src = ./src/index.md;
};
expected = {
"index.md" = ./src/index.md;
};
})
(it "extracts lower level paths" {
actual = getPaths {
something = "yes";
a-list = [
{thingy = ./src/index.md;}
[(html.tag "img" {src = ./src/favicon.png;} "")]
];
};
expected = {
"index.md" = ./src/index.md;
"favicon.png" = ./src/favicon.png;
};
})
(it "switches paths" {
actual = switchPaths {
something = "";
a-thing = {
src = ./src/index.md;
};
a-list = [
{thingy = ./src/index.md;}
];
};
expected = {
something = "";
a-thing = {
src = "/static/index.md";
};
a-list = [
{thingy = "/static/index.md";}
];
};
})
(it "extracts paths" {
actual = extractPaths {
something = "";
a-thing = {
src = ./src/index.md;
};
a-list = [
{thingy = ./src/index.md;}
];
};
expected = {
something = "";
a-thing = {
src = "/static/index.md";
};
a-list = [
{thingy = "/static/index.md";}
];
static = {
"index.md" = ./src/index.md;
};
};
})
] ]

BIN
testing/src/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB