<%# Een post van een andere server: hoe hij eruit ziet, en wat je ermee kunt. EEN PLEK, DRIE INGANGEN: de live-preview onder de zoekbalk, de zoekpagina en /authorize_interaction. Eén render, zodat een poort, een sanitizer of een knop niet op één plek vergeten kan worden. De formulieren posten overal naar /authorize_interaction/..., want daar zit het werk en de rechtencontrole. Hij ziet eruit als een POST, niet als een formulier over een post: kop met gezicht, de inhoud, en één rij knoppen eronder. Wat daar vroeger omheen stond (een zin "je reageert op", een aparte knop naar het origineel, twee grote pillen, "of reageer:" en een altijd open antwoordvenster) is teruggebracht tot die ene rij. Antwoorden klapt pas open als je erom vraagt, melden staat onderaan en niet in de weg. Verwacht: target (uit resolveRemoteNote), uri, reacted {liked,boosted}. Optioneel: compact de live-preview: geen antwoordvenster en geen meldformulier; die twee staan een tik verder op de volle pagina. Een editor in een uitklaplijst is op een telefoon geen plek om te schrijven. mayReply false = alleen lezen en reageren, geen antwoordknop replyOpen het antwoordvenster staat al open (?reply=1, de terugval zonder JS) reportOpen idem voor melden (?report=1) cancelUrl waar Annuleren heen gaat zonder JS, standaard de volle pagina siteTitle %> <% const _compact = !!locals.compact; const _mayReply = locals.mayReply !== false; const _full = '/authorize_interaction?uri=' + encodeURIComponent(uri); const _cancel = locals.cancelUrl || _full; const _liked = !!(locals.reacted && reacted.liked); const _boosted = !!(locals.reacted && reacted.boosted); const _src = target.url || uri; // Een inhoudswaarschuwing wordt gerespecteerd. De oude render toonde alles // gewoon open, ook wat de schrijver achter een waarschuwing had gezet. const _warn = target.cw || (target.sensitive ? t('fedi.sensitive') : ''); const _imgs = (target.images || []).slice(0, 4); const _initial = String(target.actor_name || target.actor_handle || '?').replace(/^@/, '').slice(0, 1).toUpperCase(); %>
<% if (target.actor_icon) { %> <% } else { %> <% } %>
<% if (_warn) { %>
<%= _warn %><%= t('fedi.cw_open') %> <% } %> <% if (target.content) { %>
<%- target.content %>
<% } else if (target.preview) { %>

<%= target.preview %>

<% } %> <% if (_imgs.length) { %>
<% _imgs.forEach(function (im) { %> <% }); %>
<% } %> <% if (_warn) { %>
<% } %> <% if (target.poll) { var _pl = target.poll; var _tot = _pl.options.reduce(function(s,o){return s+(o.count||0);},0); var _vn = (_pl.voters!=null?_pl.voters:_tot); %> <% if (!_pl.closed) { %>
<% _pl.options.forEach(function(o){ %> <% }); %>
<%= _vn %> <%= _vn === 1 ? t('poll.voter_one') : t('poll.voter_many') %><% if (_pl.endTime) { %> · <%= t('poll.closes') %> <%= new Date(_pl.endTime).toLocaleString() %><% } %><% if (_pl.multiple) { %> · <%= t('poll.multiple') %><% } %>
<% } else { %>
<% _pl.options.forEach(function(o){ var _pct = _tot ? Math.round((o.count||0)*100/_tot) : 0; %>
<%= o.name %><%= _pct %>%
<% }); %>
<%= _vn %> <%= _vn === 1 ? t('poll.voter_one') : t('poll.voter_many') %> · <%= t('poll.closed') %>
<% } %> <% } %> <%# Eén rij. Op een smalle telefoon vallen de woorden weg en blijven de tekens staan, elk minstens 44 punten groot: een duim is geen muis. De woorden blijven voor een schermlezer wel gewoon bestaan. %>
<% if (_compact) { %> <%= t('fedi.open_full') %> → <% } else { %> <% if (_mayReply) { %> <%# Dicht tot je op Reageer tikt. Zonder JS opent ?reply=1 hem, zodat de knop ook dan ergens heen gaat. %>
>

<%= t('fedi.reply_where') %>

<%- include('./reply-editor', { action: '/authorize_interaction', hiddenFields: [{ name: 'uri', value: uri }], placeholder: t('fedi.reply_ph'), submitLabel: t('fedi.send'), rows: 4, participants: (target && target.actor_uri) ? [{ uri: target.actor_uri, url: target.actor_url || target.actor_uri, handle: target.actor_handle || '', }] : [], }) %>
<%= t('comments.cancel') %>
<% } %>

<%= t('fedi.remote_as', { site: siteTitle }) %>

> <%= t('fedi.report_open') %>

<%= t('fedi.report_where') %>

<% } %>