Changeset 0db68bd in Klonkt for src/views/pages/post.ejs


Ignore:
Timestamp:
08/07/2026 12:31:09 PM (5 weeks ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
792af53
Parents:
e64a49b
git-author:
Robin <roboburr@…> (08/07/2026 12:31:08 PM)
git-committer:
roboburr <roboburr@…> (08/07/2026 12:31:09 PM)
Message:

De post-pagina uit inline script naar een module (shaer-bqr, stap 3a)

Het remote-reply-veld ("beantwoorden vanaf je eigen server"). Kwam je op een post
via een link BINNEN de site, dan werd dat script geweigerd en deed de knop niets
-- precies op de plek waar de meeste bezoekers binnenkomen.

Kon ONGEWIJZIGD mee: alles al gedelegeerd op document, geen enkel pagina-element
vastgehouden, en er stond al een slot op. Dat is geen toeval -- het is geschreven
voor een popover die een htmx-swap moet overleven. Waar dat al zo is, is de
verhuizing puur verplaatsen.

Suite 556/556.

File:
1 edited

Legend:

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

    re64a49b r0db68bd  
    147147    </section>
    148148  <% } %>
    149   <script>
    150   (function(){
    151     if (window.__fediRemoteWired) return; window.__fediRemoteWired = true;
    152     var current = null, currentBtn = null;
    153     function close(){ if (current) { current.remove(); current = null; currentBtn = null; } }
    154     function go(raw, uri){
    155       var d = (raw||'').trim().replace(/^@?[^@\s]*@/, '').replace(/^https?:\/\//i, '').replace(/\/.*$/, '').trim();
    156       if (d) { try { localStorage.setItem('pcmsFediServer', d); } catch(e){} location.href = 'https://' + d + '/authorize_interaction?uri=' + encodeURIComponent(uri||''); }
    157     }
    158     function place(f, b){
    159       var r = b.getBoundingClientRect();
    160       f.style.top = (r.bottom + window.scrollY + 6) + 'px';
    161       f.style.left = Math.max(8, Math.min(r.left + window.scrollX, window.scrollX + window.innerWidth - 340)) + 'px';
    162     }
    163     document.addEventListener('click', function(e){
    164       if (e.target.closest && e.target.closest('.fedi-remote-cancel')) { close(); return; }
    165       if (current && e.target.closest && e.target.closest('.fedi-remote-form')) return; // click inside → keep
    166       var b = e.target.closest && e.target.closest('.fedi-remote-reply-btn');
    167       if (b) {
    168         e.preventDefault();
    169         if (currentBtn === b) { close(); return; }   // toggle off
    170         close();
    171         var f = document.createElement('form');
    172         f.className = 'fedi-remote-form';
    173         f.dataset.uri = b.getAttribute('data-fedi-uri') || '';
    174         f.innerHTML = '<input type="text" autocomplete="off" spellcheck="false">'
    175           + '<button type="submit" class="btn btn-primary fedi-remote-go" aria-label="ok">&rarr;</button>'
    176           + '<button type="button" class="fedi-remote-cancel" aria-label="x">&times;</button>';
    177         var _inp = f.querySelector('input');
    178         _inp.placeholder = b.getAttribute('data-fedi-ph') || 'mastodon.social';
    179         try { var _sv = localStorage.getItem('pcmsFediServer'); if (_sv) _inp.value = _sv; } catch(e){}
    180         document.body.appendChild(f);            // floating popover → no layout reflow
    181         place(f, b); current = f; currentBtn = b;
    182         _inp.focus(); _inp.select();
    183         return;
    184       }
    185       if (current) close(); // click anywhere else closes it
    186     });
    187     document.addEventListener('submit', function(e){
    188       var f = e.target.closest && e.target.closest('.fedi-remote-form');
    189       if (!f) return; e.preventDefault();
    190       go(f.querySelector('input').value, f.dataset.uri);
    191     });
    192     document.addEventListener('keydown', function(e){ if (e.key === 'Escape') close(); });
    193     window.addEventListener('scroll', close, true);
    194   })();
    195   </script>
     149  <%# Het remote-reply-veld zit in assets/js/mod/post.js. Inline script hier wordt
     150    door de CSP geweigerd zodra je deze pagina via een link binnen de site opent
     151    -- zie shaer-0i6. %>
    196152
    197153
Note: See TracChangeset for help on using the changeset viewer.