Changeset 40cf2ef in Klonkt


Ignore:
Timestamp:
06/24/2026 02:55:01 PM (3 months ago)
Author:
Robin Genis <roboburr@…>
Branches:
main
Children:
c901131
Parents:
dc8e9bd
Message:

style(activitypub): inline address form for reply-via-fediverse (no browser prompt)

Clicking 'Reply via the fediverse' now opens a styled inline input (handle + go +
cancel) instead of the native prompt() dialog.

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

Location:
src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/assets/css/style.css

    rdc8e9bd r40cf2ef  
    44304430.post-fediverse-cta .fedi-remote-reply-btn svg { color: var(--accent, currentColor); }
    44314431.post-fediverse .comment-actions .fedi-remote-reply-btn { gap: .3rem; }
     4432
     4433/* Inline "reply via fediverse" address form (replaces the browser prompt) */
     4434.fedi-remote-form { display: inline-flex; align-items: center; gap: .4rem; margin: .55rem 0 0; flex-wrap: wrap; }
     4435.fedi-remote-form input {
     4436  padding: .45rem .7rem; border-radius: 9px; font: inherit; min-width: 240px;
     4437  border: 1px solid color-mix(in srgb, var(--ink, #000) 22%, transparent);
     4438  background: var(--paper, #fff); color: var(--ink, #000);
     4439}
     4440.fedi-remote-form input:focus { outline: 2px solid color-mix(in srgb, var(--accent, #888) 55%, transparent); outline-offset: 1px; }
     4441.fedi-remote-form .fedi-remote-go { padding: .45rem .8rem; }
     4442.fedi-remote-form .fedi-remote-cancel { background: none; border: none; color: var(--ink-soft, #888); cursor: pointer; font-size: 1.05rem; line-height: 1; padding: .25rem .4rem; }
     4443.fedi-remote-form .fedi-remote-cancel:hover { color: var(--ink, #000); }
  • src/views/pages/post.ejs

    rdc8e9bd r40cf2ef  
    102102  (function(){
    103103    if (window.__fediRemoteWired) return; window.__fediRemoteWired = true;
     104    function go(raw, uri){
     105      var d = (raw||'').trim().replace(/^@?[^@\s]*@/, '').replace(/^https?:\/\//i, '').replace(/\/.*$/, '').trim();
     106      if (d) location.href = 'https://' + d + '/authorize_interaction?uri=' + encodeURIComponent(uri||'');
     107    }
    104108    document.addEventListener('click', function(e){
     109      var cancel = e.target.closest && e.target.closest('.fedi-remote-cancel');
     110      if (cancel) { var f0 = cancel.closest('.fedi-remote-form'); if (f0) f0.remove(); return; }
    105111      var b = e.target.closest && e.target.closest('.fedi-remote-reply-btn');
    106112      if (!b) return;
    107       var d = prompt(b.getAttribute('data-fedi-prompt') || ''); if (!d) return;
    108       d = d.trim().replace(/^@?[^@\s]*@/, '').replace(/^https?:\/\//i, '').replace(/\/.*$/, '').trim();
    109       if (d) location.href = 'https://' + d + '/authorize_interaction?uri=' + encodeURIComponent(b.getAttribute('data-fedi-uri') || '');
     113      e.preventDefault();
     114      var mine = (b.nextElementSibling && b.nextElementSibling.classList && b.nextElementSibling.classList.contains('fedi-remote-form')) ? b.nextElementSibling : null;
     115      var any = document.querySelector('.fedi-remote-form'); if (any) any.remove();
     116      if (mine) return; // clicking again closes it
     117      var f = document.createElement('form');
     118      f.className = 'fedi-remote-form';
     119      f.dataset.uri = b.getAttribute('data-fedi-uri') || '';
     120      f.innerHTML = '<input type="text" placeholder="@jij@mastodon.social" autocomplete="off" spellcheck="false">'
     121        + '<button type="submit" class="btn btn-primary fedi-remote-go">&rarr;</button>'
     122        + '<button type="button" class="fedi-remote-cancel" aria-label="x">&times;</button>';
     123      b.parentNode.insertBefore(f, b.nextSibling);
     124      f.querySelector('input').focus();
     125    });
     126    document.addEventListener('submit', function(e){
     127      var f = e.target.closest && e.target.closest('.fedi-remote-form');
     128      if (!f) return;
     129      e.preventDefault();
     130      go(f.querySelector('input').value, f.dataset.uri);
    110131    });
    111132  })();
  • src/views/shell.ejs

    rdc8e9bd r40cf2ef  
    175175
    176176<!-- v9 stylesheet (full palette system) -->
    177 <link rel="stylesheet" href="/assets/css/style.css?v=40">
     177<link rel="stylesheet" href="/assets/css/style.css?v=41">
    178178
    179179<!-- Audio player styles: loaded on every page so the mini-player works
Note: See TracChangeset for help on using the changeset viewer.