27 lines
1.0 KiB
JavaScript
27 lines
1.0 KiB
JavaScript
|
import { contains, elt, removeChildrenAndAdd } from "../util/dom.js"
|
||
|
import { e_target } from "../util/event.js"
|
||
|
|
||
|
export function widgetHeight(widget) {
|
||
|
if (widget.height != null) return widget.height
|
||
|
let cm = widget.doc.cm
|
||
|
if (!cm) return 0
|
||
|
if (!contains(document.body, widget.node)) {
|
||
|
let parentStyle = "position: relative;"
|
||
|
if (widget.coverGutter)
|
||
|
parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"
|
||
|
if (widget.noHScroll)
|
||
|
parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"
|
||
|
removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle))
|
||
|
}
|
||
|
return widget.height = widget.node.parentNode.offsetHeight
|
||
|
}
|
||
|
|
||
|
// Return true when the given mouse event happened in a widget
|
||
|
export function eventInWidget(display, e) {
|
||
|
for (let n = e_target(e); n != display.wrapper; n = n.parentNode) {
|
||
|
if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") ||
|
||
|
(n.parentNode == display.sizer && n != display.mover))
|
||
|
return true
|
||
|
}
|
||
|
}
|