dom_adapter.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. /**
  2. * DevExtreme (core/dom_adapter.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var _dependency_injector = require("./utils/dependency_injector");
  11. var _dependency_injector2 = _interopRequireDefault(_dependency_injector);
  12. var _common = require("./utils/common");
  13. function _interopRequireDefault(obj) {
  14. return obj && obj.__esModule ? obj : {
  15. "default": obj
  16. }
  17. }
  18. function _typeof(obj) {
  19. "@babel/helpers - typeof";
  20. return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
  21. return typeof obj
  22. } : function(obj) {
  23. return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
  24. }, _typeof(obj)
  25. }
  26. var ELEMENT_NODE = 1;
  27. var TEXT_NODE = 3;
  28. var DOCUMENT_NODE = 9;
  29. var nativeDOMAdapterStrategy = {
  30. querySelectorAll: function(element, selector) {
  31. return element.querySelectorAll(selector)
  32. },
  33. elementMatches: function(element, selector) {
  34. var _this = this;
  35. var matches = element.matches || element.matchesSelector || element.mozMatchesSelector || element.msMatchesSelector || element.oMatchesSelector || element.webkitMatchesSelector || function(selector) {
  36. var doc = element.document || element.ownerDocument;
  37. if (!doc) {
  38. return false
  39. }
  40. var items = _this.querySelectorAll(doc, selector);
  41. for (var i = 0; i < items.length; i++) {
  42. if (items[i] === element) {
  43. return true
  44. }
  45. }
  46. };
  47. return matches.call(element, selector)
  48. },
  49. createElement: function(tagName, context) {
  50. context = context || this._document;
  51. return context.createElement(tagName)
  52. },
  53. createElementNS: function(ns, tagName, context) {
  54. context = context || this._document;
  55. return context.createElementNS(ns, tagName)
  56. },
  57. createTextNode: function(text, context) {
  58. context = context || this._document;
  59. return context.createTextNode(text)
  60. },
  61. isNode: function(element) {
  62. return "object" === _typeof(element) && "nodeType" in element
  63. },
  64. isElementNode: function(element) {
  65. return element && element.nodeType === ELEMENT_NODE
  66. },
  67. isTextNode: function(element) {
  68. return element && element.nodeType === TEXT_NODE
  69. },
  70. isDocument: function(element) {
  71. return element && element.nodeType === DOCUMENT_NODE
  72. },
  73. removeElement: function(element) {
  74. var parentNode = element && element.parentNode;
  75. if (parentNode) {
  76. parentNode.removeChild(element)
  77. }
  78. },
  79. insertElement: function(parentElement, newElement, nextSiblingElement) {
  80. if (parentElement && newElement && parentElement !== newElement) {
  81. if (nextSiblingElement) {
  82. parentElement.insertBefore(newElement, nextSiblingElement)
  83. } else {
  84. parentElement.appendChild(newElement)
  85. }
  86. }
  87. },
  88. getAttribute: function(element, name) {
  89. return element.getAttribute(name)
  90. },
  91. setAttribute: function(element, name, value) {
  92. element.setAttribute(name, value)
  93. },
  94. removeAttribute: function(element, name) {
  95. element.removeAttribute(name)
  96. },
  97. setProperty: function(element, name, value) {
  98. element[name] = value
  99. },
  100. setText: function(element, text) {
  101. if (element) {
  102. element.textContent = text
  103. }
  104. },
  105. setClass: function(element, className, isAdd) {
  106. if (1 === element.nodeType && className) {
  107. if (element.classList) {
  108. if (isAdd) {
  109. element.classList.add(className)
  110. } else {
  111. element.classList.remove(className)
  112. }
  113. } else {
  114. var classNameSupported = "string" === typeof element.className;
  115. var elementClass = classNameSupported ? element.className : this.getAttribute(element, "class") || "";
  116. var classNames = elementClass.split(" ");
  117. var classIndex = classNames.indexOf(className);
  118. var resultClassName;
  119. if (isAdd && classIndex < 0) {
  120. resultClassName = elementClass ? elementClass + " " + className : className
  121. }
  122. if (!isAdd && classIndex >= 0) {
  123. classNames.splice(classIndex, 1);
  124. resultClassName = classNames.join(" ")
  125. }
  126. if (void 0 !== resultClassName) {
  127. if (classNameSupported) {
  128. element.className = resultClassName
  129. } else {
  130. this.setAttribute(element, "class", resultClassName)
  131. }
  132. }
  133. }
  134. }
  135. },
  136. setStyle: function(element, name, value) {
  137. element.style[name] = value || ""
  138. },
  139. _document: "undefined" === typeof document ? void 0 : document,
  140. getDocument: function() {
  141. return this._document
  142. },
  143. getActiveElement: function() {
  144. return this._document.activeElement
  145. },
  146. getBody: function() {
  147. return this._document.body
  148. },
  149. createDocumentFragment: function() {
  150. return this._document.createDocumentFragment()
  151. },
  152. getDocumentElement: function() {
  153. return this._document.documentElement
  154. },
  155. getLocation: function() {
  156. return this._document.location
  157. },
  158. getSelection: function() {
  159. return this._document.selection
  160. },
  161. getReadyState: function() {
  162. return this._document.readyState
  163. },
  164. getHead: function() {
  165. return this._document.head
  166. },
  167. hasDocumentProperty: function(property) {
  168. return property in this._document
  169. },
  170. listen: function(element, event, callback, options) {
  171. if (!element || !("addEventListener" in element)) {
  172. return _common.noop
  173. }
  174. element.addEventListener(event, callback, options);
  175. return function() {
  176. element.removeEventListener(event, callback)
  177. }
  178. }
  179. };
  180. module.exports = (0, _dependency_injector2.default)(nativeDOMAdapterStrategy);