Changeset 2bd31d6 in Klonkt for src/routes/posts.js


Ignore:
Timestamp:
08/08/2026 01:48:05 AM (5 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
50e80ac
Parents:
02c6231
git-author:
Robin <roboburr@…> (08/08/2026 01:47:50 AM)
git-committer:
Robin <roboburr@…> (08/08/2026 01:48:05 AM)
Message:

Zwaaien is een klik, geen paginawissel

Een zwaai is een seintje. Dat de hele pagina ervoor herlaadde -- met een
groene balk bovenaan en je scrollpositie kwijt -- gaf het meer gewicht dan
het heeft.

Nu onderschept mod/messages.js de verzending en stuurt hem met fetch, zoals
like/boost in de Krant al deden. De knoppen maken plaats voor een korte
bevestiging; mislukt het, dan komen ze terug met een schud.

DE VAL HIER, en hij verschilt van like/boost: deze formulieren hebben MEERDERE
verzendknoppen ("Wat leuk!", "Hoe gaat het?", "Terug"), elk met een eigen
name="text". FormData(f) neemt de aangeklikte knop NIET mee -- dat doet de
browser alleen bij een echte verzending. Zonder e.submitter vertrekt er dus
een zwaai zonder tekst. Er is een test die precies dat vastlegt: een verzoek
zonder text moet 400 geven en NIETS versturen.

Het formulier blijft een formulier: zonder JS post het en leidt de route om,
ongewijzigd. De route kiest op X-Requested-With welke van de twee.

Geen aan/uit-knop zoals bij een like: zwaaien valt niet terug te draaien, dus
een toggle zou liegen over wat er kan.

Eigen CSS voor de twee toestanden, want de bestaande klasse nudge bleek
alleen op authorize-interaction opmaak te hebben -- op Berichten deed hij niets
(en doet dat nog steeds niet voor de bookmarklet-knop daar).

5 tests erbij.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/posts.js

    r02c6231 r2bd31d6  
    973973  const to = String(req.body.to || '').trim();
    974974  const text = String(req.body.text || '').trim().slice(0, 200);
    975   if (!site || !/^https?:\/\//i.test(to) || !text) return res.redirect(back + '?error=quickreply');
     975  // Zwaaien is een seintje, en een seintje hoort de pagina niet te herladen.
     976  // De module stuurt hem met X-Requested-With: fetch en krijgt JSON terug;
     977  // zonder JS blijft het formulier gewoon posten en omleiden.
     978  const viaFetch = req.get('X-Requested-With') === 'fetch';
     979  const mis = (reden) => (viaFetch ? res.status(400).json({ ok: false, error: reden }) : res.redirect(back + '?error=' + reden));
     980  if (!site || !/^https?:\/\//i.test(to) || !text) return mis('quickreply');
    976981  try {
    977982    const r = await ActivityPubService.deliverDirectNote(site, { recipients: [to], text, wave: true });
    978     if (r) return res.redirect(back + '?success=wave_sent');
     983    if (r) return viaFetch ? res.json({ ok: true }) : res.redirect(back + '?success=wave_sent');
    979984  } catch { /* fall through */ }
    980   res.redirect(back + '?error=quickreply');
     985  return mis('quickreply');
    981986});
    982987
Note: See TracChangeset for help on using the changeset viewer.