diff --git a/web/styles/portico/portico.css b/web/styles/portico/portico.css index e563b75521..aedbdefb7b 100644 --- a/web/styles/portico/portico.css +++ b/web/styles/portico/portico.css @@ -1439,3 +1439,41 @@ label.label-title { text-decoration: underline; } } + +.events-table-link { + line-height: 100%; + font-size: 0.7rem; + font-weight: 600; +} + +.events-table { + column-count: 4; + column-gap: 10px; + margin: 15px 0 0 10px !important; + + & div { + margin-bottom: 7px !important; + } +} + +@media (width <= 1100px) { + .events-table { + column-count: 3; + } +} + +@media (width <= 600px) { + .events-table { + column-count: 2; + } +} + +@media (width <= 420px) { + .events-table { + column-count: 1; + } +} + +.events-table-ops { + margin-left: 12px !important; +} diff --git a/zerver/lib/markdown/api_return_values_table_generator.py b/zerver/lib/markdown/api_return_values_table_generator.py index 91b982603b..020bfe33b3 100644 --- a/zerver/lib/markdown/api_return_values_table_generator.py +++ b/zerver/lib/markdown/api_return_values_table_generator.py @@ -1,6 +1,7 @@ import copy import json import re +from collections import OrderedDict from typing import Any, Dict, List, Mapping, Optional import markdown @@ -198,18 +199,30 @@ class APIReturnValuesTablePreprocessor(Preprocessor): '

' "{event_type} {op}

\n{description}\n\n\n" ) + table_link_template = ( + '' + ) + events_table: OrderedDict[str, List[str]] = OrderedDict() for events in events_dict["oneOf"]: event_type: Dict[str, Any] = events["properties"]["type"] event_type_str: str = event_type["enum"][0] # Internal hyperlink name h3_id: str = event_type_str + event_name: str = event_type_str event_type_str = f' {event_type_str}' op: Optional[Dict[str, Any]] = events["properties"].pop("op", None) op_str: str = "" if op is not None: op_str = op["enum"][0] h3_id += "-" + op_str + op_type: str = op_str op_str = f'op: {op_str}' + if event_name in events_table: + events_table[event_name] += [op_type] + else: + events_table[event_name] = [op_type] + else: + events_table[event_name] = [] description = events["description"] text.append( argument_template.format( @@ -223,6 +236,27 @@ class APIReturnValuesTablePreprocessor(Preprocessor): example = json.dumps(events["example"], indent=4, sort_keys=True) text.append(example) text.append("```\n\n") + + # Creates table of links for events + events_table_str: List[str] = ['
'] + sorted_events_table: OrderedDict[str, List[str]] = OrderedDict(sorted(events_table.items())) + for event_name, ops in sorted_events_table.items(): + if not ops: + events_table_str.append( + table_link_template.format(link_name=event_name, url=event_name) + ) + else: + events_table_str.append(f'') + events_table_str.append("
") + ops.sort() + op_list = [ + table_link_template.format(link_name=op, url=f"{event_name}-{op}") for op in ops + ] + events_table_str.extend(op_list) + events_table_str.append("
") + events_table_str.append("
") + + text = events_table_str + text return text