import { CDATA_SECTION_NODE, COMMENT_NODE, DOCUMENT_NODE, DOCUMENT_FRAGMENT_NODE, TEXT_NODE, NODE_END } from './constants.js'; import {START, NEXT, PREV} from './symbols.js'; import {getEnd} from './utils.js'; export const isConnected = ({ownerDocument, parentNode}) => { while (parentNode) { if (parentNode === ownerDocument) return true; parentNode = parentNode.parentNode || parentNode.host; } return false; }; export const parentElement = ({parentNode}) => { if (parentNode) { switch (parentNode.nodeType) { case DOCUMENT_NODE: case DOCUMENT_FRAGMENT_NODE: return null; } } return parentNode; }; export const previousSibling = ({[PREV]: prev}) => { switch (prev ? prev.nodeType : 0) { case NODE_END: return prev[START]; case TEXT_NODE: case COMMENT_NODE: case CDATA_SECTION_NODE: return prev; } return null; }; export const nextSibling = node => { const next = getEnd(node)[NEXT]; return next && (next.nodeType === NODE_END ? null : next); };