Mercurial > libervia-web
view libervia/pages/_browser/dialog.py @ 1337:f0648005cd11
browser: alternative media player:
the new `alt_media_player` module implements an `ogv.js` based media player which is able
to play WebM (VP8/VP9) or Ogg (Theora, Vorbis) formats (+ other codecs not integrated
yet) on browser that don't do it natively.
The module imports `ogv.js` only when it's necessary (incompatible browser + videos
needing it).
This for now used in blog, and will be used in other places when it's suitable.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 15 Aug 2020 16:45:23 +0200 |
parents | 683e50799d6d |
children | 8729d2708f65 |
line wrap: on
line source
"""manage common dialogs""" from browser import document, timer from template import Template class Confirm: def __init__(self, message, ok_label="", cancel_label=""): self._tpl = Template("dialogs/confirm.html") self.message = message self.ok_label = ok_label self.cancel_label = cancel_label def cancel_cb(self, evt, notif_elt): notif_elt.remove() def show(self, ok_cb, cancel_cb=None): if cancel_cb is None: cancel_cb = self.cancel_cb notif_elt = self._tpl.get_elt({ "message": self.message, "ok_label": self.ok_label, "cancel_label": self.cancel_label, }) document['notifs_area'] <= notif_elt timer.set_timeout(lambda: notif_elt.classList.add('state_appended'), 0) for cancel_elt in notif_elt.select(".click_to_cancel"): 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()