view sat_templates/templates/bulma/chat/chat.html @ 411:f7a434581872 default tip

chat: Add forward, rich editing and extra recipients: - There is a new "forward" menu in message. For now, a simple prompt ask for recipient JID. - A new "extra" menu is available next to input field. Inside there are 2 items for now: add extra recipient, and toggle rich edit mode. - Extra recipient option add a field to add an email-like "to", "cc" or "bcc" recipients. - Rich edit let use rich styling such as bold, italic, underline, etc. rel 461
author Goffi <goffi@goffi.org>
date Fri, 04 Jul 2025 17:33:22 +0200
parents 44439110247f
children
line wrap: on
line source

{% if not embedded %}
    {% set loading_screen = true %}
    {% extends 'base/base.html' %}
{% endif %}
{% from 'components/collapsible_card.html' import collapsible_card %}
{% block title %}{{ target_jid }} - {{ super() }}{% endblock %}
{% block body %}
    {{ icon_defs(
   "check", "comment-dots", "ellipsis", "ellipsis-vertical", "regular envelope", "lock", "paperclip", "pencil", "pen-to-square", "quote-left", "reply", "regular face-smile", "regular share-from-square", "regular trash-can", "share-nodes", "unlock"
    ) }}



    <div class="columns is-gapless chat-container">
        <!-- Left Panel -->
        <div class="column is-2 left-sidebar has-background-dark" id="left_panel">
            <aside class="menu pl-4">
                <button class="button is-ghost has-text-grey-light mb-2 pl-1 is-align-items-center is-justify-content-start is-fullwidth" id="new_chat_btn" aria-label="Start new discussion">
                    <span class="icon">
                        <i class="fas fa-circle-plus"></i>
                    </span>
                    <span class="pt-1">Start New Chat</span>
                </button>
                <p class="menu-label has-text-grey-light">
                    {% trans %}Rooms{% endtrans %}
                </p>
                <ul class="menu-list">
                    {% for room_address, room_info in bookmarks.items() %}
                        <li>
                            <a {{ {'href': chat_url + "/" + room_address}|xmlattr}} class="chat-jid has-text-white"><span class="icon"><i class="fas fa-hashtag"></i></span> {{ room_info.get('name', room_address.split('@')[0]) }}</a>
                        </li>
                    {% endfor %}
                </ul>
                <p class="menu-label has-text-grey-light">
                    Direct Messages
                </p>
                <div id="direct-messages"></div>
            </aside>
        </div>

        <!-- Main Chat Area -->
        <div class="column is-8 main-panel chat-main" id="main_panel">
                <div class="panel-header px-4 py-2">
                    <div class="level is-mobile">
                        <div class="level-left">
                            <div class="level-item">
                                <button class="button is-small" id="left_panel-toggle" aria-label="Toggle left panel">
                                    <span class="icon"><i class="fas fa-bars"></i></span>
                                </button>
                            </div>
                            <div class="level-item">
                                <h1 class="title is-5 mb-0 pt-1">{{target_jid}}</h1>
                            </div>
                            {% if data_policy is defined and data_policy_score is defined %}
                                {# Data Policy badge #}
                                <div class="level-item">
                                    {% set color_class =
                                    'success' if data_policy_score >= 8 else
                                    'warning' if data_policy_score >= 5 else
                                    'danger' %}
                                    <div class="data-policy-badge tag is-{{ color_class }} is-clickable p-3">
                                        <span class="icon fa fa-file-shield"></span>
                                        <span class="pt-1">{{ data_policy_score }}</span>
                                    </div>
                                </div>
                            {% endif %}
                        </div>
                        <div class="level-right">
                            <div class="level-item">
                                <div class="field has-addons">
                                    <div class="control">
                                        <input class="input is-small" type="text" placeholder="Search">
                                    </div>
                                    <div class="control">
                                        <button class="button is-info is-small">
                                            <span class="icon is-small">
                                                <i class="fas fa-search"></i>
                                            </span>
                                        </button>
                                    </div>
                                </div>
                            </div>
                            <div class="level-item">
                                <button class="button is-small">
                                    <span class="icon"><i class="fas fa-cog"></i></span>
                                </button>
                            </div>
                            <div class="level-item {{ "is-hidden" if chat_type != "group" }}">
                                <button class="button is-small" id="right_panel-toggle">
                                    <span class="icon"><i class="fas fa-info-circle"></i></span>
                                </button>
                            </div>
                        </div>
                    </div>
                </div>

                <!-- Messages -->
                <div id="messages">
                    {% for msg in messages %}
                        {% set current_date = msg.timestamp|date_fmt('full', date_only=True) %}
                        {% if loop.changed(current_date) %}
                            <div class="separator">
                                <hr class="has-background-light" />
                                <span class="has-text-grey is-size-7">{{current_date}}</span>
                                <hr class="has-background-light" />
                            </div>
                        {% endif %}
                        {% include 'chat/message.html' %}
                    {% endfor %}
                </div>


            <div id="input-panel-area">
                {% include 'chat/message_input.html' %}
            </div>

        </div>



        <!-- Right Panel -->

        <div class="column is-2-desktop is-3-tablet right-sidebar {{ 'is-hidden' if chat_type != 'group' }}" id="right_panel">
            <div class="box is-shadowless has-background-white-bis is-full-height">
                <h3 class="title is-5 has-text-centered mb-4">Room Details</h3>

                {% if subject is defined %}
                    {% call collapsible_card("Subject", icon="fas fa-quote-left") %}
                    {{subject}}
                    {% endcall %}
                {% endif %}

                <div class="card">
                    <div class="card-header has-background-info-light">
                        <p class="card-header-title has-text-info-dark">
                        <span class="icon"><i class="fas fa-users"></i></span>
                        <span>Members (<span id="occupants-count">0</span>)</span>
                        </p>
                    </div>
                    <div class="card-content py-3 px-4" id="group-occupants">
                    </div>
                </div>
            </div>
        </div>

{% endblock body %}

{% block footer %}{% endblock footer %}