Mercurial > libervia-web
comparison libervia/web/pages/chat/_browser/__init__.py @ 1540:b4342176fa0a
browser (chat): minor reformatting
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 28 Jun 2023 10:06:54 +0200 |
parents | dc81403a5b2f |
children | 3c384b51b2a1 |
comparison
equal
deleted
inserted
replaced
1539:bc856e74f74d | 1540:b4342176fa0a |
---|---|
17 # Sensible value to consider that user is at the bottom | 17 # Sensible value to consider that user is at the bottom |
18 SCROLL_SENSITIVITY = 200 | 18 SCROLL_SENSITIVITY = 200 |
19 | 19 |
20 | 20 |
21 class LiberviaWebChat: | 21 class LiberviaWebChat: |
22 | |
23 def __init__(self): | 22 def __init__(self): |
24 self.message_tpl = Template("chat/message.html") | 23 self.message_tpl = Template("chat/message.html") |
25 self.messages_elt = document["messages"] | 24 self.messages_elt = document["messages"] |
26 | 25 |
27 # attachments | 26 # attachments |
45 self.messages_elt.scrollHeight | 44 self.messages_elt.scrollHeight |
46 - self.messages_elt.scrollTop | 45 - self.messages_elt.scrollTop |
47 - self.messages_elt.clientHeight | 46 - self.messages_elt.clientHeight |
48 <= SCROLL_SENSITIVITY | 47 <= SCROLL_SENSITIVITY |
49 ) | 48 ) |
50 | |
51 | 49 |
52 def send_message(self): | 50 def send_message(self): |
53 """Send message currently in input area | 51 """Send message currently in input area |
54 | 52 |
55 The message and corresponding attachment will be sent | 53 The message and corresponding attachment will be sent |
217 self.message_input.focus() | 215 self.message_input.focus() |
218 | 216 |
219 def on_attachment_delete(self, evt): | 217 def on_attachment_delete(self, evt): |
220 evt.stopPropagation() | 218 evt.stopPropagation() |
221 target = evt.currentTarget | 219 target = evt.currentTarget |
222 item_elt = DOMNode(target.closest('.attachment-preview')) | 220 item_elt = DOMNode(target.closest(".attachment-preview")) |
223 item_elt.remove() | 221 item_elt.remove() |
224 | 222 |
225 def on_attach_button_click(self, evt): | 223 def on_attach_button_click(self, evt): |
226 document["file_input"].click() | 224 document["file_input"].click() |
227 | 225 |
228 @bind(document["attachments"], 'wheel') | 226 @bind(document["attachments"], "wheel") |
229 def wheel_event(evt): | 227 def wheel_event(evt): |
230 """Make the mouse wheel to act on horizontal scrolling for attachments | 228 """Make the mouse wheel to act on horizontal scrolling for attachments |
231 | 229 |
232 Attachments don't have vertical scrolling, thus is makes sense to use the wheel | 230 Attachments don't have vertical scrolling, thus is makes sense to use the wheel |
233 for horizontal scrolling | 231 for horizontal scrolling |
234 """ | 232 """ |
235 if evt.deltaY != 0: | 233 if evt.deltaY != 0: |
236 document['attachments'].scrollLeft += evt.deltaY * 0.8 | 234 document["attachments"].scrollLeft += evt.deltaY * 0.8 |
237 evt.preventDefault() | 235 evt.preventDefault() |
238 | 236 |
239 def make_attachments_dynamic(self, parent_elt = None): | 237 def make_attachments_dynamic(self, parent_elt=None): |
240 """Make attachments dynamically clickable""" | 238 """Make attachments dynamically clickable""" |
241 # FIXME: only handle images for now, and display them in a modal | 239 # FIXME: only handle images for now, and display them in a modal |
242 if parent_elt is None: | 240 if parent_elt is None: |
243 parent_elt = document | 241 parent_elt = document |
244 img_elts = parent_elt.select('.message-attachment img') | 242 img_elts = parent_elt.select(".message-attachment img") |
245 for img_elt in img_elts: | 243 for img_elt in img_elts: |
246 img_elt.bind('click', self.open_modal) | 244 img_elt.bind("click", self.open_modal) |
247 img_elt.style.cursor = 'pointer' | 245 img_elt.style.cursor = "pointer" |
248 | 246 |
249 close_button = document.select_one('.modal-close') | 247 close_button = document.select_one(".modal-close") |
250 close_button.bind('click', self.close_modal) | 248 close_button.bind("click", self.close_modal) |
251 | 249 |
252 def open_modal(self, evt): | 250 def open_modal(self, evt): |
253 modal_image = document.select_one('#modal-image') | 251 modal_image = document.select_one("#modal-image") |
254 modal_image.src = evt.target.src | 252 modal_image.src = evt.target.src |
255 modal_image.alt = evt.target.alt | 253 modal_image.alt = evt.target.alt |
256 modal = document.select_one('#modal') | 254 modal = document.select_one("#modal") |
257 modal.classList.add('is-active') | 255 modal.classList.add("is-active") |
258 | 256 |
259 def close_modal(self, evt): | 257 def close_modal(self, evt): |
260 modal = document.select_one('#modal') | 258 modal = document.select_one("#modal") |
261 modal.classList.remove('is-active') | 259 modal.classList.remove("is-active") |
262 | 260 |
263 | 261 |
264 libervia_web_chat = LiberviaWebChat() | 262 libervia_web_chat = LiberviaWebChat() |
263 | |
265 document["message_input"].bind( | 264 document["message_input"].bind( |
266 "input", lambda __: libervia_web_chat.auto_resize_message_input() | 265 "input", lambda __: libervia_web_chat.auto_resize_message_input() |
267 ) | 266 ) |
268 document["message_input"].bind("keydown", libervia_web_chat.on_message_keydown) | 267 document["message_input"].bind("keydown", libervia_web_chat.on_message_keydown) |
269 document["send_button"].bind("click", lambda __: libervia_web_chat.send_message()) | 268 document["send_button"].bind("click", lambda __: libervia_web_chat.send_message()) |
270 document["attach_button"].bind( | 269 document["attach_button"].bind("click", libervia_web_chat.on_attach_button_click) |
271 "click", libervia_web_chat.on_attach_button_click | |
272 ) | |
273 document["file_input"].bind("change", libervia_web_chat.on_file_selected) | 270 document["file_input"].bind("change", libervia_web_chat.on_file_selected) |
274 bridge.register_signal("message_new", libervia_web_chat._on_message_new) | 271 bridge.register_signal("message_new", libervia_web_chat._on_message_new) |
272 | |
275 libervia_web_chat.make_attachments_dynamic() | 273 libervia_web_chat.make_attachments_dynamic() |