Changeset 824d1d0 in Klonkt


Ignore:
Timestamp:
08/25/2026 07:33:36 PM (2 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
cb1bd82
Parents:
2c0c338
Message:

Berichten: antwoorden en zwaaien naar de bovenkant van het gesprek

Volgt op de omgekeerde volgorde van zojuist (Robins besluit, 25-8).
Stond de antwoordknop onderaan, dan stond hij sinds vanmiddag bij het
OUDSTE bericht -- en dat is precies waar je niet op antwoordt. Nu staat
de rij direct onder de kop, waar het nieuwste bericht begint.

De zwaai-hand reist mee: die zat al in dezelfde rij en hoort bij
hetzelfde gebaar. De zwaai-MARKERING in de kop blijft waar hij is; die
twee vullen elkaar aan, want de markering overleeft het inklappen en de
knoppen niet.

msg-thread-foot heet nu msg-thread-actions: een naam die zegt waar iets
staat is een leugen zodra het verhuist. Geen JavaScript verwees ernaar,
alleen de eigen CSS op deze pagina, dus geen MOD_V nodig. De marge ging
mee van top naar bottom, anders plakt de rij tegen de eerste bubbel.

Zesde toets erbij, met tegenbewijs tegen de vorige commit: daar faalt
precies die ene en blijven de andere vijf groen. Volle suite 1236.

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/views/pages/messages.ejs

    r2c0c338 r824d1d0  
    127127     waard. */
    128128  .msg-thread.is-collapsed .msg-thread-msgs,
    129   .msg-thread.is-collapsed .msg-thread-foot { display: none; }
     129  .msg-thread.is-collapsed .msg-thread-actions { display: none; }
    130130  /* Tijdens het zoeken wint de treffer van de dichtgeklapte stand. */
    131131  .msg-thread.is-collapsed.is-search-open .msg-thread-msgs { display: flex; }
    132   .msg-thread.is-collapsed.is-search-open .msg-thread-foot { display: flex; }
     132  .msg-thread.is-collapsed.is-search-open .msg-thread-actions { display: flex; }
    133133  .msg-thread.is-collapsed .msg-thread-chevron { transform: rotate(-90deg); }
    134134  .msg-thread.is-collapsed .msg-thread-head { margin-bottom: 0; }
     
    156156  .msg-sub .msg-line { flex-wrap: wrap; }
    157157
    158   /* De voet van een gesprek: antwoorden en zwaaien naast elkaar, ingeklapt.
     158  /* Antwoorden en zwaaien naast elkaar, ingeklapt, en sinds 25-8 BOVEN de
     159     berichten -- daar staat het nieuwste, en daar antwoord je dus op. Heette
     160     msg-thread-foot toen het onderaan stond; de marge verhuisde mee van top
     161     naar bottom, anders plakt de rij tegen de eerste bubbel.
    159162     Een open editor onder elk gesprek maakt de lijst weer onleesbaar -- precies
    160163     wat deze weergave moest oplossen. */
    161   .msg-thread-foot { display: flex; align-items: flex-start; gap: .5rem; margin-top: .5rem; flex-wrap: wrap; }
     164  .msg-thread-actions { display: flex; align-items: flex-start; gap: .5rem; margin-bottom: .5rem; flex-wrap: wrap; }
    162165  .msg-reply { flex: 1 1 12rem; min-width: 0; }
    163166  .msg-reply > summary { cursor: pointer; font-size: .82rem; color: var(--ink-soft, #888); }
  • src/views/partials/msg-item.ejs

    r2c0c338 r824d1d0  
    5050            <% } %>
    5151          </div>
    52           <%# NIEUWSTE BOVENAAN binnen een gesprek (Robins besluit, 25-8). De
    53               LIJST van gesprekken en de meldingen blijven staan zoals ze
    54               stonden; alleen binnen een draad leest het van nieuw naar oud, dus
    55               wat er net bij kwam staat er meteen en niet onderaan een lange
    56               draad.
    57 
    58               Op een KOPIE, want groupConversations sorteert `messages`
    59               oplopend en de rest van deze pagina rekent daarop -- `_tnew` en
    60               `_tto` hierboven lezen dezelfde array. Een reverse() zonder
    61               slice() draait het origineel om en dat werkt door naar alles wat
    62               er daarna nog naar kijkt.
    63 
    64               In de MARKUP en niet met column-reverse: die draait alleen het
    65               beeld om, terwijl een schermlezer en het toetsenbord de oude
    66               volgorde houden. %>
    67           <ul class="msg-thread-msgs">
    68             <% (n.messages || []).slice().reverse().forEach(function (m) { %><%- include('msg-item', { n: m, seen: _tseen, inThread: true }) %><% }); %>
    69           </ul>
    70           <%# Antwoorden vanuit de draad zelf. Ingeklapt, want een open editor
    71               onder elk gesprek maakt de lijst onleesbaar -- juist het probleem
    72               dat deze weergave moest oplossen. De route kiest het pad: een
    73               draad aan een post krijgt een reply, een draad aan een persoon een
    74               direct bericht. %>
     52          <%# Antwoorden vanuit de draad zelf, BOVEN de berichten (Robins
     53              besluit, 25-8). Sinds het nieuwste bovenaan staat, is de bovenkant
     54              waar het gesprek nu is: antwoorden hoort bij het laatste bericht,
     55              en dat staat er direct onder. Onderaan zou de knop bij het OUDSTE
     56              bericht komen te staan, en dat is precies waar je niet op
     57              antwoordt.
     58
     59              Nog steeds ingeklapt, want een open editor onder elk gesprek maakt
     60              de lijst onleesbaar -- juist het probleem dat deze weergave moest
     61              oplossen. De route kiest het pad: een draad aan een post krijgt
     62              een reply, een draad aan een persoon een direct bericht. %>
    7563          <%# shaer-r4c: precies de tak die de server ook kiest. /messages/reply
    7664              gaat naar deliverReply als er een interaction+post is (dat is een
     
    8068          <% var _kan = canMutate && ((_thread && locals.mayReply !== false) || (!_thread && _rt.actorUri)); %>
    8169          <% if (_kan) { %>
    82             <div class="msg-thread-foot">
     70            <%# Heette msg-thread-foot toen hij onderaan stond. Een naam die
     71                zegt waar iets staat is een leugen zodra het verhuist, dus nu
     72                zegt hij wat het IS. %>
     73            <div class="msg-thread-actions">
    8374              <details class="msg-reply">
    8475                <summary><%= t('fedi.reply') %></summary>
     
    10798            </div>
    10899          <% } %>
     100          <%# NIEUWSTE BOVENAAN binnen een gesprek (Robins besluit, 25-8). De
     101              LIJST van gesprekken en de meldingen blijven staan zoals ze
     102              stonden; alleen binnen een draad leest het van nieuw naar oud, dus
     103              wat er net bij kwam staat er meteen en niet onderaan een lange
     104              draad.
     105
     106              Op een KOPIE, want groupConversations sorteert `messages`
     107              oplopend en de rest van deze pagina rekent daarop -- `_tnew` en
     108              `_tto` hierboven lezen dezelfde array. Een reverse() zonder
     109              slice() draait het origineel om en dat werkt door naar alles wat
     110              er daarna nog naar kijkt.
     111
     112              In de MARKUP en niet met column-reverse: die draait alleen het
     113              beeld om, terwijl een schermlezer en het toetsenbord de oude
     114              volgorde houden. %>
     115          <ul class="msg-thread-msgs">
     116            <% (n.messages || []).slice().reverse().forEach(function (m) { %><%- include('msg-item', { n: m, seen: _tseen, inThread: true }) %><% }); %>
     117          </ul>
    109118        </li>
    110119<% } else { %>
  • test/messages-thread-order.test.js

    r2c0c338 r824d1d0  
    6969  assert.equal((await render(eigen)).includes('msg-thread-wave'), false);
    7070});
     71
     72test('antwoorden en zwaaien staan BOVEN de berichten', async () => {
     73  // Sinds het nieuwste bovenaan staat hoort de knop daar ook: onderaan zou hij
     74  // bij het OUDSTE bericht komen te staan, en daar antwoord je niet op.
     75  const html = await ejs.renderFile(partial, {
     76    ...helpers, canMutate: true,
     77    n: draad({ replyTo: { actorUri: 'https://pruts.nl/ap/users/bart' } }),
     78  });
     79  const acties = html.indexOf('msg-thread-actions');
     80  const bubbels = html.indexOf('msg-thread-msgs');
     81  assert.ok(acties > -1, 'de antwoordrij staat er');
     82  assert.ok(bubbels > -1, 'en de berichten ook');
     83  assert.ok(acties < bubbels, `antwoordrij boven de berichten, kreeg acties=${acties} bubbels=${bubbels}`);
     84  // De zwaai-hand hoort in diezelfde rij, dus ook boven de berichten.
     85  const zwaai = html.indexOf('class="msg-wave"');
     86  assert.ok(zwaai > -1 && zwaai < bubbels, 'de zwaai-hand staat in de rij erboven');
     87});
Note: See TracChangeset for help on using the changeset viewer.