Skip to content

Commit

Permalink
moved the QuerySelector functionality out of browser as many librarie…
Browse files Browse the repository at this point in the history
…s sniff for the functionality.
  • Loading branch information
tmpvar committed Dec 29, 2010
1 parent 8d27b57 commit e2f13f5
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 47 deletions.
10 changes: 8 additions & 2 deletions lib/jsdom.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,19 @@ exports.__defineGetter__('version', function() {

exports.jsdom = function (html, level, options) {
options = options || {};
level = level || exports.defaultLevel;

if (!options.url) {
options.url = module.parent.id == 'jsdom' ?
module.parent.parent.filename :
module.parent.filename;
}

var browser = exports.browserAugmentation(level || exports.defaultLevel, options),
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);
Expand Down Expand Up @@ -57,7 +63,7 @@ exports.availableDocumentFeatures = [
exports.defaultDocumentFeatures = {
"FetchExternalResources" : ['script'/*, 'img', 'css', 'frame', 'link'*/],
"ProcessExternalResources" : ['script'/*, 'frame', 'iframe'*/],
"QuerySelector" : [/*1.0, 2.0*/]
"QuerySelector" : false
};

exports.applyDocumentFeatures = function(doc, features) {
Expand Down
45 changes: 7 additions & 38 deletions lib/jsdom/browser/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,17 @@ exports.windowAugmentation = function(dom, options) {

if (!options.document) {
var browser = browserAugmentation(dom, options);

if (options.features && options.features.QuerySelector) {
require(__dirname + "/../selectors/index").applyQuerySelectorPrototype(browser);
}

options.document = (browser.HTMLDocument) ?
new browser.HTMLDocument(options) :
new browser.Document(options);



options.document.write('<html><head></head><body></body></html>');
}

Expand Down Expand Up @@ -234,44 +241,6 @@ var browserAugmentation = exports.browserAugmentation = function(dom, options) {
return new dom.NodeList(this.ownerDocument || this, dom.mapper(this, filterByClassName));
};

var Sizzle = require("../selectors").Sizzle;

dom.Document.prototype.querySelector = function(selector) {
if (this.implementation.hasFeature("QuerySelector", "1.0")) {
return Sizzle(selector, this)[0];
}
};

dom.Document.prototype.querySelectorAll = function(selector) {
if (this.implementation.hasFeature("QuerySelector", "1.0")) {
var self = this;
return new dom.NodeList(self, function() {
return Sizzle(selector, self);
});
}
return [];
};

dom.Element.prototype.querySelector = function(selector) {
if (this.ownerDocument &&
this.ownerDocument.implementation.hasFeature("QuerySelector", "1.0"))
{
return Sizzle(selector, this)[0];
}
};

dom.Element.prototype.querySelectorAll = function(selector) {
if (this.ownerDocument &&
this.ownerDocument.implementation.hasFeature("QuerySelector", "1.0"))
{
var self = this;
return new dom.NodeList(self.ownerDocument, function() {
return Sizzle(selector, self);
});
}
return [];
};

dom.Element.prototype.__defineGetter__('sourceIndex', function() {
/*
* According to QuirksMode:
Expand Down
13 changes: 9 additions & 4 deletions lib/jsdom/level2/html.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,9 @@ core.resourceLoader = {
return URL.resolve(baseUrl, path).replace(/^file:\/\//, '');
},
download: function(url, callback) {
var path = url.pathname + (url.search || ''),
client = http.createClient(url.port || 80, url.hostname),
request = client.request('GET', path, {'host': url.hostname });
var path = url.pathname + (url.search || ''),
client = http.createClient(url.port || 80, url.hostname),
request = client.request('GET', path, {'host': url.hostname });

request.on('response', function (response) {
response.setEncoding('utf8');
Expand All @@ -79,7 +79,12 @@ core.resourceLoader = {
data += chunk.toString();
});
response.on('end', function() {
callback(null, data);
if ([301, 302, 303, 307].indexOf(response.statusCode) > -1) {
var redirect = URL.resolve(url, response.headers["location"])
core.resourceLoader.download(redirect, callback);
} else {
callback(null, data);
}
});
});
request.end();
Expand Down
25 changes: 24 additions & 1 deletion lib/jsdom/selectors/index.js
Original file line number Diff line number Diff line change
@@ -1 +1,24 @@
exports.Sizzle = require("./sizzle").Sizzle;
var Sizzle = require("./sizzle").Sizzle;
exports.applyQuerySelectorPrototype = function(dom) {
dom.Document.prototype.querySelector = function(selector) {
return Sizzle(selector, this)[0];
};

dom.Document.prototype.querySelectorAll = function(selector) {
var self = this;
return new dom.NodeList(self, function() {
return Sizzle(selector, self);
});
};

dom.Element.prototype.querySelector = function(selector) {
return Sizzle(selector, this)[0];
};

dom.Element.prototype.querySelectorAll = function(selector) {
var self = this;
return new dom.NodeList(self.ownerDocument, function() {
return Sizzle(selector, self);
});
};
};
4 changes: 2 additions & 2 deletions test/jsdom/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ exports.tests = {
var html = '<html><body><div id="main"><p>Foo</p><p>Bar</p></div></body></html>',
document = jsdom.jsdom(html, null, {
features : {
'QuerySelector' : ['1.0']
'QuerySelector' : true
}
}),
div = document.body.children.item(0);
Expand All @@ -165,7 +165,7 @@ exports.tests = {
var html = '<html><body><div id="main"><p>Foo</p><p>Bar</p></div></body></html>',
document = jsdom.jsdom(html, null, {
features : {
'QuerySelector' : ['1.0']
'QuerySelector' : true
}
}),
div = document.body.children.item(0),
Expand Down

0 comments on commit e2f13f5

Please sign in to comment.