devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
177 lines (140 loc) • 5.69 kB
JavaScript
/* global document, Node */
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var injector = require("./utils/dependency_injector");
var noop = require("./utils/common").noop;
var nativeDOMAdapterStrategy = {
querySelectorAll: function querySelectorAll(element, selector) {
return element.querySelectorAll(selector);
},
elementMatches: function elementMatches(element, selector) {
var matches = element.matches || element.matchesSelector || element.mozMatchesSelector || element.msMatchesSelector || element.oMatchesSelector || element.webkitMatchesSelector || function (selector) {
var items = this.querySelectorAll(element.document || element.ownerDocument, selector);
for (var i = 0; i < items.length; i++) {
if (items[i] === element) {
return true;
}
}
}.bind(this);
return matches.call(element, selector);
},
createElement: function createElement(tagName, context) {
context = context || this._document;
return context.createElement(tagName);
},
createElementNS: function createElementNS(ns, tagName, context) {
context = context || this._document;
return context.createElementNS(ns, tagName);
},
createTextNode: function createTextNode(text, context) {
context = context || this._document;
return context.createTextNode(text);
},
isNode: function isNode(element) {
return (typeof element === "undefined" ? "undefined" : _typeof(element)) === "object" && "nodeType" in element;
},
isElementNode: function isElementNode(element) {
return element && element.nodeType === Node.ELEMENT_NODE;
},
isTextNode: function isTextNode(element) {
return element && element.nodeType === Node.TEXT_NODE;
},
isDocument: function isDocument(element) {
return element && element.nodeType === Node.DOCUMENT_NODE;
},
removeElement: function removeElement(element) {
var parentNode = element && element.parentNode;
if (parentNode) {
parentNode.removeChild(element);
}
},
insertElement: function insertElement(parentElement, newElement, nextSiblingElement) {
if (parentElement && newElement && parentElement !== newElement) {
if (nextSiblingElement) {
parentElement.insertBefore(newElement, nextSiblingElement);
} else {
parentElement.appendChild(newElement);
}
}
},
setAttribute: function setAttribute(element, name, value) {
element.setAttribute(name, value);
},
removeAttribute: function removeAttribute(element, name) {
element.removeAttribute(name);
},
setProperty: function setProperty(element, name, value) {
element[name] = value;
},
setText: function setText(element, text) {
if (element) {
element.textContent = text;
}
},
setClass: function setClass(element, className, isAdd) {
if (element.nodeType === 1 && className) {
if (element.classList) {
if (isAdd) {
element.classList.add(className);
} else {
element.classList.remove(className);
}
} else {
// IE9
var classNames = element.className.split(" ");
var classIndex = classNames.indexOf(className);
if (isAdd && classIndex < 0) {
element.className = element.className ? element.className + " " + className : className;
}
if (!isAdd && classIndex >= 0) {
classNames.splice(classIndex, 1);
element.className = classNames.join(" ");
}
}
}
},
setStyle: function setStyle(element, name, value) {
element.style[name] = value || '';
},
_document: typeof document === "undefined" ? undefined : document,
getDocument: function getDocument() {
return this._document;
},
getActiveElement: function getActiveElement() {
return this._document.activeElement;
},
getBody: function getBody() {
return this._document.body;
},
createDocumentFragment: function createDocumentFragment() {
return this._document.createDocumentFragment();
},
getDocumentElement: function getDocumentElement() {
return this._document.documentElement;
},
getLocation: function getLocation() {
return this._document.location;
},
getSelection: function getSelection() {
return this._document.selection;
},
getReadyState: function getReadyState() {
return this._document.readyState;
},
getHead: function getHead() {
return this._document.head;
},
hasDocumentProperty: function hasDocumentProperty(property) {
return property in this._document;
},
listen: function listen(element, event, callback, options) {
if (!element || !("addEventListener" in element)) {
return noop;
}
element.addEventListener(event, callback, options);
return function () {
element.removeEventListener(event, callback);
};
}
};
module.exports = injector(nativeDOMAdapterStrategy);
;