|
31 | 31 | from zulipterminal.config.ui_mappings import STATE_ICON, STREAM_ACCESS_TYPE |
32 | 32 | from zulipterminal.helper import get_unused_fence |
33 | 33 | from zulipterminal.server_url import near_message_url |
34 | | -from zulipterminal.ui_tools.tables import render_table |
| 34 | +from zulipterminal.ui_tools.tables import render_table, row_with_only_border |
35 | 35 | from zulipterminal.urwid_types import urwid_MarkupTuple, urwid_Size |
36 | 36 |
|
37 | 37 |
|
@@ -632,6 +632,45 @@ def soup2markup( |
632 | 632 |
|
633 | 633 | source_text = f"Original text was {tag_text.strip()}" |
634 | 634 | metadata["time_mentions"].append((time_string, source_text)) |
| 635 | + elif tag == "div" and "spoiler-block" in tag_classes: |
| 636 | + # SPOILERS |
| 637 | + header = element.find(class_="spoiler-header") |
| 638 | + header.contents = [part for part in header.contents if part != "\n"] |
| 639 | + |
| 640 | + if not header.contents: |
| 641 | + default = BeautifulSoup("<p>Spoiler</p>", "html.parser") |
| 642 | + header.contents.append(default) |
| 643 | + |
| 644 | + processed_header = cls.soup2markup(header, metadata)[0] |
| 645 | + |
| 646 | + processed_header_text = "".join( |
| 647 | + part[1] if isinstance(part, tuple) else part |
| 648 | + for part in processed_header |
| 649 | + ) |
| 650 | + |
| 651 | + # Limit to the first 10 characters and append "..." |
| 652 | + if len(processed_header_text) > 10: |
| 653 | + processed_header_text = processed_header_text[:10] + "..." |
| 654 | + |
| 655 | + processed_header_len = len(processed_header_text) |
| 656 | + marker = "Spoiler:" |
| 657 | + |
| 658 | + widths = [len(marker), processed_header_len] |
| 659 | + top_border = row_with_only_border("┌", "─", "┬", "┐", widths) |
| 660 | + bottom_border = row_with_only_border( |
| 661 | + "└", "─", "┴", "┘", widths, newline=False |
| 662 | + ) |
| 663 | + markup.extend(top_border) |
| 664 | + markup.extend( |
| 665 | + [ |
| 666 | + "│ ", |
| 667 | + ("msg_spoiler", marker), |
| 668 | + " │ ", |
| 669 | + processed_header_text, |
| 670 | + " │\n", |
| 671 | + ] |
| 672 | + ) |
| 673 | + markup.extend(bottom_border) |
635 | 674 | else: |
636 | 675 | markup.extend(cls.soup2markup(element, metadata)[0]) |
637 | 676 | return markup, metadata["message_links"], metadata["time_mentions"] |
|
0 commit comments