mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-11-04 12:32:18 +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) {
 | 
					function receiveFetchedMessages(data) {
 | 
				
			||||||
    console.log(data)
 | 
					 | 
				
			||||||
    let channel_id = data['channel_id']
 | 
					    let channel_id = data['channel_id']
 | 
				
			||||||
    let new_messages = data['messages']
 | 
					    let new_messages = data['messages']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -237,7 +236,7 @@ function redrawMessages() {
 | 
				
			|||||||
                messageContentDiv.setAttribute('data-message-id', message['id'])
 | 
					                messageContentDiv.setAttribute('data-message-id', message['id'])
 | 
				
			||||||
                lastContentDiv.appendChild(messageContentDiv)
 | 
					                lastContentDiv.appendChild(messageContentDiv)
 | 
				
			||||||
                let messageContentSpan = document.createElement('span')
 | 
					                let messageContentSpan = document.createElement('span')
 | 
				
			||||||
                messageContentSpan.innerText = message['content']
 | 
					                messageContentSpan.innerHTML = markdownToHTML(message['content'])
 | 
				
			||||||
                messageContentDiv.appendChild(messageContentSpan)
 | 
					                messageContentDiv.appendChild(messageContentSpan)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                registerMessageContextMenu(message, messageContentDiv, messageContentSpan)
 | 
					                registerMessageContextMenu(message, messageContentDiv, messageContentSpan)
 | 
				
			||||||
@@ -272,7 +271,7 @@ function redrawMessages() {
 | 
				
			|||||||
        messageContentDiv.setAttribute('data-message-id', message['id'])
 | 
					        messageContentDiv.setAttribute('data-message-id', message['id'])
 | 
				
			||||||
        contentDiv.appendChild(messageContentDiv)
 | 
					        contentDiv.appendChild(messageContentDiv)
 | 
				
			||||||
        let messageContentSpan = document.createElement('span')
 | 
					        let messageContentSpan = document.createElement('span')
 | 
				
			||||||
        messageContentSpan.innerText = message['content']
 | 
					        messageContentSpan.innerHTML = markdownToHTML(message['content'])
 | 
				
			||||||
        messageContentDiv.appendChild(messageContentSpan)
 | 
					        messageContentDiv.appendChild(messageContentSpan)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        registerMessageContextMenu(message, messageContentDiv, messageContentSpan)
 | 
					        registerMessageContextMenu(message, messageContentDiv, messageContentSpan)
 | 
				
			||||||
@@ -290,6 +289,26 @@ function redrawMessages() {
 | 
				
			|||||||
    messageList.dispatchEvent(new CustomEvent('updatemessages'))
 | 
					    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() {
 | 
					function removeAllPopovers() {
 | 
				
			||||||
    for (let popover of document.querySelectorAll('*[aria-describedby*="popover"]')) {
 | 
					    for (let popover of document.querySelectorAll('*[aria-describedby*="popover"]')) {
 | 
				
			||||||
        let instance = bootstrap.Popover.getInstance(popover)
 | 
					        let instance = bootstrap.Popover.getInstance(popover)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user