Ignore:
File:
1 edited

Legend:

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

    r0db68bd r22d2f5a8  
    147147    </section>
    148148  <% } %>
    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. %>
     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>
    152196
    153197
Note: See TracChangeset for help on using the changeset viewer.