summaryrefslogtreecommitdiff
path: root/school/node_modules/jsdom/lib/jsdom/living/node.js
diff options
context:
space:
mode:
Diffstat (limited to 'school/node_modules/jsdom/lib/jsdom/living/node.js')
-rw-r--r--school/node_modules/jsdom/lib/jsdom/living/node.js331
1 files changed, 0 insertions, 331 deletions
diff --git a/school/node_modules/jsdom/lib/jsdom/living/node.js b/school/node_modules/jsdom/lib/jsdom/living/node.js
deleted file mode 100644
index a0e41c0..0000000
--- a/school/node_modules/jsdom/lib/jsdom/living/node.js
+++ /dev/null
@@ -1,331 +0,0 @@
-"use strict";
-const { appendAttribute } = require("./attributes");
-const NODE_TYPE = require("./node-type");
-
-const orderedSetParse = require("./helpers/ordered-set").parse;
-const { createElement } = require("./helpers/create-element");
-const { HTML_NS, XMLNS_NS } = require("./helpers/namespaces");
-const { cloningSteps, domSymbolTree } = require("./helpers/internal-constants");
-const { asciiCaseInsensitiveMatch, asciiLowercase } = require("./helpers/strings");
-
-const HTMLCollection = require("./generated/HTMLCollection");
-
-exports.clone = (node, document, cloneChildren) => {
- if (document === undefined) {
- document = node._ownerDocument;
- }
-
- let copy;
- switch (node.nodeType) {
- case NODE_TYPE.DOCUMENT_NODE:
- // Can't use a simple `Document.createImpl` because of circular dependency issues :-/
- copy = node._cloneDocument();
- break;
-
- case NODE_TYPE.DOCUMENT_TYPE_NODE:
- copy = document.implementation.createDocumentType(node.name, node.publicId, node.systemId);
- break;
-
- case NODE_TYPE.ELEMENT_NODE:
- copy = createElement(
- document,
- node._localName,
- node._namespaceURI,
- node._prefix,
- node._isValue,
- false
- );
-
- for (const attribute of node._attributeList) {
- appendAttribute(copy, exports.clone(attribute, document));
- }
- break;
-
- case NODE_TYPE.ATTRIBUTE_NODE:
- copy = document._createAttribute({
- namespace: node._namespace,
- namespacePrefix: node._namespacePrefix,
- localName: node._localName,
- value: node._value
- });
- break;
-
- case NODE_TYPE.TEXT_NODE:
- copy = document.createTextNode(node._data);
- break;
-
- case NODE_TYPE.CDATA_SECTION_NODE:
- copy = document.createCDATASection(node._data);
- break;
-
- case NODE_TYPE.COMMENT_NODE:
- copy = document.createComment(node._data);
- break;
-
- case NODE_TYPE.PROCESSING_INSTRUCTION_NODE:
- copy = document.createProcessingInstruction(node.target, node._data);
- break;
-
- case NODE_TYPE.DOCUMENT_FRAGMENT_NODE:
- copy = document.createDocumentFragment();
- break;
- }
-
- if (node[cloningSteps]) {
- node[cloningSteps](copy, node, document, cloneChildren);
- }
-
- if (cloneChildren) {
- for (const child of domSymbolTree.childrenIterator(node)) {
- const childCopy = exports.clone(child, document, true);
- copy._append(childCopy);
- }
- }
-
- return copy;
-};
-
-// For the following, memoization is not applied here since the memoized results are stored on `this`.
-
-exports.listOfElementsWithClassNames = (classNames, root) => {
- // https://dom.spec.whatwg.org/#concept-getElementsByClassName
-
- const classes = orderedSetParse(classNames);
-
- if (classes.size === 0) {
- return HTMLCollection.createImpl(root._globalObject, [], { element: root, query: () => [] });
- }
-
- return HTMLCollection.createImpl(root._globalObject, [], {
- element: root,
- query: () => {
- const isQuirksMode = root._ownerDocument.compatMode === "BackCompat";
-
- return domSymbolTree.treeToArray(root, { filter(node) {
- if (node.nodeType !== NODE_TYPE.ELEMENT_NODE || node === root) {
- return false;
- }
-
- const { classList } = node;
- if (isQuirksMode) {
- for (const className of classes) {
- if (!classList.tokenSet.some(cur => asciiCaseInsensitiveMatch(cur, className))) {
- return false;
- }
- }
- } else {
- for (const className of classes) {
- if (!classList.tokenSet.contains(className)) {
- return false;
- }
- }
- }
-
- return true;
- } });
- }
- });
-};
-
-exports.listOfElementsWithQualifiedName = (qualifiedName, root) => {
- // https://dom.spec.whatwg.org/#concept-getelementsbytagname
-
- if (qualifiedName === "*") {
- return HTMLCollection.createImpl(root._globalObject, [], {
- element: root,
- query: () => domSymbolTree.treeToArray(root, {
- filter: node => node.nodeType === NODE_TYPE.ELEMENT_NODE && node !== root
- })
- });
- }
-
- if (root._ownerDocument._parsingMode === "html") {
- const lowerQualifiedName = asciiLowercase(qualifiedName);
-
- return HTMLCollection.createImpl(root._globalObject, [], {
- element: root,
- query: () => domSymbolTree.treeToArray(root, {
- filter(node) {
- if (node.nodeType !== NODE_TYPE.ELEMENT_NODE || node === root) {
- return false;
- }
-
- if (node._namespaceURI === HTML_NS) {
- return node._qualifiedName === lowerQualifiedName;
- }
-
- return node._qualifiedName === qualifiedName;
- }
- })
- });
- }
-
- return HTMLCollection.createImpl(root._globalObject, [], {
- element: root,
- query: () => domSymbolTree.treeToArray(root, {
- filter(node) {
- if (node.nodeType !== NODE_TYPE.ELEMENT_NODE || node === root) {
- return false;
- }
-
- return node._qualifiedName === qualifiedName;
- }
- })
- });
-};
-
-exports.listOfElementsWithNamespaceAndLocalName = (namespace, localName, root) => {
- // https://dom.spec.whatwg.org/#concept-getelementsbytagnamens
-
- if (namespace === "") {
- namespace = null;
- }
-
- if (namespace === "*" && localName === "*") {
- return HTMLCollection.createImpl(root._globalObject, [], {
- element: root,
- query: () => domSymbolTree.treeToArray(root, {
- filter: node => node.nodeType === NODE_TYPE.ELEMENT_NODE && node !== root
- })
- });
- }
-
- if (namespace === "*") {
- return HTMLCollection.createImpl(root._globalObject, [], {
- element: root,
- query: () => domSymbolTree.treeToArray(root, {
- filter(node) {
- if (node.nodeType !== NODE_TYPE.ELEMENT_NODE || node === root) {
- return false;
- }
-
- return node._localName === localName;
- }
- })
- });
- }
-
- if (localName === "*") {
- return HTMLCollection.createImpl(root._globalObject, [], {
- element: root,
- query: () => domSymbolTree.treeToArray(root, {
- filter(node) {
- if (node.nodeType !== NODE_TYPE.ELEMENT_NODE || node === root) {
- return false;
- }
-
- return node._namespaceURI === namespace;
- }
- })
- });
- }
-
- return HTMLCollection.createImpl(root._globalObject, [], {
- element: root,
- query: () => domSymbolTree.treeToArray(root, {
- filter(node) {
- if (node.nodeType !== NODE_TYPE.ELEMENT_NODE || node === root) {
- return false;
- }
-
- return node._localName === localName && node._namespaceURI === namespace;
- }
- })
- });
-};
-
-// https://dom.spec.whatwg.org/#converting-nodes-into-a-node
-// create a fragment (or just return a node for one item)
-exports.convertNodesIntoNode = (document, nodes) => {
- if (nodes.length === 1) { // note: I'd prefer to check instanceof Node rather than string
- return typeof nodes[0] === "string" ? document.createTextNode(nodes[0]) : nodes[0];
- }
- const fragment = document.createDocumentFragment();
- for (let i = 0; i < nodes.length; i++) {
- fragment._append(typeof nodes[i] === "string" ? document.createTextNode(nodes[i]) : nodes[i]);
- }
- return fragment;
-};
-
-// https://dom.spec.whatwg.org/#locate-a-namespace-prefix
-exports.locateNamespacePrefix = (element, namespace) => {
- if (element._namespaceURI === namespace && element._prefix !== null) {
- return element._prefix;
- }
-
- for (const attribute of element._attributeList) {
- if (attribute._namespacePrefix === "xmlns" && attribute._value === namespace) {
- return attribute._localName;
- }
- }
-
- if (element.parentElement !== null) {
- return exports.locateNamespacePrefix(element.parentElement, namespace);
- }
-
- return null;
-};
-
-// https://dom.spec.whatwg.org/#locate-a-namespace
-exports.locateNamespace = (node, prefix) => {
- switch (node.nodeType) {
- case NODE_TYPE.ELEMENT_NODE: {
- if (node._namespaceURI !== null && node._prefix === prefix) {
- return node._namespaceURI;
- }
-
- if (prefix === null) {
- for (const attribute of node._attributeList) {
- if (attribute._namespace === XMLNS_NS &&
- attribute._namespacePrefix === null &&
- attribute._localName === "xmlns") {
- return attribute._value !== "" ? attribute._value : null;
- }
- }
- } else {
- for (const attribute of node._attributeList) {
- if (attribute._namespace === XMLNS_NS &&
- attribute._namespacePrefix === "xmlns" &&
- attribute._localName === prefix) {
- return attribute._value !== "" ? attribute._value : null;
- }
- }
- }
-
- if (node.parentElement === null) {
- return null;
- }
-
- return exports.locateNamespace(node.parentElement, prefix);
- }
-
- case NODE_TYPE.DOCUMENT_NODE: {
- if (node.documentElement === null) {
- return null;
- }
-
- return exports.locateNamespace(node.documentElement, prefix);
- }
-
- case NODE_TYPE.DOCUMENT_TYPE_NODE:
- case NODE_TYPE.DOCUMENT_FRAGMENT_NODE: {
- return null;
- }
-
- case NODE_TYPE.ATTRIBUTE_NODE: {
- if (node._element === null) {
- return null;
- }
-
- return exports.locateNamespace(node._element, prefix);
- }
-
- default: {
- if (node.parentElement === null) {
- return null;
- }
-
- return exports.locateNamespace(node.parentElement, prefix);
- }
- }
-};