236d2af5d8fac5f0d395bb5d6f5b590e742c89c3c7128df7723bf0bf53af78eff378143d3a8a02ea3edfde5fdc0b1f2f31d2e081d5b019c4a680fa4dee9592 1.0 KB

1234567891011121314151617181920212223242526
  1. import { contains, elt, removeChildrenAndAdd } from "../util/dom.js"
  2. import { e_target } from "../util/event.js"
  3. export function widgetHeight(widget) {
  4. if (widget.height != null) return widget.height
  5. let cm = widget.doc.cm
  6. if (!cm) return 0
  7. if (!contains(document.body, widget.node)) {
  8. let parentStyle = "position: relative;"
  9. if (widget.coverGutter)
  10. parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"
  11. if (widget.noHScroll)
  12. parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"
  13. removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle))
  14. }
  15. return widget.height = widget.node.parentNode.offsetHeight
  16. }
  17. // Return true when the given mouse event happened in a widget
  18. export function eventInWidget(display, e) {
  19. for (let n = e_target(e); n != display.wrapper; n = n.parentNode) {
  20. if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") ||
  21. (n.parentNode == display.sizer && n != display.mover))
  22. return true
  23. }
  24. }