Mercurial > libervia-web
comparison 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 |
comparison
equal
deleted
inserted
replaced
1548:66aa6e140ebb | 1549:e47c24204449 |
---|---|
2 | 2 |
3 from browser import document, window, timer, console as log | 3 from browser import document, window, timer, console as log |
4 from template import Template | 4 from template import Template |
5 | 5 |
6 log.warning = log.warn | 6 log.warning = log.warn |
7 | |
8 | |
9 class CancelError(Exception): | |
10 """Dialog is cancelled""" | |
7 | 11 |
8 | 12 |
9 class Confirm: | 13 class Confirm: |
10 | 14 |
11 def __init__(self, message, ok_label="", cancel_label="", ok_color="success"): | 15 def __init__(self, message, ok_label="", cancel_label="", ok_color="success"): |
13 self.message = message | 17 self.message = message |
14 self.ok_label = ok_label | 18 self.ok_label = ok_label |
15 assert ok_color in ("success", "danger") | 19 assert ok_color in ("success", "danger") |
16 self.ok_color = ok_color | 20 self.ok_color = ok_color |
17 self.cancel_label = cancel_label | 21 self.cancel_label = cancel_label |
22 self.reset() | |
18 | 23 |
19 def cancel_cb(self, evt, notif_elt): | 24 def reset(self): |
25 """Reset values of callbacks and notif element""" | |
26 self._ok_cb = None | |
27 self._cancel_cb = None | |
28 self._reject_cb = None | |
29 self._notif_elt = None | |
30 | |
31 def _default_cancel_cb(self, evt, notif_elt): | |
20 notif_elt.remove() | 32 notif_elt.remove() |
21 | 33 |
22 def show(self, ok_cb, cancel_cb=None): | 34 def cancel(self): |
35 """Cancel the dialog, without calling any callback | |
36 | |
37 will raise a CancelError | |
38 """ | |
39 if self._notif_elt is None: | |
40 log.warning("calling cancel on an unshown dialog") | |
41 else: | |
42 self._notif_elt.remove() | |
43 if self._reject_cb is not None: | |
44 self._reject_cb(CancelError) | |
45 else: | |
46 log.warning("no reject callback set") | |
47 self.reset() | |
48 | |
49 def on_ok_click(self, evt): | |
50 assert self._ok_cb is not None | |
51 self._ok_cb(evt, self._notif_elt) | |
52 self.reset() | |
53 | |
54 def on_cancel_click(self, evt) -> None: | |
55 assert self._cancel_cb is not None | |
56 self._cancel_cb(evt, self._notif_elt) | |
57 self.reset() | |
58 | |
59 def show(self, ok_cb, cancel_cb=None, reject_cb=None): | |
23 if cancel_cb is None: | 60 if cancel_cb is None: |
24 cancel_cb = self.cancel_cb | 61 cancel_cb = self._default_cancel_cb |
62 self._ok_cb = ok_cb | |
63 self._cancel_cb = cancel_cb | |
64 self._reject_cb = reject_cb | |
25 notif_elt = self._tpl.get_elt({ | 65 notif_elt = self._tpl.get_elt({ |
26 "message": self.message, | 66 "message": self.message, |
27 "ok_label": self.ok_label, | 67 "ok_label": self.ok_label, |
28 "ok_color": self.ok_color, | 68 "ok_color": self.ok_color, |
29 "cancel_label": self.cancel_label, | 69 "cancel_label": self.cancel_label, |
30 }) | 70 }) |
71 self._notif_elt = notif_elt | |
31 | 72 |
32 document['notifs_area'] <= notif_elt | 73 document['notifs_area'] <= notif_elt |
33 timer.set_timeout(lambda: notif_elt.classList.add('state_appended'), 0) | 74 timer.set_timeout(lambda: notif_elt.classList.add('state_appended'), 0) |
34 for cancel_elt in notif_elt.select(".click_to_cancel"): | 75 for ok_elt in notif_elt.select(".click_to_ok"): |
35 cancel_elt.bind("click", lambda evt: cancel_cb(evt, notif_elt)) | 76 ok_elt.bind("click", self.on_ok_click) |
36 for cancel_elt in notif_elt.select(".click_to_ok"): | 77 for ok_elt in notif_elt.select(".click_to_cancel"): |
37 cancel_elt.bind("click", lambda evt: ok_cb(evt, notif_elt)) | 78 ok_elt.bind("click", self.on_cancel_click) |
38 | 79 |
39 def _ashow_cb(self, evt, notif_elt, resolve_cb, confirmed): | 80 def _ashow_cb(self, evt, notif_elt, resolve_cb, confirmed): |
40 evt.stopPropagation() | 81 evt.stopPropagation() |
41 notif_elt.remove() | 82 notif_elt.remove() |
42 resolve_cb(confirmed) | 83 resolve_cb(confirmed) |
44 async def ashow(self): | 85 async def ashow(self): |
45 return window.Promise.new( | 86 return window.Promise.new( |
46 lambda resolve_cb, reject_cb: | 87 lambda resolve_cb, reject_cb: |
47 self.show( | 88 self.show( |
48 lambda evt, notif_elt: self._ashow_cb(evt, notif_elt, resolve_cb, True), | 89 lambda evt, notif_elt: self._ashow_cb(evt, notif_elt, resolve_cb, True), |
49 lambda evt, notif_elt: self._ashow_cb(evt, notif_elt, resolve_cb, False) | 90 lambda evt, notif_elt: self._ashow_cb(evt, notif_elt, resolve_cb, False), |
91 reject_cb | |
50 ) | 92 ) |
51 ) | 93 ) |
52 | 94 |
53 | 95 |
54 class Notification: | 96 class Notification: |