diff --git a/chat/static/chat.js b/chat/static/chat.js index dcef533..30ce636 100644 --- a/chat/static/chat.js +++ b/chat/static/chat.js @@ -235,9 +235,18 @@ function redrawMessages() { fetchMoreButton.classList.remove('d-none') } +function removeAllPopovers() { + for (let popover of document.querySelectorAll('*[aria-describedby*="popover"]')) { + let instance = bootstrap.Popover.getInstance(popover) + if (instance) + instance.dispose() + } +} + function registerSendPrivateMessageContextMenu(message, element) { element.addEventListener('contextmenu', (menu_event) => { menu_event.preventDefault() + removeAllPopovers() const popover = bootstrap.Popover.getOrCreateInstance(element, { 'title': message['author'], 'content': `Envoyer un message privé`, @@ -247,7 +256,7 @@ function registerSendPrivateMessageContextMenu(message, element) { document.getElementById('send-private-message-link-' + message['id']).addEventListener('click', event => { event.preventDefault() - popover.hide() + popover.dispose() socket.send(JSON.stringify({ 'type': 'start_private_chat', 'user_id': message['author_id'], @@ -259,10 +268,13 @@ function registerSendPrivateMessageContextMenu(message, element) { function registerMessageContextMenu(message, element) { element.addEventListener('contextmenu', (menu_event) => { menu_event.preventDefault() + removeAllPopovers() let content = `Envoyer un message privé` - content += `
` - content += `Modifier` - content += `Supprimer` + if (message['author_id'] === USER_ID || IS_ADMIN) { + content += `
` + content += `Modifier` + content += `Supprimer` + } const popover = bootstrap.Popover.getOrCreateInstance(element, { 'content': content, 'html': true, @@ -272,7 +284,7 @@ function registerMessageContextMenu(message, element) { document.getElementById('send-private-message-link-msg-' + message['id']).addEventListener('click', event => { event.preventDefault() - popover.hide() + popover.dispose() socket.send(JSON.stringify({ 'type': 'start_private_chat', 'user_id': message['author_id'], @@ -296,13 +308,7 @@ function toggleFullscreen() { } document.addEventListener('DOMContentLoaded', () => { - document.addEventListener('click', () => { - for (let popover of document.querySelectorAll('span[aria-describedby*="popover"]')) { - let instance = bootstrap.Popover.getInstance(popover) - if (instance) - instance.hide() - } - }) + document.addEventListener('click', removeAllPopovers) /** * Process the received data from the server. diff --git a/chat/templates/chat/content.html b/chat/templates/chat/content.html index b58e35a..2e1d8e1 100644 --- a/chat/templates/chat/content.html +++ b/chat/templates/chat/content.html @@ -87,4 +87,9 @@ - \ No newline at end of file + + + \ No newline at end of file