mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-11-04 01:32:05 +01:00 
			
		
		
		
	Add basic Markdown rules for the chat
Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
This commit is contained in:
		@@ -157,7 +157,6 @@ function fetchPreviousMessages() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function receiveFetchedMessages(data) {
 | 
			
		||||
    console.log(data)
 | 
			
		||||
    let channel_id = data['channel_id']
 | 
			
		||||
    let new_messages = data['messages']
 | 
			
		||||
 | 
			
		||||
@@ -237,7 +236,7 @@ function redrawMessages() {
 | 
			
		||||
                messageContentDiv.setAttribute('data-message-id', message['id'])
 | 
			
		||||
                lastContentDiv.appendChild(messageContentDiv)
 | 
			
		||||
                let messageContentSpan = document.createElement('span')
 | 
			
		||||
                messageContentSpan.innerText = message['content']
 | 
			
		||||
                messageContentSpan.innerHTML = markdownToHTML(message['content'])
 | 
			
		||||
                messageContentDiv.appendChild(messageContentSpan)
 | 
			
		||||
 | 
			
		||||
                registerMessageContextMenu(message, messageContentDiv, messageContentSpan)
 | 
			
		||||
@@ -272,7 +271,7 @@ function redrawMessages() {
 | 
			
		||||
        messageContentDiv.setAttribute('data-message-id', message['id'])
 | 
			
		||||
        contentDiv.appendChild(messageContentDiv)
 | 
			
		||||
        let messageContentSpan = document.createElement('span')
 | 
			
		||||
        messageContentSpan.innerText = message['content']
 | 
			
		||||
        messageContentSpan.innerHTML = markdownToHTML(message['content'])
 | 
			
		||||
        messageContentDiv.appendChild(messageContentSpan)
 | 
			
		||||
 | 
			
		||||
        registerMessageContextMenu(message, messageContentDiv, messageContentSpan)
 | 
			
		||||
@@ -290,6 +289,26 @@ function redrawMessages() {
 | 
			
		||||
    messageList.dispatchEvent(new CustomEvent('updatemessages'))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function markdownToHTML(text) {
 | 
			
		||||
    let safeText = text.replace(/&/g, "&")
 | 
			
		||||
         .replace(/</g, "<")
 | 
			
		||||
         .replace(/>/g, ">")
 | 
			
		||||
         .replace(/"/g, """)
 | 
			
		||||
         .replace(/'/g, "'")
 | 
			
		||||
    let lines = safeText.split('\n')
 | 
			
		||||
    let htmlLines = []
 | 
			
		||||
    for (let line of lines) {
 | 
			
		||||
        let htmlLine = line
 | 
			
		||||
            .replaceAll(/_(.*)_/gim, '<span class="text-decoration-underline">$1</span>')  // Underline
 | 
			
		||||
            .replaceAll(/\*\*(.*)\*\*/gim, '<span class="fw-bold">$1</span>')  // Bold
 | 
			
		||||
            .replaceAll(/\*(.*)\*/gim, '<span class="fst-italic">$1</span>')  // Italic
 | 
			
		||||
            .replaceAll(/`(.*)`/gim, '<pre>$1</pre>')  // Code
 | 
			
		||||
            .replaceAll(/(https?:\/\/\S+)/g, '<a href="$1" target="_blank">$1</a>')  // Links
 | 
			
		||||
        htmlLines.push(htmlLine)
 | 
			
		||||
    }
 | 
			
		||||
    return htmlLines.join('<br>')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function removeAllPopovers() {
 | 
			
		||||
    for (let popover of document.querySelectorAll('*[aria-describedby*="popover"]')) {
 | 
			
		||||
        let instance = bootstrap.Popover.getInstance(popover)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user