Changeset 189e335 in Klonkt for src/views/partials/msg-item.ejs


Ignore:
Timestamp:
08/06/2026 07:02:57 AM (5 weeks ago)
Author:
Claude (agent) <aiclaude@…>
Branches:
main
Children:
84ce988
Parents:
99a7b40
git-author:
Robin <roboburr@…> (08/06/2026 07:02:56 AM)
git-committer:
Claude (agent) <aiclaude@…> (08/06/2026 07:02:57 AM)
Message:

Antwoorden vanuit een gesprek, rijk, met de zwaai als eigen knop

Berichten kon je gesprekken tonen maar er niet in antwoorden. Het invoerveld dat
er stond was msg-quickreply: platte tekst, 200 tekens, en het verstuurde geen
antwoord maar een zwaai (deliverDirectNote met wave:true, een FEP-633c-seintje).
Dat is iets anders dat toevallig op een reply leek.

Onder elke draad staat nu de gedeelde reply-editor, ingeklapt achter een
"Reageer" -- open onder elk gesprek maakt de lijst weer onleesbaar, precies wat
deze weergave moest oplossen. De zwaai blijft ernaast als eigen knop, want een
seintje en een antwoord horen niet op een hoop.

/messages/reply kiest het pad op wat de draad zelf meedraagt (replyTo):

  • draad aan een post -> deliverReply op het nieuwste ontvangen bericht erin, met een controle dat die parent ook echt bij die post hoort; anders kon een aangepast formulier een antwoord onder andermans draad hangen.
  • draad aan een persoon -> een direct bericht terug.

Voor dat tweede pad kon deliverDirectNote nog geen rijke inhoud: het escapete
platte tekst. Het accepteert nu html, door dezelfde sanitizer als deliverReply,
zodat een antwoord uit Berichten via één poort gaat. De mention-anker blijft een
eigen alinea vooraan, want de ontvanger moet genoemd staan ook als de inhoud met
een kop of lijst begint. Levert de sanitizer niets bruikbaars op, dan valt het
terug op de escaped tekst -- een leeggepoetste editor mag geen leeg bericht
versturen.

Meldingen in nl/en/de erbij, en getNotifications geeft nu het interactie-id en
de actor-uri mee, want zonder die twee weet een antwoord niet waar het heen moet.

Geverifieerd op dev: beide draden daar adresseren hun eigen tegenpartij, het
formulier draagt de juiste verborgen velden en de zwaai staat er los naast.
Suite 412/412.

Co-Authored-By: Claude Opus 5 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/views/partials/msg-item.ejs

    r99a7b40 r189e335  
    3030            <% (n.messages || []).forEach(function (m) { %><%- include('msg-item', { n: m, seen: _tseen, inThread: true }) %><% }); %>
    3131          </ul>
     32          <%# Antwoorden vanuit de draad zelf. Ingeklapt, want een open editor
     33              onder elk gesprek maakt de lijst onleesbaar -- juist het probleem
     34              dat deze weergave moest oplossen. De route kiest het pad: een
     35              draad aan een post krijgt een reply, een draad aan een persoon een
     36              direct bericht. %>
     37          <% var _rt = n.replyTo || {}; var _kan = canMutate && ((_rt.interactionId && _rt.postSlug) || _rt.actorUri); %>
     38          <% if (_kan) { %>
     39            <div class="msg-thread-foot">
     40              <details class="msg-reply">
     41                <summary><%= t('fedi.reply') %></summary>
     42                <div class="msg-reply-form">
     43                  <%- include('../partials/reply-editor', {
     44                    action: (typeof siteUrlBase !== 'undefined' ? siteUrlBase : '') + '/messages/reply',
     45                    hiddenFields: [
     46                      { name: 'interaction_id', value: _rt.interactionId || '' },
     47                      { name: 'post_slug', value: _rt.postSlug || '' },
     48                      { name: 'to', value: _rt.actorUri || '' },
     49                    ],
     50                    placeholder: t('fedi.reply_ph'),
     51                    submitLabel: t('fedi.reply'),
     52                    rows: 2,
     53                  }) %>
     54                </div>
     55              </details>
     56              <%# De zwaai blijft een eigen knop: het is geen antwoord maar een
     57                  seintje (FEP-633c), en die twee horen niet op een hoop. %>
     58              <% if (_rt.actorUri) { %>
     59                <form method="post" action="<%= (typeof siteUrlBase !== 'undefined' ? siteUrlBase : '') %>/messages/quick-reply" class="msg-wave">
     60                  <input type="hidden" name="to" value="<%= _rt.actorUri %>">
     61                  <button class="btn small" name="text" value="&#128075;" title="<%= t('msg.wave_back') %>">&#128075;</button>
     62                </form>
     63              <% } %>
     64            </div>
     65          <% } %>
    3266        </li>
    3367<% } else { %>
Note: See TracChangeset for help on using the changeset viewer.