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