diff --git a/frappe/desk/desktop.py b/frappe/desk/desktop.py
index 26f69be4d2..c31be72461 100644
--- a/frappe/desk/desktop.py
+++ b/frappe/desk/desktop.py
@@ -193,6 +193,9 @@ class Workspace:
item["count"] = count
+ if item.get("link_type") == "DocType":
+ item["description"] = frappe.get_meta(item.link_to).description
+
# Translate label
item["label"] = _(item.label) if item.label else _(item.name)
diff --git a/frappe/public/js/frappe/widgets/links_widget.js b/frappe/public/js/frappe/widgets/links_widget.js
index 2af4564ffa..b83cf04954 100644
--- a/frappe/public/js/frappe/widgets/links_widget.js
+++ b/frappe/public/js/frappe/widgets/links_widget.js
@@ -60,9 +60,7 @@ export default class LinksWidget extends Widget {
const get_link_for_item = (item) => {
if (is_link_disabled(item)) {
- return `${
- item.label ? item.label : item.name
- }
+ return `${item.link_title}
@@ -74,14 +72,18 @@ export default class LinksWidget extends Widget {
}
if (item.youtube_id)
- return `
- ${item.label ? item.label : item.name}`;
+ return `
+
+ ${item.link_title}
+
+ `;
- return `
${
- item.label ? item.label : item.name
- } ${frappe.utils.icon("es-line-arrow-up-right", "xs", "", "", "ml-2")} `;
+ return `
+
+ ${item.link_title}
+ ${frappe.utils.icon("es-line-arrow-up-right", "xs", "", "", "ml-2")}
+
+ `;
};
this.link_list = this.links.map((item) => {
@@ -97,14 +99,30 @@ export default class LinksWidget extends Widget {
}
const route = frappe.utils.generate_route(opts);
+ item.link_title = item.label ? item.label : item.name;
- return $(`
+ const $link = $(`
+
${get_link_for_item(item)}
- `);
+
+ `);
+
+ if (item.description) {
+ $link.find(".link-text").popover({
+ trigger: "hover",
+ placement: "top",
+ title: item.link_title,
+ content: () =>
+ `
${__(item.description)}
`,
+ html: true,
+ delay: { show: 600, hide: 100 },
+ });
+ }
+
+ return $link;
});
if (this.in_customize_mode) {
this.body.empty();