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

View file

@ -8,7 +8,11 @@ rec {
result // { result // {
override = new: override = new:
let 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'; result' = g base';
in in
result' // { result' // {

View file

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