forked from fediversity/fediversity
		
	implement definition lists with dl, dt, dd
This commit is contained in:
		
							parent
							
								
									d0c7f1cad1
								
							
						
					
					
						commit
						d5b329ede9
					
				
					 1 changed files with 91 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -55,6 +55,7 @@ let
 | 
			
		|||
      (category:
 | 
			
		||||
        (mapAttrs (_: e: mkOption { type = submodule e; })
 | 
			
		||||
          # HACK: don't evaluate the submodule types, just grab the config directly
 | 
			
		||||
          # TODO: we may want to do this properly and loop `categories` through the top-level `config`
 | 
			
		||||
          (filterAttrs (_: e: elem category (e { name = "dummy"; config = { }; }).config.categories) elements))
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -521,6 +522,96 @@ let
 | 
			
		|||
      config.categories = [ "flow" "palpable" ];
 | 
			
		||||
      config.__toString = self: print-element name self.attrs (toString self.content);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    dl = { config, name, ... }: {
 | 
			
		||||
      imports = [ element ];
 | 
			
		||||
      options = {
 | 
			
		||||
        attrs = mkAttrs { };
 | 
			
		||||
        content = mkOption {
 | 
			
		||||
          type = with types; listOf (submodule ({ ... }: {
 | 
			
		||||
            options = {
 | 
			
		||||
              # TODO: wrap in `<div>` if set
 | 
			
		||||
              div.attrs = mkOption {
 | 
			
		||||
                type = with types; nullOr (submodule { options = global-attrs; });
 | 
			
		||||
                default = null;
 | 
			
		||||
              };
 | 
			
		||||
              before = mkOption {
 | 
			
		||||
                type = with types; listOf (attrTag categories.scripting);
 | 
			
		||||
                default = [ ];
 | 
			
		||||
              };
 | 
			
		||||
              terms = mkOption {
 | 
			
		||||
                type = with types; nonEmptyListOf (submodule dt);
 | 
			
		||||
              };
 | 
			
		||||
              between = mkOption {
 | 
			
		||||
                type = with types; listOf (attrTag categories.scripting);
 | 
			
		||||
                default = [ ];
 | 
			
		||||
              };
 | 
			
		||||
              descriptions = mkOption {
 | 
			
		||||
                type = with types; nonEmptyListOf (submodule dd);
 | 
			
		||||
              };
 | 
			
		||||
              after = mkOption {
 | 
			
		||||
                type = with types; listOf (attrTag categories.scripting);
 | 
			
		||||
                default = [ ];
 | 
			
		||||
              };
 | 
			
		||||
            };
 | 
			
		||||
          }));
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
      config.categories = [ "flow" ] ++ [ "palpable" ];
 | 
			
		||||
      config.__toString = self:
 | 
			
		||||
        with lib;
 | 
			
		||||
        let
 | 
			
		||||
          content = map
 | 
			
		||||
            (entry:
 | 
			
		||||
              let
 | 
			
		||||
                list = squash ''
 | 
			
		||||
                  ${join "\n" entry.before}
 | 
			
		||||
                  ${join "\n" entry.terms}
 | 
			
		||||
                  ${join "\n" entry.between}
 | 
			
		||||
                  ${join "\n" entry.descriptions}
 | 
			
		||||
                  ${join "\n" entry.after}
 | 
			
		||||
                '';
 | 
			
		||||
              in
 | 
			
		||||
              if !isNull entry.div.attrs
 | 
			
		||||
              then print-element "div" entry.div.attrs list
 | 
			
		||||
              else list
 | 
			
		||||
            )
 | 
			
		||||
            self.content;
 | 
			
		||||
        in
 | 
			
		||||
        print-element name self.attrs (join "\n" content);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    dt = { config, ... }: {
 | 
			
		||||
      imports = [ element ];
 | 
			
		||||
      options = {
 | 
			
		||||
        attrs = mkAttrs { };
 | 
			
		||||
        dt = mkOption {
 | 
			
		||||
          type = with types; either str (submodule (attrTag (
 | 
			
		||||
            # TODO: test
 | 
			
		||||
            with lib; removeAttrs
 | 
			
		||||
              (filterAttrs
 | 
			
		||||
                (name: value: ! any (c: elem c [ "sectioning" "heading" ]) value.categories)
 | 
			
		||||
                categories.flow
 | 
			
		||||
              )
 | 
			
		||||
              [ "header" "footer" ]
 | 
			
		||||
          )));
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
      config.categories = [ ];
 | 
			
		||||
      config.__toString = self: print-element "dt" self.attrs self.dt;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    dd = { config, ... }: {
 | 
			
		||||
      imports = [ element ];
 | 
			
		||||
      options = {
 | 
			
		||||
        attrs = mkAttrs { };
 | 
			
		||||
        dd = mkOption {
 | 
			
		||||
          type = with types; either str (submodule (attrTag categories.flow));
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
      config.categories = [ ];
 | 
			
		||||
      config.__toString = self: print-element "dd" self.attrs self.dd;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue