devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
162 lines (160 loc) • 5.93 kB
JavaScript
/**
* DevExtreme (cjs/__internal/core/m_dom_adapter.js)
* Version: 24.2.6
* Build date: Mon Mar 17 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.domAdapter = exports.default = void 0;
var _common = require("../../core/utils/common");
var _dependency_injector = _interopRequireDefault(require("../../core/utils/dependency_injector"));
var _shadow_dom = require("../../core/utils/shadow_dom");
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
const ELEMENT_NODE = 1;
const TEXT_NODE = 3;
const DOCUMENT_NODE = 9;
const DOCUMENT_FRAGMENT_NODE = 11;
const nativeDOMAdapterStrategy = {
querySelectorAll: (element, selector) => element.querySelectorAll(selector),
elementMatches(element, selector) {
const matches = element.matches || element.matchesSelector || element.mozMatchesSelector || element.msMatchesSelector || element.oMatchesSelector || element.webkitMatchesSelector || (selector => {
const doc = element.document || element.ownerDocument;
if (!doc) {
return false
}
const items = this.querySelectorAll(doc, selector);
for (let i = 0; i < items.length; i++) {
if (items[i] === element) {
return true
}
}
});
return matches.call(element, selector)
},
createElement(tagName, context) {
context = context ?? this._document;
return context.createElement(tagName)
},
createElementNS(ns, tagName, context) {
context = context || this._document;
return context.createElementNS(ns, tagName)
},
createTextNode(text, context) {
context = context || this._document;
return context.createTextNode(text)
},
createAttribute(text, context) {
context = context || this._document;
return context.createAttribute(text)
},
isNode: element => !!element && "object" === typeof element && "nodeType" in element && "nodeName" in element,
isElementNode: element => !!element && 1 === element.nodeType,
isTextNode: element => element && 3 === element.nodeType,
isDocument: element => element && 9 === element.nodeType,
isDocumentFragment: element => element && 11 === element.nodeType,
removeElement(element) {
const parentNode = element && element.parentNode;
if (parentNode) {
parentNode.removeChild(element)
}
},
insertElement(parentElement, newElement, nextSiblingElement) {
if (parentElement && newElement && parentElement !== newElement) {
if (nextSiblingElement) {
parentElement.insertBefore(newElement, nextSiblingElement)
} else {
parentElement.appendChild(newElement)
}
}
},
getAttribute: (element, name) => element.getAttribute(name),
setAttribute(element, name, value) {
if ("style" === name) {
element.style.cssText = value
} else {
element.setAttribute(name, value)
}
},
removeAttribute(element, name) {
element.removeAttribute(name)
},
setProperty(element, name, value) {
element[name] = value
},
setText(element, text) {
if (element) {
element.textContent = text
}
},
setClass(element, className, isAdd) {
if (1 === element.nodeType && className) {
isAdd ? element.classList.add(className) : element.classList.remove(className)
}
},
setStyle(element, name, value) {
element.style[name] = value || ""
},
_document: "undefined" === typeof document ? void 0 : document,
getDocument() {
return this._document
},
getActiveElement(element) {
const activeElementHolder = this.getRootNode(element);
return activeElementHolder.activeElement
},
getRootNode(element) {
var _element$getRootNode;
return (null === element || void 0 === element || null === (_element$getRootNode = element.getRootNode) || void 0 === _element$getRootNode ? void 0 : _element$getRootNode.call(element)) ?? this._document
},
getBody() {
return this._document.body
},
createDocumentFragment() {
return this._document.createDocumentFragment()
},
getDocumentElement() {
return this._document.documentElement
},
getLocation() {
return this._document.location
},
getSelection() {
return this._document.selection
},
getReadyState() {
return this._document.readyState
},
getHead() {
return this._document.head
},
hasDocumentProperty(property) {
return property in this._document
},
listen(element, event, callback, options) {
if (!element || !("addEventListener" in element)) {
return _common.noop
}
element.addEventListener(event, callback, options);
return () => {
element.removeEventListener(event, callback)
}
},
elementsFromPoint(x, y, element) {
const activeElementHolder = this.getRootNode(element);
if (activeElementHolder.host) {
return (0, _shadow_dom.getShadowElementsFromPoint)(x, y, activeElementHolder)
}
return activeElementHolder.elementsFromPoint(x, y)
}
};
const domAdapter = exports.domAdapter = (0, _dependency_injector.default)(nativeDOMAdapterStrategy);
var _default = exports.default = domAdapter;