Skip to content

Commit f33d1c4

Browse files
committed
views: Structure UI in MarkdownHelpView class.
This commit adds the class responsible to show markdown help. It fetches markdown data from created `markdown.py`. Tests added (MarkdownHelpView).
1 parent 80dcbf6 commit f33d1c4

File tree

2 files changed

+99
-0
lines changed

2 files changed

+99
-0
lines changed

tests/ui_tools/test_popups.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
EditModeView,
1313
FullRenderedMsgView,
1414
HelpView,
15+
MarkdownHelpView,
1516
MsgInfoView,
1617
PopUpConfirmationView,
1718
PopUpView,
@@ -672,6 +673,49 @@ def test_select_edit_mode(
672673
mode_button.set_selected_mode.assert_called_once_with(mode)
673674

674675

676+
class TestMarkdownHelpView:
677+
@pytest.fixture(autouse=True)
678+
def mock_external_classes(self, mocker, monkeypatch):
679+
self.controller = mocker.Mock()
680+
mocker.patch.object(
681+
self.controller, "maximum_popup_dimensions", return_value=(64, 64)
682+
)
683+
mocker.patch(MODULE + ".format_string", return_value=["Wrapped text"])
684+
685+
self.markdown_help_view = MarkdownHelpView(
686+
self.controller, "Markdown Help Menu", "http://chat.zulip.org"
687+
)
688+
689+
def test_keypress_any_key(self, widget_size):
690+
key = "a"
691+
size = widget_size(self.markdown_help_view)
692+
693+
self.markdown_help_view.keypress(size, key)
694+
695+
assert not self.controller.exit_popup.called
696+
697+
@pytest.mark.parametrize(
698+
"key", {*keys_for_command("GO_BACK"), *keys_for_command("MARKDOWN_HELP")}
699+
)
700+
def test_keypress_exit_popup(self, key, widget_size):
701+
size = widget_size(self.markdown_help_view)
702+
703+
self.markdown_help_view.keypress(size, key)
704+
705+
assert self.controller.exit_popup.called
706+
707+
def test_keypress_body_navigation(
708+
self, mocker, widget_size, navigation_key_expected_key_pair
709+
):
710+
key, expected_key = navigation_key_expected_key_pair
711+
size = widget_size(self.markdown_help_view)
712+
super_keypress = mocker.patch(MODULE + ".urwid.Frame.keypress")
713+
714+
self.markdown_help_view.keypress(size, key)
715+
716+
super_keypress.assert_called_once_with(size, expected_key)
717+
718+
675719
class TestHelpView:
676720
@pytest.fixture(autouse=True)
677721
def mock_external_classes(self, mocker, monkeypatch):

zulipterminal/ui_tools/views.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
keys_for_command,
1616
primary_key_for_command,
1717
)
18+
from zulipterminal.config.markdown import MARKDOWN_ELEMENTS
1819
from zulipterminal.config.symbols import (
1920
CHECK_MARK,
2021
COLUMN_TITLE_BAR_LINE,
@@ -32,6 +33,7 @@
3233
Message,
3334
TidiedUserInfo,
3435
asynch,
36+
format_string,
3537
match_stream,
3638
match_user,
3739
)
@@ -1211,6 +1213,59 @@ def __init__(self, controller: Any, title: str) -> None:
12111213
super().__init__(controller, widgets, "HELP", popup_width, title)
12121214

12131215

1216+
class MarkdownHelpView(PopUpView):
1217+
def __init__(self, controller: Any, title: str, server_url: str) -> None:
1218+
raw_menu_content = [] # to calculate table dimensions
1219+
rendered_menu_content = [] # to display rendered content in table
1220+
1221+
for element in MARKDOWN_ELEMENTS:
1222+
content = element["content"]
1223+
1224+
# Currently we only re-render user names
1225+
if element["re_render_required"]:
1226+
content = controller.model.user_full_name
1227+
1228+
wrapped_html_element = format_string([content], element["html_format"])[0]
1229+
wrapped_raw_content = format_string([content], element["raw_format"])[0]
1230+
1231+
rendered_content, message_links, _ = MessageBox.transform_content(
1232+
wrapped_html_element, server_url
1233+
)
1234+
1235+
raw_menu_content.append((wrapped_raw_content, wrapped_raw_content))
1236+
rendered_menu_content.append((wrapped_raw_content, rendered_content))
1237+
1238+
popup_width, column_widths = self.calculate_table_widths(
1239+
[("", raw_menu_content)], len(title)
1240+
)
1241+
1242+
border_lines = dict(
1243+
tlcorner="",
1244+
tline="",
1245+
trcorner="",
1246+
lline="",
1247+
rline="",
1248+
blcorner=COLUMN_TITLE_BAR_LINE,
1249+
bline=COLUMN_TITLE_BAR_LINE,
1250+
brcorner=COLUMN_TITLE_BAR_LINE,
1251+
)
1252+
1253+
header_widgets = [
1254+
urwid.Text([("popup_category", "You type")], align="center"),
1255+
urwid.Text([("popup_category", "You get")], align="center"),
1256+
]
1257+
header_columns = urwid.Columns(header_widgets)
1258+
wrapped_header = urwid.LineBox(header_columns, **border_lines)
1259+
1260+
body = self.make_table_with_categories(
1261+
[("", rendered_menu_content)], column_widths
1262+
)
1263+
1264+
super().__init__(
1265+
controller, body, "MARKDOWN_HELP", popup_width, title, wrapped_header
1266+
)
1267+
1268+
12141269
class PopUpConfirmationView(urwid.Overlay):
12151270
def __init__(
12161271
self, controller: Any, question: Any, success_callback: Callable[[], None]

0 commit comments

Comments
 (0)