- Timestamp:
- 06/24/2026 03:09:22 PM (3 months ago)
- Branches:
- main
- Children:
- 914eb9f
- Parents:
- 749c183
- Location:
- src/views
- Files:
-
- 2 edited
-
pages/post.ejs (modified) (1 diff)
-
shell.ejs (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/views/pages/post.ejs
r749c183 r0dba092 102 102 (function(){ 103 103 if (window.__fediRemoteWired) return; window.__fediRemoteWired = true; 104 var current = null, currentBtn = null; 105 function close(){ if (current) { current.remove(); current = null; currentBtn = null; } } 104 106 function go(raw, uri){ 105 107 var d = (raw||'').trim().replace(/^@?[^@\s]*@/, '').replace(/^https?:\/\//i, '').replace(/\/.*$/, '').trim(); 106 108 if (d) location.href = 'https://' + d + '/authorize_interaction?uri=' + encodeURIComponent(uri||''); 107 109 } 108 function closeForm(f){ if (!f) return; if (f._btn) f._btn.style.display = ''; f.remove(); } 110 function place(f, b){ 111 var r = b.getBoundingClientRect(); 112 f.style.top = (r.bottom + window.scrollY + 6) + 'px'; 113 f.style.left = Math.max(8, Math.min(r.left + window.scrollX, window.scrollX + window.innerWidth - 340)) + 'px'; 114 } 109 115 document.addEventListener('click', function(e){ 110 var cancel = e.target.closest && e.target.closest('.fedi-remote-cancel');111 if (c ancel) { closeForm(cancel.closest('.fedi-remote-form')); return; }116 if (e.target.closest && e.target.closest('.fedi-remote-cancel')) { close(); return; } 117 if (current && e.target.closest && e.target.closest('.fedi-remote-form')) return; // click inside → keep 112 118 var b = e.target.closest && e.target.closest('.fedi-remote-reply-btn'); 113 if (!b) return; 114 e.preventDefault(); 115 closeForm(document.querySelector('.fedi-remote-form')); // close any open one (restores its button) 116 var f = document.createElement('form'); 117 f.className = 'fedi-remote-form'; 118 f.dataset.uri = b.getAttribute('data-fedi-uri') || ''; 119 f._btn = b; 120 f.innerHTML = '<input type="text" autocomplete="off" spellcheck="false">' 121 + '<button type="submit" class="btn btn-primary fedi-remote-go" aria-label="ok">→</button>' 122 + '<button type="button" class="fedi-remote-cancel" aria-label="x">×</button>'; 123 var inp = f.querySelector('input'); 124 inp.placeholder = b.getAttribute('data-fedi-ph') || '@name@server.social'; 125 b.style.display = 'none'; // replace the button in place → no layout jump 126 b.parentNode.insertBefore(f, b.nextSibling); 127 inp.focus(); 119 if (b) { 120 e.preventDefault(); 121 if (currentBtn === b) { close(); return; } // toggle off 122 close(); 123 var f = document.createElement('form'); 124 f.className = 'fedi-remote-form'; 125 f.dataset.uri = b.getAttribute('data-fedi-uri') || ''; 126 f.innerHTML = '<input type="text" autocomplete="off" spellcheck="false">' 127 + '<button type="submit" class="btn btn-primary fedi-remote-go" aria-label="ok">→</button>' 128 + '<button type="button" class="fedi-remote-cancel" aria-label="x">×</button>'; 129 f.querySelector('input').placeholder = b.getAttribute('data-fedi-ph') || '@name@server.social'; 130 document.body.appendChild(f); // floating popover → no layout reflow 131 place(f, b); current = f; currentBtn = b; 132 f.querySelector('input').focus(); 133 return; 134 } 135 if (current) close(); // click anywhere else closes it 128 136 }); 129 137 document.addEventListener('submit', function(e){ 130 138 var f = e.target.closest && e.target.closest('.fedi-remote-form'); 131 if (!f) return; 132 e.preventDefault(); 139 if (!f) return; e.preventDefault(); 133 140 go(f.querySelector('input').value, f.dataset.uri); 134 141 }); 142 document.addEventListener('keydown', function(e){ if (e.key === 'Escape') close(); }); 143 window.addEventListener('scroll', close, true); 135 144 })(); 136 145 </script> -
src/views/shell.ejs
r749c183 r0dba092 175 175 176 176 <!-- v9 stylesheet (full palette system) --> 177 <link rel="stylesheet" href="/assets/css/style.css?v=4 3">177 <link rel="stylesheet" href="/assets/css/style.css?v=44"> 178 178 179 179 <!-- Audio player styles: loaded on every page so the mini-player works
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)