Changeset 1d76e0e in Klonkt
- Timestamp:
- 08/08/2026 09:51:53 PM (4 weeks ago)
- Branches:
- main
- Children:
- bfd9c73
- Parents:
- df70d8e
- git-author:
- Robin <roboburr@…> (08/08/2026 09:51:49 PM)
- git-committer:
- Robin <roboburr@…> (08/08/2026 09:51:53 PM)
- Location:
- src
- Files:
-
- 2 edited
- 1 moved
-
assets/js/mod/reply-editor.js (moved) (moved from src/assets/js/reply-editor.js ) (3 diffs)
-
routes/posts.js (modified) (3 diffs)
-
views/partials/reply-editor.ejs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/mod/reply-editor.js
rdf70d8e r1d76e0e 1 // Rijke reply-editor -- MODULE sinds shaer-nh2. 2 // 3 // Stond als <script src> onderaan partials/reply-editor.ejs. Bij een volledige 4 // laadbeurt ging dat goed (injectCspNonce zet er een nonce op), maar bij een 5 // htmx-navigatie draagt de partial de nonce van DAT verzoek terwijl het 6 // document die van zijn eigen laadbeurt heeft. De CSP is strict-dynamic, dus 7 // alleen die laatste telt -- en het script draaide niet. Gevolg: geen toolbar, 8 // geen .re-full, en op mobiel dus geen fullscreen-compose. 9 // 10 // Als module wordt hij door de bootstrap in de shell geladen, die WEL de juiste 11 // nonce heeft. Dat is bovendien de voorwaarde om straks code te DELEN met de 12 // posteditor: een los script kan niet importeren uit mod/lib.js. 13 1 14 // Rich reply editor — upgrades every form[data-re] (partials/reply-editor.ejs) 2 15 // from a plain textarea to a contenteditable with a small toolbar and, on … … 5 18 // before. On submit: `content` = editor HTML (server sanitizes), `text` = 6 19 // plain-text fallback. 7 (function () {8 'use strict';9 if (window.__replyEditorInit) return;10 window.__replyEditorInit = true;11 20 12 21 var MOBILE = '(max-width: 700px)'; 13 22 14 function init(form) {23 function initForm(form) { 15 24 if (form.__re) return; 16 25 form.__re = true; … … 206 215 } 207 216 208 function initAll() { 209 document.querySelectorAll('form[data-re]').forEach(init); 210 } 211 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', initAll); 212 else initAll(); 213 })(); 217 /** 218 * De bootstrap roept dit aan bij elke paginawissel waarop deze module actief 219 * is. Opnieuw scannen is veilig: init(form) heeft een eigen `__re`-vlag per 220 * FORMULIER, en na een htmx-wissel zijn de formulieren nieuw -- dus geen vlag, 221 * dus opnieuw opgewaardeerd. Precies wat je wilt. 222 */ 223 export function init() { 224 document.querySelectorAll('form[data-re]').forEach(initForm); 225 } -
src/routes/posts.js
rdf70d8e r1d76e0e 802 802 } 803 803 renderPage(req, res, 'pages/authorize-interaction', { 804 pageJs: 'authorize-interaction ',804 pageJs: 'authorize-interaction reply-editor', 805 805 pageTitleKey: 'fedi.remote_interact', // i18n: was hardcoded Dutch on non-NL sites 806 806 bodyClass: 'on-special', … … 949 949 : []).filter((o) => o['shaer:ward'] === gMe && o['shaer:needsMyAccept']); 950 950 renderPage(req, res, 'pages/messages', { 951 pageTitleKey: 'msg.title', bodyClass: 'on-special', pageJs: 'messages ', items, seenAt,951 pageTitleKey: 'msg.title', bodyClass: 'on-special', pageJs: 'messages reply-editor', items, seenAt, 952 952 hasMore, nextOffset: offset + FEED_PAGE, moreBase, guardianOffers, 953 953 success: req.query.success || null, error: req.query.error || null, … … 1530 1530 1531 1531 renderPage(req, res, 'pages/post', { 1532 pageJs: 'post ',1532 pageJs: 'post reply-editor', 1533 1533 post, 1534 1534 poll: ActivityPubService.ownPollView(post), -
src/views/partials/reply-editor.ejs
rdf70d8e r1d76e0e 3 3 4 4 Renders a plain <textarea name="text"> form that works without JS; the shared 5 /assets/js/reply-editor.js upgrades it to a rich contenteditable with a small5 mod/reply-editor.js upgrades it to a rich contenteditable with a small 6 6 toolbar, a language select and (on ≤700px) a full-screen compose overlay, 7 7 which is the right pattern on mobile. On submit the JS fills the hidden … … 83 83 <% if (!locals.__reAssets) { locals.__reAssets = 1; %> 84 84 <link rel="stylesheet" href="/assets/css/reply-editor.css"> 85 <script src="/assets/js/reply-editor.js" defer></script>86 85 <% } %>
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)