Changeset a4b903a in Klonkt for src/assets/js/mod/post-edit.js


Ignore:
Timestamp:
08/08/2026 09:32:09 PM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
7c38a09
Parents:
dc0da72
git-author:
Robin <roboburr@…> (08/08/2026 09:32:05 PM)
git-committer:
Robin <roboburr@…> (08/08/2026 09:32:09 PM)
Message:

De fullscreen-editor faalt niet langer zonder spoor (shaer-kd1)

Robins melding: op mobiel opent de fullscreen-editor niet. Ik kan het hier niet
reproduceren -- isTouch kijkt naar (pointer: coarse), niet naar breedte, dus
het venster verkleinen zet die tak niet aan, en een echt toestel met een login
heb ik niet. Dus geen fix op een vermoeden; wel de stilte weg waarin dit zich
verstopt.

WAAROM DIT OP TOUCH ZWAARDER WEEGT DAN HET KLINKT. Buiten fullscreen is de
toolbar daar VERBORGEN (@media (pointer: coarse) in pages/post-edit.ejs), en
het veld staat op contenteditable=false. De tik op het veld is dus de enige
ingang. Werkt die niet, dan is het niet "fullscreen doet het niet" maar "je
kunt op een telefoon niet typen". Op desktop valt hetzelfde defect niet op,
want daar typ je gewoon inline.

Drie dingen:

applyFs deed een KALE return als .pe-editor-frame ontbrak. Nu een

console.warn ernaast. Dat is het verschil tussen "er gebeurt
niets" en een aanwijzing.

vooraf op touch een waarschuwing als frame of veld ontbreekt, met de

gevolgtrekking erbij (niet kunnen typen), zodat wie het leest niet
hoeft te weten dat de toolbar daar verborgen is.

bedrading fsBtn, de Done-knop en de tik-handler gebruikten kaal

addEventListener, terwijl de rest van run() overal een
wired-vlag heeft. init() draait bij ELKE paginawissel, dus op
dezelfde DOM stapelden die drie zich op. Nu gelijkgetrokken.

Dat laatste is een echte fout, alleen niet degene die gemeld werd.

ONDERZOCHT EN AFGEVALLEN: editor kan daar niet null zijn -- run() breekt al
eerder af op if (!editor) return, en beide staan in dezelfde scope. Die
verdachte is dus weg.

Volgende stap ligt bij een echt toestel: opent de editor nu wel, dan was het
de stapelende bedrading; verschijnt de waarschuwing, dan ontbreekt het frame;
gebeurt er nog steeds niets zonder melding, dan zit het in de tik zelf en niet
in deze laag.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/assets/js/mod/post-edit.js

    rdc0da72 ra4b903a  
    582582  const editorFrame = document.querySelector('.pe-editor-frame');
    583583  const isTouch = !!(window.matchMedia && window.matchMedia('(pointer: coarse)').matches);
     584  // OP TOUCH IS DIT GEEN LUXE MAAR DE ENIGE INGANG (shaer-kd1). Buiten
     585  // fullscreen is de toolbar daar verborgen (@media (pointer: coarse) in
     586  // pages/post-edit.ejs), en het veld staat op contenteditable=false. Ontbreekt
     587  // een van deze twee elementen, dan kun je op een telefoon NIET TYPEN -- en tot
     588  // nu toe gebeurde dat zonder één spoor: applyFs deed een kale `return`.
     589  if (isTouch && (!editorFrame || !editor)) {
     590    console.warn('[post-edit] fullscreen onbereikbaar op touch:',
     591      'frame=' + !!editorFrame, 'editor=' + !!editor,
     592      '-- de toolbar is hier verborgen, dus dit betekent: niet kunnen typen');
     593  }
    584594
    585595  // On mobile the keyboard pushes the visible (visual) viewport up while
     
    601611  function isFs() { return !!(editorFrame && editorFrame.classList.contains('pe-fs')); }
    602612  function applyFs(on) {
    603     if (!editorFrame) return;
     613    if (!editorFrame) {
     614      // Was een kale `return`. Op touch is dit het verschil tussen "fullscreen
     615      // werkt niet" en "je kunt niet typen", en het gebeurde zonder spoor.
     616      console.warn('[post-edit] fullscreen kan niet: .pe-editor-frame ontbreekt');
     617      return;
     618    }
    604619    editorFrame.classList.toggle('pe-fs', on);
    605620    document.body.classList.toggle('pe-fs-open', on);
     
    648663  function toggleFullscreen() { if (isFs()) closeFs(); else openFs(); }
    649664  doc.on(window, 'popstate', function () { if (isFs()) applyFs(false); });
    650   if (fsBtn) fsBtn.addEventListener('click', toggleFullscreen);
     665  // __wired zoals overal in run(): init() draait bij ELKE paginawissel, en op
     666  // dezelfde DOM zou een kale addEventListener stapelen. Na een htmx-wissel is
     667  // het element nieuw en dus de vlag weg -- precies de bedoeling.
     668  if (fsBtn && !fsBtn.__fsWired) { fsBtn.__fsWired = true; fsBtn.addEventListener('click', toggleFullscreen); }
    651669  var fsDoneBtn = document.getElementById('pe-fs-done');
    652   if (fsDoneBtn) fsDoneBtn.addEventListener('click', closeFs);
     670  if (fsDoneBtn && !fsDoneBtn.__fsWired) { fsDoneBtn.__fsWired = true; fsDoneBtn.addEventListener('click', closeFs); }
    653671  doc.on(document, 'keydown', (e) => {
    654672    if (e.key === 'Escape' && isFs()) { e.preventDefault(); closeFs(); }
     
    658676  // not a text field there. One tap → fullscreen, where it becomes editable
    659677  // (toggleFullscreen toggles contenteditable). This prevents inline typing.
    660   if (isTouch) {
     678  if (isTouch && editor && !editor.__fsTapWired) {
     679    editor.__fsTapWired = true;
    661680    editor.setAttribute('contenteditable', 'false');
    662681    editor.classList.add('pe-tap-to-edit');
Note: See TracChangeset for help on using the changeset viewer.