add event content type
This commit is contained in:
parent
d5b329ede9
commit
61b2d07b1d
81
website/structure/event.nix
Normal file
81
website/structure/event.nix
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
{ config, options, lib, ... }:
|
||||||
|
let
|
||||||
|
inherit (lib)
|
||||||
|
mkOption
|
||||||
|
types
|
||||||
|
;
|
||||||
|
cfg = config;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
content-types.event = { config, collection, ... }: {
|
||||||
|
imports = [ cfg.content-types.page ];
|
||||||
|
options = {
|
||||||
|
collection = mkOption {
|
||||||
|
description = "Collection this event belongs to";
|
||||||
|
type = options.collections.type.nestedTypes.elemType;
|
||||||
|
default = collection;
|
||||||
|
};
|
||||||
|
start-date = mkOption {
|
||||||
|
description = "Start date of the event";
|
||||||
|
type = with types; str;
|
||||||
|
};
|
||||||
|
start-time = mkOption {
|
||||||
|
description = "Start time of the event";
|
||||||
|
type = with types; str;
|
||||||
|
default = null;
|
||||||
|
};
|
||||||
|
end-date = mkOption {
|
||||||
|
description = "End date of the event";
|
||||||
|
type = with types; str;
|
||||||
|
default = null;
|
||||||
|
};
|
||||||
|
end-time = mkOption {
|
||||||
|
description = "End time of the event";
|
||||||
|
type = with types; str;
|
||||||
|
default = null;
|
||||||
|
};
|
||||||
|
location = mkOption {
|
||||||
|
description = "Location of the event";
|
||||||
|
type = with types; str;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config.name = lib.slug config.title;
|
||||||
|
config.summary = lib.mkDefault config.description;
|
||||||
|
config.outputs.html = lib.mkForce
|
||||||
|
((cfg.templates.html.page config).override (final: prev: {
|
||||||
|
html.body.content = with lib; map
|
||||||
|
(e:
|
||||||
|
if isAttrs e && e ? section
|
||||||
|
then
|
||||||
|
recursiveUpdate e
|
||||||
|
{
|
||||||
|
section.content = [
|
||||||
|
{
|
||||||
|
dl.content = [
|
||||||
|
{
|
||||||
|
terms = [{ dt = "Location"; }];
|
||||||
|
descriptions = [{ dd = config.location; }];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
terms = [{ dt = "Start"; }];
|
||||||
|
descriptions = [{
|
||||||
|
dd = config.start-date + lib.optionalString (!isNull config.start-time) " ${config.start-time}";
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
] ++ lib.optional (!isNull config.end-date) {
|
||||||
|
terms = [{ dt = "End"; }];
|
||||||
|
descriptions = [{
|
||||||
|
dd = config.end-date + lib.optionalString (!isNull config.end-time) " ${config.end-time}";
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
]
|
||||||
|
++ e.section.content;
|
||||||
|
}
|
||||||
|
else e
|
||||||
|
)
|
||||||
|
prev.html.body.content;
|
||||||
|
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue