You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.0 KiB
JavaScript

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);
};