Add fullscreen mode for chat

Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
This commit is contained in:
Emmy D'Anello 2024-04-27 16:16:57 +02:00
parent ca91842c2d
commit 2d706b2b81
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
4 changed files with 44 additions and 20 deletions

View File

@ -33,6 +33,8 @@ function selectChannel(channel_id) {
selected_channel_id = channel_id selected_channel_id = channel_id
window.history.replaceState({}, null, `#channel-${channel['id']}`)
let channelTitle = document.getElementById('channel-title') let channelTitle = document.getElementById('channel-title')
channelTitle.innerText = channel['name'] channelTitle.innerText = channel['name']
@ -84,9 +86,13 @@ function setChannels(new_channels) {
fetchMessages(channel['id']) fetchMessages(channel['id'])
} }
if (new_channels && (!selected_channel_id || !channels[selected_channel_id])) if (new_channels && (!selected_channel_id || !channels[selected_channel_id])) {
if (window.location.hash)
selectChannel(window.location.hash.substring(9))
else
selectChannel(Object.keys(channels)[0]) selectChannel(Object.keys(channels)[0])
} }
}
function receiveMessage(message) { function receiveMessage(message) {
messages[message['channel_id']].set(message['id'], message) messages[message['channel_id']].set(message['id'], message)
@ -180,6 +186,20 @@ function redrawMessages() {
fetchMoreButton.classList.remove('d-none') fetchMoreButton.classList.remove('d-none')
} }
function toggleFullscreen() {
let chatContainer = document.getElementById('chat-container')
if (!chatContainer.getAttribute('data-fullscreen')) {
chatContainer.setAttribute('data-fullscreen', 'true')
chatContainer.classList.add('position-absolute', 'top-0', 'start-0', 'vh-100', 'z-3')
window.history.replaceState({}, null, `?fullscreen=1#channel-${selected_channel_id}`)
}
else {
chatContainer.removeAttribute('data-fullscreen')
chatContainer.classList.remove('position-absolute', 'top-0', 'start-0', 'vh-100', 'z-3')
window.history.replaceState({}, null, `?fullscreen=0#channel-${selected_channel_id}`)
}
}
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
/** /**
* Process the received data from the server. * Process the received data from the server.

View File

@ -3,6 +3,8 @@
{% load static %} {% load static %}
{% load i18n %} {% load i18n %}
{% block content-title %}{% endblock %}
{% block content %} {% block content %}
<noscript> <noscript>
{% trans "JavaScript must be enabled on your browser to access chat." %} {% trans "JavaScript must be enabled on your browser to access chat." %}
@ -17,7 +19,8 @@
</div> </div>
</div> </div>
<div class="card tab-content w-100 mh-100" style="height: 95vh" id="nav-channels-content"> <div class="card tab-content w-100 mh-100{% if request.GET.fullscreen == '1' %} position-absolute top-0 start-0 vh-100 z-3{% endif %}"
style="height: 95vh" id="chat-container">
<div class="card-header"> <div class="card-header">
<h3> <h3>
<button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#channelSelector" <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#channelSelector"
@ -25,6 +28,9 @@
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button>
<span id="channel-title"></span> <span id="channel-title"></span>
<button class="btn float-end" type="button" onclick="toggleFullscreen()" title="{% trans "Toggle fullscreen mode" %}">
<i class="fas fa-expand"></i>
</button>
</h3> </h3>
</div> </div>
<div class="card-body overflow-y-scroll mw-100 h-100 flex-grow-0" id="chat-messages"> <div class="card-body overflow-y-scroll mw-100 h-100 flex-grow-0" id="chat-messages">

View File

@ -2,10 +2,9 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.utils.translation import gettext_lazy as _
from django.views.generic import TemplateView from django.views.generic import TemplateView
from chat.models import Channel
class ChatView(LoginRequiredMixin, TemplateView): class ChatView(LoginRequiredMixin, TemplateView):
""" """
@ -13,9 +12,4 @@ class ChatView(LoginRequiredMixin, TemplateView):
with Javascript and websockets. with Javascript and websockets.
""" """
template_name = "chat/chat.html" template_name = "chat/chat.html"
extra_context = {'title': _("Chat")}
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
from asgiref.sync import async_to_sync
context['channels'] = async_to_sync(Channel.get_accessible_channels)(self.request.user, 'read')
return context

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: TFJM\n" "Project-Id-Version: TFJM\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-04-27 14:10+0200\n" "POT-Creation-Date: 2024-04-27 16:15+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Emmy D'Anello <emmy.danello@animath.fr>\n" "Last-Translator: Emmy D'Anello <emmy.danello@animath.fr>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -143,22 +143,30 @@ msgstr "message"
msgid "messages" msgid "messages"
msgstr "messages" msgstr "messages"
#: chat/templates/chat/chat.html:8 #: chat/templates/chat/chat.html:10
msgid "JavaScript must be enabled on your browser to access chat." msgid "JavaScript must be enabled on your browser to access chat."
msgstr "JavaScript doit être activé sur votre navigateur pour accéder au chat." msgstr "JavaScript doit être activé sur votre navigateur pour accéder au chat."
#: chat/templates/chat/chat.html:12 #: chat/templates/chat/chat.html:14
msgid "Chat channels" msgid "Chat channels"
msgstr "Canaux de chat" msgstr "Canaux de chat"
#: chat/templates/chat/chat.html:40 #: chat/templates/chat/chat.html:31
msgid "Toggle fullscreen mode"
msgstr "Inverse le mode plein écran"
#: chat/templates/chat/chat.html:39
msgid "Fetch previous messages…" msgid "Fetch previous messages…"
msgstr "Récupérer les messages précédents…" msgstr "Récupérer les messages précédents…"
#: chat/templates/chat/chat.html:52 #: chat/templates/chat/chat.html:51
msgid "Send message…" msgid "Send message…"
msgstr "Envoyer un message…" msgstr "Envoyer un message…"
#: chat/views.py:15 tfjm/templates/navbar.html:67
msgid "Chat"
msgstr "Chat"
#: draw/admin.py:39 draw/admin.py:57 draw/admin.py:75 #: draw/admin.py:39 draw/admin.py:57 draw/admin.py:75
#: participation/admin.py:109 participation/models.py:253 #: participation/admin.py:109 participation/models.py:253
#: participation/tables.py:88 #: participation/tables.py:88
@ -3720,10 +3728,6 @@ msgstr "Mon équipe"
msgid "My participation" msgid "My participation"
msgstr "Ma participation" msgstr "Ma participation"
#: tfjm/templates/navbar.html:67
msgid "Chat"
msgstr "Chat"
#: tfjm/templates/navbar.html:72 #: tfjm/templates/navbar.html:72
msgid "Administration" msgid "Administration"
msgstr "Administration" msgstr "Administration"