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: