make template overrides take final and prev

This commit is contained in:
Valentin Gagarin 2024-11-13 15:24:41 +01:00 committed by Valentin Gagarin
parent 1fe519c838
commit d0c7f1cad1
3 changed files with 28 additions and 32 deletions

View file

@ -9,14 +9,12 @@ in
collections.news.type = cfg.content-types.article;
pages.index = { config, link, ... }: {
title = "Fediversity";
title = "Welcome to the Fediversity project";
description = "Fediversity web site";
summary = ''
This web site hosts up-to-date information about the the NGI Zero Fediversity project.
'';
body = ''
# Welcome to the Fediversity project
${pages.fediversity.summary}
[Learn more about Fediversity](${link pages.fediversity})
@ -61,11 +59,7 @@ in
}
'';
outputs.html = (cfg.templates.html.page config).override {
html.body.content = lib.mkForce [
# don't show the page title as a heading
(cfg.menus.main.outputs.html config)
(cfg.templates.html.markdown { inherit (config) name body; })
];
html.head.title.text = "Fediversity";
};
};
}

View file

@ -8,7 +8,11 @@ rec {
result // {
override = new:
let
base' = lib.recursiveUpdate base new;
base' =
if lib.isFunction new
then lib.recursiveUpdate base (new base' base)
else
lib.recursiveUpdate base new;
result' = g base';
in
result' // {

View file

@ -27,28 +27,26 @@ in
};
};
config.name = lib.slug config.title;
config.outputs.html = lib.mkForce ((cfg.templates.html.page config).override {
config.outputs.html = lib.mkForce
((cfg.templates.html.page config).override (final: prev: {
html = {
# TODO: make authors always a list
head.meta.authors = if lib.isList config.author then config.author else [ config.author ];
body.content = lib.mkForce [
(cfg.menus.main.outputs.html config)
body.content = with lib; map
(e:
if isAttrs e && e ? section
then
recursiveUpdate e
{
section = {
heading = {
# TODO: i18n support
# TODO: structured dates
section.heading = {
before = [{ p.content = "Published ${config.date}"; }];
content = config.title;
after = [{ p.content = "Written by ${config.author}"; }];
};
content = [
(cfg.templates.html.markdown { inherit (config) name body; })
];
};
}
];
else e
)
prev.html.body.content;
};
});
}));
};
}