1
0
mirror of https://github.com/S2-/minifyfromhtml.git synced 2025-08-07 14:10:04 +02:00
Files
minifyfromhtml/node_modules/jsdom/lib/jsdom/living/traversal/helpers.js
2018-05-05 14:29:20 +02:00

48 lines
1.3 KiB
JavaScript

"use strict";
const DOMException = require("domexception");
const idlUtils = require("../generated/utils");
const conversions = require("webidl-conversions");
// TODO: Once NodeFilter is ported to IDL method, use those instead.
exports.FILTER_ACCEPT = 1; // NodeFilter.FILTER_ACCEPT
exports.FILTER_REJECT = 2; // NodeFilter.FILTER_REJECT
exports.FILTER_SKIP = 3; // NodeFilter.FILTER_SKIP
exports.filter = (nodeIteratorOrTreeWalkerImpl, nodeImpl) => {
if (nodeIteratorOrTreeWalkerImpl._active) {
throw new DOMException("Recursive node filtering", "InvalidStateError");
}
const n = nodeImpl.nodeType - 1;
if (!((1 << n) & nodeIteratorOrTreeWalkerImpl.whatToShow)) {
return exports.FILTER_SKIP;
}
// Saving in a variable is important so we don't accidentally call it as a method later.
const { filter } = nodeIteratorOrTreeWalkerImpl;
if (filter === null) {
return exports.FILTER_ACCEPT;
}
nodeIteratorOrTreeWalkerImpl._active = true;
let result;
// https://github.com/whatwg/dom/issues/494
try {
if (typeof filter === "function") {
result = filter(idlUtils.wrapperForImpl(nodeImpl));
} else {
result = filter.acceptNode(idlUtils.wrapperForImpl(nodeImpl));
}
} finally {
nodeIteratorOrTreeWalkerImpl._active = false;
}
result = conversions["unsigned short"](result);
return result;
};