diff --git a/frappe/core/doctype/navbar_settings/navbar_settings.js b/frappe/core/doctype/navbar_settings/navbar_settings.js index c0e1113087..ed7e331986 100644 --- a/frappe/core/doctype/navbar_settings/navbar_settings.js +++ b/frappe/core/doctype/navbar_settings/navbar_settings.js @@ -1,7 +1,4 @@ // Copyright (c) 2020, Frappe Technologies and contributors // For license information, please see license.txt -frappe.ui.form.on("Navbar Settings", { - // refresh: function(frm) { - // } -}); +frappe.ui.form.on("Navbar Settings", {}); diff --git a/frappe/core/doctype/navbar_settings/navbar_settings.json b/frappe/core/doctype/navbar_settings/navbar_settings.json index 164d80fefa..03b3d65bcd 100644 --- a/frappe/core/doctype/navbar_settings/navbar_settings.json +++ b/frappe/core/doctype/navbar_settings/navbar_settings.json @@ -11,7 +11,9 @@ "logo_width", "section_break_2", "settings_dropdown", - "help_dropdown" + "help_dropdown", + "announcements_section", + "announcement_widget" ], "fields": [ { @@ -49,11 +51,23 @@ "fieldname": "logo_width", "fieldtype": "Int", "label": "Logo Width" + }, + { + "fieldname": "announcements_section", + "fieldtype": "Section Break", + "label": "Announcements" + }, + { + "description": "These announcements will appear inside a dismissible alert below the Navbar.", + "fieldname": "announcement_widget", + "fieldtype": "Text Editor", + "label": "Announcement Widget", + "max_height": "10em" } ], "issingle": 1, "links": [], - "modified": "2024-03-23 16:03:30.561647", + "modified": "2024-03-23 17:03:30.561647", "modified_by": "Administrator", "module": "Core", "name": "Navbar Settings", @@ -75,4 +89,4 @@ "sort_order": "DESC", "states": [], "track_changes": 1 -} \ No newline at end of file +} diff --git a/frappe/core/doctype/navbar_settings/navbar_settings.py b/frappe/core/doctype/navbar_settings/navbar_settings.py index cbab42f4ed..54a0b64dc4 100644 --- a/frappe/core/doctype/navbar_settings/navbar_settings.py +++ b/frappe/core/doctype/navbar_settings/navbar_settings.py @@ -16,6 +16,7 @@ class NavbarSettings(Document): from frappe.core.doctype.navbar_item.navbar_item import NavbarItem from frappe.types import DF + announcement_widget: DF.TextEditor | None app_logo: DF.AttachImage | None help_dropdown: DF.Table[NavbarItem] logo_width: DF.Int diff --git a/frappe/public/js/frappe/ui/toolbar/navbar.html b/frappe/public/js/frappe/ui/toolbar/navbar.html index cdae4211d2..db697c5c7f 100644 --- a/frappe/public/js/frappe/ui/toolbar/navbar.html +++ b/frappe/public/js/frappe/ui/toolbar/navbar.html @@ -1,139 +1,153 @@ - + + {% if !localStorage.getItem("dismissed_announcement_widget") && strip_html(navbar_settings.announcement_widget) != '' %} +
+
+ {{ navbar_settings.announcement_widget }} +
+ {{ frappe.utils.icon("close") }} +
- + {% endif %} + + \ No newline at end of file diff --git a/frappe/public/js/frappe/ui/toolbar/toolbar.js b/frappe/public/js/frappe/ui/toolbar/toolbar.js index 8922cfe2b3..ca7da66e72 100644 --- a/frappe/public/js/frappe/ui/toolbar/toolbar.js +++ b/frappe/public/js/frappe/ui/toolbar/toolbar.js @@ -21,6 +21,7 @@ frappe.ui.toolbar.Toolbar = class { this.setup_notifications(); this.setup_help(); this.setup_read_only_mode(); + this.setup_announcement_widget(); this.make(); } @@ -56,6 +57,30 @@ frappe.ui.toolbar.Toolbar = class { }); } + setup_announcement_widget() { + let current_announcement = frappe.boot.navbar_settings.announcement_widget; + + if (!current_announcement) return; + + // If an unseen announcement is added, overlook dismiss flag + if (current_announcement != localStorage.getItem("announcement_widget")) { + localStorage.removeItem("dismissed_announcement_widget"); + localStorage.setItem("announcement_widget", current_announcement); + } + + // When an announcement is closed, add dismiss flag + if (!localStorage.getItem("dismissed_announcement_widget")) { + let announcement_widget = $(".announcement-widget"); + let close_message = announcement_widget.find(".close-message"); + close_message.on( + "click", + () => + localStorage.setItem("dismissed_announcement_widget", true) || + announcement_widget.addClass("hidden") + ); + } + } + setup_help() { if (!frappe.boot.desk_settings.notifications) { // hide the help section diff --git a/frappe/sessions.py b/frappe/sessions.py index 8781e7448e..9ed4be7004 100644 --- a/frappe/sessions.py +++ b/frappe/sessions.py @@ -167,6 +167,7 @@ def get(): bootinfo["desk_theme"] = frappe.db.get_value("User", frappe.session.user, "desk_theme") or "Light" bootinfo["user"]["impersonated_by"] = frappe.session.data.get("impersonated_by") + bootinfo["navbar_settings"] = frappe.get_cached_doc("Navbar Settings") return bootinfo