Skip to content

Commit a40a611

Browse files
committed
Fix d3.select(document) and d3.select(object).
Also add tests for d3_documentElement and d3_window so that they work for the three cases we care about: a node, a document and a window. For anything else they return undefined.
1 parent df3fbea commit a40a611

12 files changed

Lines changed: 95 additions & 14 deletions

File tree

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "d3",
3-
"version": "3.5.4",
3+
"version": "3.5.5",
44
"main": "d3.js",
55
"scripts": [
66
"d3.js"

component.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"animation",
1111
"canvas"
1212
],
13-
"version": "3.5.4",
13+
"version": "3.5.5",
1414
"main": "d3.js",
1515
"scripts": [
1616
"d3.js"

d3.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
!function() {
22
var d3 = {
3-
version: "3.5.4"
3+
version: "3.5.5"
44
};
55
var d3_arraySlice = [].slice, d3_array = function(list) {
66
return d3_arraySlice.call(list);
77
};
88
var d3_document = this.document;
99
function d3_documentElement(node) {
10-
return node && (node.ownerDocument || node.document).documentElement;
10+
return node && (node.ownerDocument || node.document || node).documentElement;
1111
}
1212
function d3_window(node) {
13-
return node && node.ownerDocument ? node.ownerDocument.defaultView : node;
13+
return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView);
1414
}
1515
if (d3_document) {
1616
try {

d3.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Package.describe({
44
name: "d3js:d3", // http://atmospherejs.com/d3js/d3
55
summary: "D3 (official): A JavaScript visualization library for HTML and SVG.",
6-
version: "3.5.4",
6+
version: "3.5.5",
77
git: "https://github.com/mbostock/d3.git"
88
});
99

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "d3",
3-
"version": "3.5.4",
3+
"version": "3.5.5",
44
"description": "A JavaScript visualization library for HTML and SVG.",
55
"keywords": [
66
"dom",

src/core/document.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
var d3_document = this.document;
22

33
function d3_documentElement(node) {
4-
return node && (node.ownerDocument || node.document).documentElement;
4+
return node
5+
&& (node.ownerDocument // node is a Node
6+
|| node.document // node is a Window
7+
|| node).documentElement; // node is a Document
58
}
69

710
function d3_window(node) {
8-
return node && node.ownerDocument ? node.ownerDocument.defaultView : node;
11+
return node
12+
&& ((node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
13+
|| (node.document && node) // node is a Window
14+
|| node.defaultView); // node is a Document
915
}

src/start.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
!function(){
2-
var d3 = {version: "3.5.4"}; // semver
2+
var d3 = {version: "3.5.5"}; // semver

test/core/document-test.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
var vows = require("vows"),
2+
load = require("../load"),
3+
assert = require("../assert");
4+
5+
var suite = vows.describe("document");
6+
7+
suite.addBatch({
8+
"d3_documentElement": {
9+
topic: load("core/document").document().expression("{document:document,window:window,d3_documentElement:d3_documentElement}"),
10+
"the document element exists": function(_) {
11+
assert.strictEqual(_.document.documentElement.nodeType, 1);
12+
assert.strictEqual(_.document.documentElement.nodeName, "HTML");
13+
assert.strictEqual(_.document.defaultView, _.window);
14+
},
15+
"given a node, returns the node’s document element": function(_) {
16+
assert.strictEqual(_.d3_documentElement(_.document.body), _.document.documentElement);
17+
},
18+
"given a document, returns the document’s document element": function(_) {
19+
assert.strictEqual(_.d3_documentElement(_.document), _.document.documentElement);
20+
},
21+
"given a window, returns the window’s document’s document element": function(_) {
22+
assert.strictEqual(_.d3_documentElement(_.window), _.document.documentElement);
23+
},
24+
"returns undefined for anything else": function(_) {
25+
assert.isUndefined(_.d3_documentElement({}));
26+
}
27+
},
28+
"d3_window": {
29+
topic: load("core/document").document().expression("{document:document,window:window,d3_window:d3_window}"),
30+
"the document element exists": function(_) {
31+
assert.strictEqual(_.document.documentElement.nodeType, 1);
32+
assert.strictEqual(_.document.documentElement.nodeName, "HTML");
33+
assert.strictEqual(_.document.defaultView, _.window);
34+
},
35+
"given a node, returns its owner document’s default view": function(_) {
36+
assert.strictEqual(_.d3_window(_.document.body), _.window);
37+
},
38+
"given a document, returns its default view": function(_) {
39+
assert.strictEqual(_.d3_window(_.document), _.window);
40+
},
41+
"given a window, returns the window": function(_) {
42+
assert.strictEqual(_.d3_window(_.window), _.window);
43+
},
44+
"returns undefined for anything else": function(_) {
45+
assert.isUndefined(_.d3_window({}));
46+
}
47+
}
48+
});
49+
50+
suite.export(module);

test/load.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ module.exports = function() {
1010
expression = "d3",
1111
sandbox = {console: console, Date: Date}; // so we can use deepEqual in tests
1212

13-
files.unshift("src/start");
14-
files.push("src/end");
13+
files.unshift("test/start");
1514

1615
function topic() {
1716
var callback = this.callback;

0 commit comments

Comments
 (0)