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) channel_uid = ModelField(name="channel_uid", required=True, kind=str)
user_uid = ModelField(name="user_uid", required=True, kind=str) user_uid = ModelField(name="user_uid", required=True, kind=str)
message = ModelField(name="message", 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 from snek.system.service import BaseService
import jinja2
class ChannelMessageService(BaseService): class ChannelMessageService(BaseService):
mapper_name = "channel_message" mapper_name = "channel_message"
async def create(self, channel_uid, user_uid, message): async def create(self, channel_uid, user_uid, message):
model = await self.new() model = await self.new()
model["channel_uid"] = channel_uid model["channel_uid"] = channel_uid
model["user_uid"] = user_uid model["user_uid"] = user_uid
model["message"] = message 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): if await self.save(model):
return model return model
raise Exception(f"Failed to create channel message: {model.errors}.") 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) user = await self.services.user.get(uid=user_uid)
await self.services.notification.create_channel_message(channel_message_uid) await self.services.notification.create_channel_message(channel_message_uid)
sent_to_count = await self.services.socket.broadcast(channel_uid, dict( 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, user_uid=user_uid,
color=user['color'], color=user['color'],
channel_uid=channel_uid, channel_uid=channel_uid,

View File

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

View File

@ -1,14 +1,16 @@
class MessageModel { class MessageModel {
message = null message = null
html = null
user_uid = null user_uid = null
channel_uid = null channel_uid = null
created_at = null created_at = null
updated_at = null updated_at = null
element = null element = null
color = 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.uid = uid
this.message = message this.message = message
this.html = html
this.user_uid = user_uid this.user_uid = user_uid
this.user_nick = user_nick this.user_nick = user_nick
this.color = color this.color = color

View File

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