blob: d159f5a249b437b20d92c4df042678fc347e8c20 [file] [log] [blame]
"use strict";
var nwmatcher = require("nwmatcher/src/nwmatcher-noqsa");
var memoizeQuery = require("../utils").memoizeQuery;
module.exports = function (core) {
[core.Document, core.DocumentFragment, core.Element].forEach(function (Class) {
Class.prototype.querySelector = memoizeQuery(function (selectors) {
return addNwmatcher(this).first(String(selectors), this);
});
Class.prototype.querySelectorAll = memoizeQuery(function (selectors) {
return new core.NodeList(addNwmatcher(this).select(String(selectors), this));
});
});
core.Element.prototype.matches = memoizeQuery(function (selectors) {
return addNwmatcher(this).match(this, selectors);
});
};
// nwmatcher gets `document.documentElement` at creation-time, so we have to initialize lazily, since in the initial
// stages of Document initialization, there is no documentElement present yet.
function addNwmatcher(parentNode) {
var document = parentNode._ownerDocument;
if (!document._nwmatcher) {
document._nwmatcher = nwmatcher({ document: document });
document._nwmatcher.configure({ UNIQUE_ID: false });
}
return document._nwmatcher;
}