(sid: int)
| 18907 | <button class="btn btn-danger btn-sm" type="submit">{{ _('Delete report') }}</button> |
| 18908 | </form> |
| 18909 | {% endif %} |
| 18910 | </div> |
| 18911 | {% else %} |
| 18912 | <div class="small-muted">{{ _('No reports found.') }}</div> |
| 18913 | {% endfor %} |
| 18914 | </div> |
| 18915 | </div> |
| 18916 | </div> |
| 18917 | {% endblock %} |
| 18918 | """ |
| 18919 | |
| 18920 | |
| 18921 | TEMPLATES["discussion.html"] = r""" |
| 18922 | {% extends "base.html" %} |
| 18923 | {% block content %} |
| 18924 | <div class="chat-page"> |
| 18925 | <div class="chat-top"> |
| 18926 | <div class="card-soft p-3 discussion-header"> |
| 18927 | <div class="d-flex align-items-start justify-content-between gap-2 flex-wrap"> |
| 18928 | <div class="min-w-0"> |
| 18929 | <h4 class="mb-0">{{ _('Discussion') }}</h4> |
| 18930 | <div class="small-muted">{{ _('Public room (text).') }}</div> |
| 18931 | </div> |
| 18932 | |
| 18933 | <form method="get" class="d-flex gap-2 discussion-search"> |
| 18934 | <input class="form-control" name="q" value="{{ q }}" placeholder="{{ _('Search discussion...') }}" autocomplete="off"> |
| 18935 | <button class="btn btn-ghost" type="submit">{{ _('Search') }}</button> |
| 18936 | </form> |
| 18937 | </div> |
| 18938 | </div> |
| 18939 | </div> |
| 18940 | |
| 18941 | <div class="chat-messages" id="discussionBox" aria-live="polite"> |
| 18942 | {% for m in items %} |
| 18943 | <div class="msg-row {{ 'me' if m.sender==me else 'them' }}"> |
| 18944 | <div class="bubble {{ 'me' if m.sender==me else 'them' }}" data-mid="{{ m.id }}" data-kind="{{ m.kind }}" data-sender="{{ m.sender }}"> |
| 18945 | {% if m.sender!=me %}<div class="discuss-sender">@{{ m.sender }}</div>{% endif %} |
| 18946 | |
| 18947 | {% if m.kind == "text" %} |
| 18948 | <span class="msg-text">{{ m.body }}</span> |
| 18949 | {% elif m.kind == "voice" %} |
| 18950 | <audio controls preload="metadata"> |
| 18951 | <source src="{{ url_for('discussion_voice_stream', vid=m.voice_id) }}" type="{{ m.voice_mime }}"> |
| 18952 | </audio> |
| 18953 | {% elif m.kind == "file" %} |
| 18954 | {% if m.file_is_image %} |
| 18955 | <img src="{{ url_for('discussion_file_stream', fid=m.file_id) }}" alt="{{ m.file_name }}"/> |
| 18956 | {% elif m.file_is_video %} |
| 18957 | <video controls playsinline preload="metadata"> |
| 18958 | <source src="{{ url_for('discussion_file_stream', fid=m.file_id) }}" type="{{ m.file_mime }}"> |
| 18959 | </video> |
| 18960 | {% elif m.file_is_audio %} |
| 18961 | <audio controls preload="metadata"> |
| 18962 | <source src="{{ url_for('discussion_file_stream', fid=m.file_id) }}" type="{{ m.file_mime }}"> |
| 18963 | </audio> |
| 18964 | {% else %} |
| 18965 | <a class="file-chip" href="{{ url_for('discussion_file_download', fid=m.file_id) }}">📎 {{ m.file_name }}</a> |
| 18966 | <div class="small-muted mt-1">{{ m.file_size_h }}</div> |
nothing calls this directly
no test coverage detected