Markdown.

This commit is contained in:
retoor 2025-01-29 16:30:54 +01:00
parent 1f5dc57d6f
commit 03c72e85f7
6 changed files with 37 additions and 5 deletions

View File

@ -5,3 +5,4 @@ class ChannelMessageModel(BaseModel):
channel_uid = ModelField(name="channel_uid", required=True, kind=str)
user_uid = ModelField(name="user_uid", required=True, kind=str)
message = ModelField(name="message", required=True, kind=str)
html = ModelField(name="html", required=False, kind=str)

View File

@ -1,14 +1,38 @@
from snek.system.service import BaseService
import jinja2
class ChannelMessageService(BaseService):
mapper_name = "channel_message"
async def create(self, channel_uid, user_uid, message):
model = await self.new()
model["channel_uid"] = channel_uid
model["user_uid"] = user_uid
model["message"] = message
context = {
}
record = model.record
context.update(record)
user = await self.app.services.user.get(uid=user_uid)
context.update(dict(
user_uid=user['uid'],
username=user['username'],
user_nick=user['nick']
))
try:
template = self.app.jinja2_env.get_template("message.html")
model["html"] = template.render(**context)
except Exception as ex:
print(ex,flush=True)
print("RENDER",flush=True)
print("RECORD",context,flush=True)
print("AFTER RENDER",flush=True)
if await self.save(model):
return model
raise Exception(f"Failed to create channel message: {model.errors}.")

View File

@ -17,7 +17,8 @@ class ChatService(BaseService):
user = await self.services.user.get(uid=user_uid)
await self.services.notification.create_channel_message(channel_message_uid)
sent_to_count = await self.services.socket.broadcast(channel_uid, dict(
message=message,
message=channel_message["message"],
html=channel_message["html"],
user_uid=user_uid,
color=user['color'],
channel_uid=channel_uid,

View File

@ -34,6 +34,7 @@ class MessageListElement extends HTMLElement {
element.dataset.created_at = message.created_at
element.dataset.user_uid = message.user_uid
element.dataset.message = message.message
element.classList.add("message")
if(!this.messages.length){
element.classList.add("switch-user")
@ -53,7 +54,8 @@ class MessageListElement extends HTMLElement {
author.textContent = message.user_nick
const text = document.createElement("div")
text.classList.add("text")
text.innerHTML = this.linkifyText(message.message)
if(message.html)
text.innerHTML = this.linkifyText(message.html)
const time = document.createElement("div")
time.classList.add("time")
time.textContent = message.created_at
@ -79,6 +81,7 @@ class MessageListElement extends HTMLElement {
message.user_nick,
message.color,
message.message,
message.html,
message.created_at,
message.updated_at
)

View File

@ -1,14 +1,16 @@
class MessageModel {
message = null
html = null
user_uid = null
channel_uid = null
created_at = null
updated_at = null
element = null
color = null
constructor(uid, channel_uid,user_uid,user_nick, color,message,created_at, updated_at){
constructor(uid, channel_uid,user_uid,user_nick, color,message,html,created_at, updated_at){
this.uid = uid
this.message = message
this.html = html
this.user_uid = user_uid
this.user_nick = user_nick
this.color = color

View File

@ -73,7 +73,8 @@ class RPCView(BaseView):
channel_uid=message["channel_uid"],
user_nick=user['nick'],
message=message["message"],
created_at=message["created_at"]
created_at=message["created_at"],
html=message['html']
))
return messages