Mercurial > libervia-web
diff libervia/web/pages/_browser/dialog.py @ 1549:e47c24204449
browser (calls): update call to handle search, control buttons, and better UI/UX:
- adapt to backend changes
- UI and WebRTC parts are not separated
- users can now be searched
- add mute/fullscreen buttons
- ring
- cancellable dialog when a call is received
- status of the call
- animations
- various UI/UX improvments
rel 423
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 09 Aug 2023 00:22:18 +0200 |
parents | eb00d593801d |
children | 7228fc3c4744 |
line wrap: on
line diff
--- a/libervia/web/pages/_browser/dialog.py Wed Aug 09 00:22:16 2023 +0200 +++ b/libervia/web/pages/_browser/dialog.py Wed Aug 09 00:22:18 2023 +0200 @@ -6,6 +6,10 @@ log.warning = log.warn +class CancelError(Exception): + """Dialog is cancelled""" + + class Confirm: def __init__(self, message, ok_label="", cancel_label="", ok_color="success"): @@ -15,26 +19,63 @@ assert ok_color in ("success", "danger") self.ok_color = ok_color self.cancel_label = cancel_label + self.reset() - def cancel_cb(self, evt, notif_elt): + def reset(self): + """Reset values of callbacks and notif element""" + self._ok_cb = None + self._cancel_cb = None + self._reject_cb = None + self._notif_elt = None + + def _default_cancel_cb(self, evt, notif_elt): notif_elt.remove() - def show(self, ok_cb, cancel_cb=None): + def cancel(self): + """Cancel the dialog, without calling any callback + + will raise a CancelError + """ + if self._notif_elt is None: + log.warning("calling cancel on an unshown dialog") + else: + self._notif_elt.remove() + if self._reject_cb is not None: + self._reject_cb(CancelError) + else: + log.warning("no reject callback set") + self.reset() + + def on_ok_click(self, evt): + assert self._ok_cb is not None + self._ok_cb(evt, self._notif_elt) + self.reset() + + def on_cancel_click(self, evt) -> None: + assert self._cancel_cb is not None + self._cancel_cb(evt, self._notif_elt) + self.reset() + + def show(self, ok_cb, cancel_cb=None, reject_cb=None): if cancel_cb is None: - cancel_cb = self.cancel_cb + cancel_cb = self._default_cancel_cb + self._ok_cb = ok_cb + self._cancel_cb = cancel_cb + self._reject_cb = reject_cb notif_elt = self._tpl.get_elt({ "message": self.message, "ok_label": self.ok_label, "ok_color": self.ok_color, "cancel_label": self.cancel_label, }) + self._notif_elt = notif_elt 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)) + for ok_elt in notif_elt.select(".click_to_ok"): + ok_elt.bind("click", self.on_ok_click) + for ok_elt in notif_elt.select(".click_to_cancel"): + ok_elt.bind("click", self.on_cancel_click) def _ashow_cb(self, evt, notif_elt, resolve_cb, confirmed): evt.stopPropagation() @@ -46,7 +87,8 @@ lambda resolve_cb, reject_cb: self.show( lambda evt, notif_elt: self._ashow_cb(evt, notif_elt, resolve_cb, True), - lambda evt, notif_elt: self._ashow_cb(evt, notif_elt, resolve_cb, False) + lambda evt, notif_elt: self._ashow_cb(evt, notif_elt, resolve_cb, False), + reject_cb ) )