Mercurial > libervia-web
comparison libervia/web/pages/_browser/dialog.py @ 1619:a2cd4222c702
browser: Updates for new design:
This patch add code to handle the new design for chat.
New bridge method are used to invite users to MUC or get list of occupants.
A new modules is used for components, with a first one for collapsible cards.
rel 457
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 12 Apr 2025 00:21:45 +0200 |
parents | 0a4433a343a3 |
children | 3a60bf3762ef |
comparison
equal
deleted
inserted
replaced
1618:5d9889f14012 | 1619:a2cd4222c702 |
---|---|
179 self.timer = timer.set_interval(self.update_counter, 1000, notif_elt) | 179 self.timer = timer.set_interval(self.update_counter, 1000, notif_elt) |
180 for elt in notif_elt.select('.click_to_retry'): | 180 for elt in notif_elt.select('.click_to_retry'): |
181 elt.bind('click', lambda __: self.retry(notif_elt)) | 181 elt.bind('click', lambda __: self.retry(notif_elt)) |
182 | 182 |
183 | 183 |
184 class Modal: | |
185 | |
186 def __init__(self, content_elt, is_card=False, closable=False): | |
187 """Init a Modal instance. | |
188 | |
189 @param content_elt: Content of the modal. | |
190 @param is_card: If True, a Modal card will be used. The ``content_elt`` must be a | |
191 <div> with the "modal-card" class. | |
192 @param closable: if True, add a close cross at the top right of the modal. | |
193 """ | |
194 self.is_card = is_card | |
195 if is_card: | |
196 if not content_elt.classList.contains("modal-card"): | |
197 raise ValueError( | |
198 'Element must have a "modal-card" class when `is_card` is used' | |
199 ) | |
200 self.closable = closable | |
201 self._tpl = Template("dialogs/modal.html") | |
202 self.content_elt = content_elt | |
203 self._modal_elt = None | |
204 self.reset() | |
205 | |
206 def reset(self): | |
207 """Reset values of callbacks and notif element""" | |
208 if self._modal_elt is not None: | |
209 self._modal_elt.remove() | |
210 self._modal_elt = None | |
211 | |
212 def _default_cancel_cb(self, evt, notif_elt): | |
213 notif_elt.remove() | |
214 | |
215 def close(self): | |
216 """Close the dialog.""" | |
217 if self._modal_elt is None: | |
218 log.warning("Calling close on an unshown dialog.") | |
219 self.reset() | |
220 | |
221 def on_close_click(self, evt) -> None: | |
222 evt.preventDefault() | |
223 evt.stopPropagation() | |
224 self.close() | |
225 | |
226 def show(self) -> None: | |
227 modal_elt = self._tpl.get_elt({ | |
228 "closable": self.closable, | |
229 }) | |
230 self._modal_elt = modal_elt | |
231 if self.is_card: | |
232 container_elt = modal_elt | |
233 else: | |
234 container_elt = modal_elt.select_one(".modal-content") | |
235 container_elt <= self.content_elt | |
236 | |
237 document['notifs_area'] <= modal_elt | |
238 for ok_elt in modal_elt.select(".modal-close"): | |
239 ok_elt.bind("click", self.on_close_click) | |
184 | 240 |
185 | 241 |
186 notification = Notification() | 242 notification = Notification() |