Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/textual/widgets/_markdown.py
Original file line number Diff line number Diff line change
Expand Up @@ -697,7 +697,7 @@ async def _update_rows(self, updated_rows: list[list[Content]]) -> None:
for row_index, row in enumerate(updated_rows, self.last_row):
for cell in row:
new_cells.append(
Static(
MarkdownTableCellContents(
cell,
classes=f"row{row_index} cell",
).with_tooltip(cell)
Expand Down
35 changes: 35 additions & 0 deletions tests/test_markdown.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,3 +217,38 @@ def on_markdown_link_clicked(self, message: Markdown.LinkClicked):
async with app.run_test() as pilot:
await pilot.click(Markdown, offset=(3, 0))
assert links == ["tété"]


async def test_link_in_markdown_table_posts_message_when_updated():
"""A link inside a markdown table updated via update_rows should post a Markdown.LinkClicked
message when clicked.

Regression test for https://github.com/Textualize/textual/issues/6597
"""

class MarkdownTableApp(App):
messages = []

def compose(self) -> ComposeResult:
yield Markdown()

@on(Markdown.LinkClicked)
def log_markdown_link_clicked(
self,
event: Markdown.LinkClicked,
) -> None:
self.messages.append(event.__class__.__name__)

app = MarkdownTableApp()
async with app.run_test() as pilot:
md = app.query_one(Markdown)

# update via append to trigger _update_rows
await md.append('| Textual Links |\n| --- |\n| [GitHub](https://github.com/textualize/textual/) |')
await pilot.pause()

from textual.widgets._markdown import MarkdownTableCellContents
cell = list(md.query(MarkdownTableCellContents))[1] # second cell
await pilot.click(cell, offset=(1, 0)) # click on the text

assert app.messages == ["LinkClicked"]