diff libervia/pages/_browser/dialog.py @ 1328:683e50799d6d

browser (dialog): new class to handle notifications
author Goffi <goffi@goffi.org>
date Fri, 14 Aug 2020 09:31:32 +0200
parents 053141849206
children 8729d2708f65
line wrap: on
line diff
--- a/libervia/pages/_browser/dialog.py	Fri Aug 14 09:31:32 2020 +0200
+++ b/libervia/pages/_browser/dialog.py	Fri Aug 14 09:31:32 2020 +0200
@@ -30,3 +30,35 @@
             cancel_elt.bind("click", lambda evt: cancel_cb(evt, notif_elt))
         for cancel_elt in notif_elt.select(".click_to_ok"):
             cancel_elt.bind("click", lambda evt: ok_cb(evt, notif_elt))
+
+
+class Notification:
+
+    def __init__(self):
+        self._tpl = Template("dialogs/notification.html")
+
+    def close(self, notif_elt):
+        notif_elt.classList.remove('state_appended')
+        notif_elt.bind("transitionend", lambda __: notif_elt.remove())
+
+    def show(
+        self,
+        message: str,
+        level: str = "info",
+        delay: int = 5
+    ) -> None:
+        # we log in console error messages, may be useful
+        if level in ("warning", "error"):
+            print(f"[{level}] {message}")
+        notif_elt = self._tpl.get_elt({
+            "message": message,
+            "level": level,
+        })
+        document["notifs_area"] <= notif_elt
+        timer.set_timeout(lambda: notif_elt.classList.add('state_appended'), 0)
+        timer.set_timeout(lambda: self.close(notif_elt), delay * 1000)
+        for elt in notif_elt.select('.click_to_close'):
+            elt.bind('click', lambda __: self.close(notif_elt))
+
+
+notification = Notification()