forked from fediversity/fediversity
		
	unify template parameters
This commit is contained in:
		
							parent
							
								
									cbe10ec304
								
							
						
					
					
						commit
						6f90db7193
					
				
					 4 changed files with 15 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -20,35 +20,31 @@ in
 | 
			
		|||
  options.templates =
 | 
			
		||||
    let
 | 
			
		||||
      # arbitrarily nested attribute set where the leaves are of type `type`
 | 
			
		||||
      # NOTE: due to how `either` works, the first match is significant,
 | 
			
		||||
      # so if `type` happens to be an attrset, the typecheck will consider
 | 
			
		||||
      # `type`, not `attrsOf`
 | 
			
		||||
      recursiveAttrs = type: with types; attrsOf (either type (recursiveAttrs type));
 | 
			
		||||
      recursiveAttrs = type: with types;
 | 
			
		||||
        # NOTE: due to how `either` works, the first match is significant,
 | 
			
		||||
        # so if `type` happens to be an attrset, the typecheck will consider
 | 
			
		||||
        # `type`, not `attrsOf`
 | 
			
		||||
        attrsOf (either type (recursiveAttrs type));
 | 
			
		||||
    in
 | 
			
		||||
    mkOption {
 | 
			
		||||
      description = ''
 | 
			
		||||
        Collection of named functions to convert document contents to a string representation
 | 
			
		||||
 | 
			
		||||
        Each template function takes the complete site `config` and the document's data structure.
 | 
			
		||||
        Collection of named helper functions for conversion different structured representations which can be rendered to a string
 | 
			
		||||
      '';
 | 
			
		||||
      # TODO: this function should probably take a single attrs,
 | 
			
		||||
      #       otherwise it's quite inflexible.
 | 
			
		||||
      #       named parameters would also help with readability at the call site
 | 
			
		||||
      type = recursiveAttrs (with types; functionTo (functionTo str));
 | 
			
		||||
      type = recursiveAttrs (with types; functionTo (coercedTo attrs toString str));
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  config.templates.html = {
 | 
			
		||||
    markdown = name: text:
 | 
			
		||||
    markdown = { name, body }:
 | 
			
		||||
      let
 | 
			
		||||
        commonmark = pkgs.runCommand "${name}.html"
 | 
			
		||||
          {
 | 
			
		||||
            buildInputs = [ pkgs.cmark ];
 | 
			
		||||
          } ''
 | 
			
		||||
          cmark ${builtins.toFile "${name}.md" text} > $out
 | 
			
		||||
          cmark ${builtins.toFile "${name}.md" body} > $out
 | 
			
		||||
        '';
 | 
			
		||||
      in
 | 
			
		||||
      builtins.readFile commonmark;
 | 
			
		||||
    nav = menu: page:
 | 
			
		||||
    nav = { menu, page }:
 | 
			
		||||
      let
 | 
			
		||||
        render-item = item:
 | 
			
		||||
          if item ? menu then ''
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ in
 | 
			
		|||
        body.content = [
 | 
			
		||||
          (cfg.menus.main.outputs.html config)
 | 
			
		||||
          { section.heading.content = config.title; }
 | 
			
		||||
          (cfg.templates.html.markdown config.name config.body)
 | 
			
		||||
          (cfg.templates.html.markdown { inherit (config) name body; })
 | 
			
		||||
        ];
 | 
			
		||||
      };
 | 
			
		||||
    });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,7 +56,9 @@ in
 | 
			
		|||
          It must be a function that takes the page on which the navigation is to be shown, such that relative links get computed correctly.
 | 
			
		||||
        '';
 | 
			
		||||
        type = with types; attrsOf (functionTo str);
 | 
			
		||||
        default.html = cfg.templates.html.nav config;
 | 
			
		||||
        default.html = page: cfg.templates.html.nav {
 | 
			
		||||
          menu = config; inherit page;
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,7 +52,7 @@ in
 | 
			
		|||
        body.content = [
 | 
			
		||||
          (cfg.menus.main.outputs.html config)
 | 
			
		||||
          { section.heading.content = config.title; }
 | 
			
		||||
          (cfg.templates.html.markdown config.name config.body)
 | 
			
		||||
          (cfg.templates.html.markdown { inherit (config) name body; })
 | 
			
		||||
        ];
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue