Mercurial > libervia-web
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()