Changeset 5f7dba2 in Klonkt for src/views/pages/post-edit.ejs
- Timestamp:
- 06/19/2026 12:02:20 PM (3 months ago)
- Branches:
- main
- Children:
- cbfbf88
- Parents:
- 408afc1
- File:
-
- 1 edited
-
src/views/pages/post-edit.ejs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/views/pages/post-edit.ejs
r408afc1 r5f7dba2 874 874 tabbalk, anders zou die zweven boven de actiebalk. */ 875 875 body:has(.post-edit-page) .audio-player { bottom: 0; } 876 877 /* Toetsenbord open op mobiel: de Opslaan/Annuleren-balk zweeft mee boven het878 toetsenbord (top wordt via JS o.b.v. de visual viewport gezet). Sticky bottom879 valt anders achter het toetsenbord → knoppen uit beeld. */880 body.kb-open .pe-actions {881 position: fixed;882 left: 0; right: 0;883 margin: 0;884 z-index: 1001;885 }886 876 </style> 887 877 … … 1577 1567 1578 1568 (function () { 1579 // De Opslaan/Annuleren-balk goed positioneren in twee situaties: 1580 // 1) Toetsenbord open (body.kb-open): balk FIXED pinnen aan de onderkant van de 1581 // ZICHTBARE viewport (boven het toetsenbord) — anders valt de sticky-bottom 1582 // balk achter het toetsenbord en zijn Opslaan/Annuleren uit beeld. 1583 // 2) Audiospeler speelt: balk net boven de fixed speler houden (z-index 1000). 1569 // De Opslaan/Annuleren-balk (position: sticky; bottom:0) net boven twee mogelijke 1570 // obstakels houden door een dynamische bottom-offset te zetten = het grootste van: 1571 // 1) de hoogte van het toetsenbord-deel dat de layout-viewport NIET dekt 1572 // (op iOS verschuift de visual viewport; op Android verkleint de layout- 1573 // viewport door interactive-widget=resizes-content → offset ≈ 0); 1574 // 2) de hoogte van de spelende audiospeler (fixed, z-index 1000). 1575 // We blijven bij sticky (geen fixed/top-gegoochel → geen balk midden in beeld). 1584 1576 var bar = document.querySelector('.pe-actions'); 1585 1577 if (!bar) return; 1586 1578 var vv = window.visualViewport; 1587 function fitAudio() {1579 function position() { 1588 1580 var ap = document.querySelector('.audio-player'); 1589 1581 var playing = document.body.classList.contains('has-audio-player') && 1590 1582 ap && getComputedStyle(ap).display !== 'none'; 1591 bar.style.bottom = playing ? Math.round(ap.getBoundingClientRect().height) + 'px' : ''; 1592 } 1593 function position() { 1594 if (document.body.classList.contains('kb-open') && vv) { 1595 bar.style.bottom = ''; 1596 bar.style.top = Math.round(vv.offsetTop + vv.height - bar.offsetHeight) + 'px'; 1597 } else { 1598 bar.style.top = ''; 1599 fitAudio(); 1600 } 1583 var audioOffset = playing ? Math.round(ap.getBoundingClientRect().height) : 0; 1584 var kbCovered = vv ? Math.max(0, Math.round(window.innerHeight - vv.height - vv.offsetTop)) : 0; 1585 var offset = Math.max(audioOffset, kbCovered); 1586 bar.style.bottom = offset ? offset + 'px' : ''; 1601 1587 } 1602 1588 position(); 1603 1589 window.addEventListener('resize', position); 1604 1590 if (vv) { vv.addEventListener('resize', position); vv.addEventListener('scroll', position); } 1605 // kb-open + has-audio-player wisselenvia een body-class → daarop reageren.1591 // has-audio-player wisselt via een body-class → daarop reageren. 1606 1592 try { new MutationObserver(position).observe(document.body, { attributes: true, attributeFilter: ['class'] }); } catch (_) {} 1607 1593 })();
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)