| "use strict"; |
| |
| const conversions = require("webidl-conversions"); |
| const utils = require("./utils.js"); |
| |
| exports.convert = function convert(value, { context = "The provided value" } = {}) { |
| if (!utils.isObject(value)) { |
| throw new TypeError(`${context} is not an object.`); |
| } |
| |
| function callTheUserObjectsOperation(node) { |
| let thisArg = utils.tryWrapperForImpl(this); |
| let O = value; |
| let X = O; |
| |
| if (typeof O !== "function") { |
| X = O["acceptNode"]; |
| if (typeof X !== "function") { |
| throw new TypeError(`${context} does not correctly implement NodeFilter.`); |
| } |
| thisArg = O; |
| } |
| |
| node = utils.tryWrapperForImpl(node); |
| |
| let callResult = Reflect.apply(X, thisArg, [node]); |
| |
| callResult = conversions["unsigned short"](callResult, { context: context }); |
| |
| return callResult; |
| } |
| |
| callTheUserObjectsOperation[utils.wrapperSymbol] = value; |
| callTheUserObjectsOperation.objectReference = value; |
| |
| return callTheUserObjectsOperation; |
| }; |
| |
| const exposed = new Set(["Window"]); |
| |
| exports.install = (globalObject, globalNames) => { |
| if (!globalNames.some(globalName => exposed.has(globalName))) { |
| return; |
| } |
| |
| const NodeFilter = () => { |
| throw new TypeError("Illegal invocation"); |
| }; |
| |
| Object.defineProperties(NodeFilter, { |
| FILTER_ACCEPT: { value: 1, enumerable: true }, |
| FILTER_REJECT: { value: 2, enumerable: true }, |
| FILTER_SKIP: { value: 3, enumerable: true }, |
| SHOW_ALL: { value: 0xffffffff, enumerable: true }, |
| SHOW_ELEMENT: { value: 0x1, enumerable: true }, |
| SHOW_ATTRIBUTE: { value: 0x2, enumerable: true }, |
| SHOW_TEXT: { value: 0x4, enumerable: true }, |
| SHOW_CDATA_SECTION: { value: 0x8, enumerable: true }, |
| SHOW_ENTITY_REFERENCE: { value: 0x10, enumerable: true }, |
| SHOW_ENTITY: { value: 0x20, enumerable: true }, |
| SHOW_PROCESSING_INSTRUCTION: { value: 0x40, enumerable: true }, |
| SHOW_COMMENT: { value: 0x80, enumerable: true }, |
| SHOW_DOCUMENT: { value: 0x100, enumerable: true }, |
| SHOW_DOCUMENT_TYPE: { value: 0x200, enumerable: true }, |
| SHOW_DOCUMENT_FRAGMENT: { value: 0x400, enumerable: true }, |
| SHOW_NOTATION: { value: 0x800, enumerable: true } |
| }); |
| |
| Object.defineProperty(globalObject, "NodeFilter", { |
| configurable: true, |
| writable: true, |
| value: NodeFilter |
| }); |
| }; |