Event dragging UX improvement: now hits days even through other elements.
This commit is contained in:
parent
57305e531b
commit
e13fc7fe9b
@ -307,19 +307,16 @@ function startLocalDrag(init, evt) {
|
|||||||
|
|
||||||
// Determine date under pointer: traverse DOM to find day cell carrying data-date attribute
|
// Determine date under pointer: traverse DOM to find day cell carrying data-date attribute
|
||||||
function getDateUnderPointer(x, y, el) {
|
function getDateUnderPointer(x, y, el) {
|
||||||
let cur = el
|
for (let cur = el; cur; cur = cur.parentElement)
|
||||||
while (cur) {
|
if (cur.dataset?.date) return { date: cur.dataset.date }
|
||||||
if (cur.dataset && cur.dataset.date) {
|
// The event overlay may block seeing the day under it, so we need a fallback
|
||||||
return { date: cur.dataset.date }
|
const overlayEl = weekOverlayRef.value
|
||||||
|
const container = overlayEl?.parentElement // .days-grid
|
||||||
|
if (container) {
|
||||||
|
for (const d of container.querySelectorAll('[data-date]')) {
|
||||||
|
const { left, right, top, bottom } = d.getBoundingClientRect()
|
||||||
|
if (y >= top && y <= bottom && x >= left && x <= right) return { date: d.dataset.date }
|
||||||
}
|
}
|
||||||
cur = cur.parentElement
|
|
||||||
}
|
|
||||||
// Fallback: elementFromPoint scan
|
|
||||||
const probe = document.elementFromPoint(x, y)
|
|
||||||
let p = probe
|
|
||||||
while (p) {
|
|
||||||
if (p.dataset && p.dataset.date) return { date: p.dataset.date }
|
|
||||||
p = p.parentElement
|
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user