Skip to content

Commit

Permalink
Isolate QuerySelector functions from prototype
Browse files Browse the repository at this point in the history
  • Loading branch information
iizukanao committed Mar 15, 2012
1 parent c57bdc4 commit dc263d6
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 17 deletions.
8 changes: 4 additions & 4 deletions lib/jsdom.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,15 @@ exports.jsdom = function (html, level, options) {
module.parent.filename;
}

if (options.features && options.features.QuerySelector) {
require("./jsdom/selectors/index").applyQuerySelectorPrototype(level);
}

var browser = exports.browserAugmentation(level, options),
doc = (browser.HTMLDocument) ?
new browser.HTMLDocument(options) :
new browser.Document(options);

if (options.features && options.features.QuerySelector) {
require("./jsdom/selectors/index").applyQuerySelector(doc, level);
}

features.applyDocumentFeatures(doc, options.features);

if (typeof html === 'undefined' || html === null) {
Expand Down
34 changes: 21 additions & 13 deletions lib/jsdom/selectors/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
var createSizzle = require("./sizzle");
exports.applyQuerySelectorPrototype = function(dom) {
exports.applyQuerySelector = function(doc, dom) {
var addSizzle = function(document) {

if (!document._sizzle) {
Expand All @@ -8,24 +8,32 @@ exports.applyQuerySelectorPrototype = function(dom) {
return document._sizzle;
};

dom.Document.prototype.querySelector = function(selector) {
doc.querySelector = function(selector) {
return addSizzle(this)(selector, this)[0];
};

dom.Document.prototype.querySelectorAll = function(selector) {
doc.querySelectorAll = function(selector) {
return new dom.NodeList(addSizzle(this)(selector, this));
};

dom.Element.prototype.querySelector = function(selector) {
return addSizzle(this.ownerDocument)(selector, this)[0];
};
var _createElement = doc.createElement;
doc.createElement = function(tagName) {
var element = _createElement.call(doc, tagName);

dom.Element.prototype.querySelectorAll = function(selector) {
var el = this;
if (!this.parentNode) {
el = this.ownerDocument.createElement("div");
el.appendChild(this);
}
return new dom.NodeList(addSizzle(this.ownerDocument)(selector, el.parentNode || el));
element.querySelector = function(selector) {
return addSizzle(this.ownerDocument)(selector, this)[0];
};

element.querySelectorAll = function(selector) {
var el = this;
if (!this.parentNode) {
el = this.ownerDocument.createElement("div");
el.appendChild(this);
}
return new dom.NodeList(addSizzle(this.ownerDocument)(selector, el.parentNode || el));
};

return element;
};

};

0 comments on commit dc263d6

Please sign in to comment.