markdown preview: Add link tooltips (#10161)

Adds tooltips to the markdown preview, similar to how its done for
`RichText`


https://github.com/zed-industries/zed/assets/53836821/523519d4-e392-46ef-9fe0-6692871b317d

Release Notes:

- Added tooltips when hovering over links inside the markdown preview
This commit is contained in:
Bennet Bo Fenner 2024-04-04 21:06:30 +02:00 committed by GitHub
parent dde87f6468
commit 5d88d9c0d7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 39 additions and 6 deletions

View file

@ -13,7 +13,7 @@ use std::{
sync::Arc,
};
use theme::{ActiveTheme, SyntaxTheme};
use ui::{h_flex, v_flex, Checkbox, Selection};
use ui::{h_flex, v_flex, Checkbox, LinkPreview, Selection};
use workspace::Workspace;
pub struct RenderContext {
@ -328,11 +328,26 @@ fn render_markdown_text(parsed: &ParsedMarkdownText, cx: &mut RenderContext) ->
element_id,
StyledText::new(parsed.contents.clone()).with_highlights(&cx.text_style, highlights),
)
.tooltip({
let links = links.clone();
let link_ranges = link_ranges.clone();
move |idx, cx| {
for (ix, range) in link_ranges.iter().enumerate() {
if range.contains(&idx) {
return Some(LinkPreview::new(&links[ix].to_string(), cx));
}
}
None
}
})
.on_click(
link_ranges,
move |clicked_range_ix, window_cx| match &links[clicked_range_ix] {
Link::Web { url } => window_cx.open_url(url),
Link::Path { path } => {
Link::Path {
path,
display_path: _,
} => {
if let Some(workspace) = &workspace {
_ = workspace.update(window_cx, |workspace, cx| {
workspace.open_abs_path(path.clone(), false, cx).detach();