UNPKG

office-ui-fabric-react

Version:

Reusable React components for building experiences for Office 365.

102 lines (100 loc) 3.03 kB
"use strict"; /** * Sets the virtual parent of an element. * Pass `undefined` as the `parent` to clear the virtual parent. * * @export * @param {HTMLElement} child * @param {HTMLElement} parent */ function setVirtualParent(child, parent) { var virtualChild = child; var virtualParent = parent; if (!virtualChild._virtual) { virtualChild._virtual = { children: [] }; } var oldParent = virtualChild._virtual.parent; if (oldParent && oldParent !== parent) { // Remove the child from its old parent. var index = oldParent._virtual.children.indexOf(virtualChild); if (index > -1) { oldParent._virtual.children.splice(index, 1); } } virtualChild._virtual.parent = virtualParent || undefined; if (virtualParent) { if (!virtualParent._virtual) { virtualParent._virtual = { children: [] }; } virtualParent._virtual.children.push(virtualChild); } } exports.setVirtualParent = setVirtualParent; function getVirtualParent(child) { var parent; if (isVirtualElement(child)) { parent = child._virtual.parent; } return parent; } exports.getVirtualParent = getVirtualParent; /** * Gets the element which is the parent of a given element. * If `allowVirtuaParents` is `true`, this method prefers the virtual parent over * real DOM parent when present. * * @export * @param {HTMLElement} child * @param {boolean} [allowVirtualParents=true] * @returns {HTMLElement} */ function getParent(child, allowVirtualParents) { if (allowVirtualParents === void 0) { allowVirtualParents = true; } return allowVirtualParents && getVirtualParent(child) || child.parentElement; } exports.getParent = getParent; /** * Determines whether or not a parent element contains a given child element. * If `allowVirtualParents` is true, this method may return `true` if the child * has the parent in its virtual element hierarchy. * * @export * @param {HTMLElement} parent * @param {HTMLElement} child * @param {boolean} [allowVirtualParents=true] * @returns {boolean} */ function elementContains(parent, child, allowVirtualParents) { if (allowVirtualParents === void 0) { allowVirtualParents = true; } var isContained; if (allowVirtualParents) { isContained = false; while (child) { var nextParent = getParent(child); if (nextParent === parent) { isContained = true; break; } child = nextParent; } } else { isContained = parent.contains(child); } return isContained; } exports.elementContains = elementContains; /** * Determines whether or not an element has the virtual hierarchy extension. * * @param {(HTMLElement | IVirtualElement)} element * @returns {element is IVirtualElement} */ function isVirtualElement(element) { return !!element._virtual; } //# sourceMappingURL=dom.js.map