Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/views/partials/profile-header.ejs

    r54ee51c rabc8959  
    160160</div>
    161161<% } %>
    162 <%# Het script van de profielkop staat in assets/js/mod/chrome.js: deze partial
    163     zit in de OOB-chrome en wordt bij elke htmx-navigatie opnieuw ingevoegd
    164     (shaer-bqr). %>
     162<script>
     163(function () {
     164  if (window.__pcmsFediFollowWired) return;
     165  window.__pcmsFediFollowWired = true;
     166  function modal() { return document.querySelector('.pf-follow'); }
     167  function closeM() { var m = modal(); if (m) m.classList.remove('is-open'); }
     168  function go() {
     169    var m = modal(); if (!m) return;
     170    var inp = m.querySelector('.pf-follow-input'), raw = inp ? inp.value : '';
     171    // Strip a full @user@host handle (and any scheme/path) down to the server host.
     172    var server = String(raw || '').trim().replace(/^@?[^@\s]*@/, '').replace(/^https?:\/\//i, '').replace(/\/.*$/, '').trim();
     173    if (!server) { if (inp) inp.focus(); return; }
     174    try { localStorage.setItem('pcmsFediServer', server); } catch (e) {}
     175    var actor = location.origin + '/ap/users/' + encodeURIComponent(m.getAttribute('data-actor-slug') || '');
     176    location.href = 'https://' + server + '/authorize_interaction?uri=' + encodeURIComponent(actor);
     177  }
     178  document.addEventListener('click', function (e) {
     179    var b = e.target.closest && e.target.closest('.profile-fedi-link');
     180    if (b) { e.preventDefault();
     181      var m = modal(); if (!m) return;
     182      m.setAttribute('data-actor-slug', b.getAttribute('data-fedi-actor-slug') || '');
     183      var inp = m.querySelector('.pf-follow-input');
     184      try { if (inp && !inp.value) inp.value = localStorage.getItem('pcmsFediServer') || ''; } catch (e2) {}
     185      m.classList.add('is-open');
     186      setTimeout(function () { if (inp) inp.focus(); }, 30);
     187      return;
     188    }
     189    if (e.target.closest && e.target.closest('.pf-follow-go')) { e.preventDefault(); go(); return; }
     190    if (e.target.closest && e.target.closest('.pf-follow-cancel')) { e.preventDefault(); closeM(); return; }
     191    var open = document.querySelector('.pf-follow.is-open');
     192    if (open && e.target === open) closeM(); /* click on backdrop */
     193  });
     194  document.addEventListener('keydown', function (e) {
     195    var m = document.querySelector('.pf-follow.is-open'); if (!m) return;
     196    if (e.key === 'Escape') { closeM(); }
     197    else if (e.key === 'Enter' && e.target.closest && e.target.closest('.pf-follow')) { e.preventDefault(); go(); }
     198  });
     199})();
     200
     201/* Profile summary: click the avatar to open a modal with photo + details. */
     202(function () {
     203  if (window.__pcmsLightboxWired) return; window.__pcmsLightboxWired = true;
     204  function close() { var m = document.querySelector('.pf-summary.is-open'); if (m) m.classList.remove('is-open'); }
     205  document.addEventListener('click', function (e) {
     206    if (e.target.closest && e.target.closest('.pf-summary-close')) { e.preventDefault(); close(); return; }
     207    var open = document.querySelector('.pf-summary.is-open');
     208    if (open && e.target === open) { close(); return; } /* click on backdrop */
     209    var t = e.target.closest && e.target.closest('.profile-photo[data-pf-summary]');
     210    if (!t) return;
     211    e.preventDefault();
     212    var root = (t.closest && t.closest('#pcms-chrome')) || document;
     213    var modal = root.querySelector('.pf-summary') || document.querySelector('.pf-summary');
     214    if (modal) modal.classList.add('is-open');
     215  });
     216  document.addEventListener('keydown', function (e) { if (e.key === 'Escape') close(); });
     217})();
     218</script>
    165219<% } %>
    166220
Note: See TracChangeset for help on using the changeset viewer.