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()