d3-selection
Advanced tools
Comparing version 0.2.0 to 0.3.0
@@ -1,59 +0,25 @@ | ||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.d3 = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
(function (global){ | ||
var d3 = module.exports = global.d3 || (global.d3 = {}), | ||
Map = global.Map || (Map = function() {}, Map.prototype = {set: function(k, v) { this["$" + k] = v; return this; }, get: function(k) { return this["$" + k]; }, has: function(k) { return "$" + k in this; }}, Map), | ||
valueOf = function(value) { return function() { return value; }; }, | ||
selectorOf = function(selector) { return function() { return this.querySelector(selector); }; }, | ||
selectorAllOf = function(selector) { return function() { return this.querySelectorAll(selector); }; }, | ||
filterOf = function(selector) { return function() { return this.matches(selector); }; }, | ||
filterEvents = new Map, | ||
noop = function() {}, | ||
ascending = function(a, b) { return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; }, | ||
collapse = function(string) { return string.trim().replace(/\s+/g, " "); }, | ||
requote = function(string) { return string.replace(requoteRe, "\\$&"); }, | ||
requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g, | ||
bug44083 = global.navigator && /WebKit/.test(global.navigator.userAgent) ? -1 : 0; // https://bugs.webkit.org/show_bug.cgi?id=44083 | ||
(function(document) { | ||
if (!document) return; | ||
var element = document.documentElement; | ||
if (!("onmouseenter" in element)) { | ||
filterEvents.set("mouseenter", "mouseover").set("mouseleave", "mouseout"); | ||
} | ||
if (!element.matches) { | ||
var vendorMatches = element.webkitMatchesSelector || element.msMatchesSelector || element.mozMatchesSelector || element.oMatchesSelector; | ||
filterOf = function(selector) { return function() { return vendorMatches.call(this, selector); }; }; | ||
} | ||
})(global.document); | ||
d3.namespaces = (new Map) | ||
.set("svg", "http://www.w3.org/2000/svg") | ||
.set("xhtml", "http://www.w3.org/1999/xhtml") | ||
.set("xlink", "http://www.w3.org/1999/xlink") | ||
.set("xml", "http://www.w3.org/XML/1998/namespace") | ||
.set("xmlns", "http://www.w3.org/2000/xmlns/"); | ||
d3.namespace = function(name) { | ||
var i = name.indexOf(":"), prefix = name; | ||
if (i >= 0) prefix = name.slice(0, i), name = name.slice(i + 1); | ||
return d3.namespaces.has(prefix) ? {space: d3.namespaces.get(prefix), local: name} : name; | ||
}; | ||
// When depth = 1, root = [Node, …]. | ||
// When depth = 2, root = [[Node, …], …]. | ||
// When depth = 3, root = [[[Node, …], …], …]. etc. | ||
// Note that [Node, …] and NodeList are used interchangeably; see arrayify. | ||
function Selection(root, depth) { | ||
this._root = root; | ||
this._depth = depth; | ||
this._enter = this._update = this._exit = null; | ||
if (!this.Map) { | ||
Map = function() {}; | ||
Map.prototype = { | ||
set: function(k, v) { this["$" + k] = v; return this; }, | ||
get: function(k) { return this["$" + k]; }, | ||
has: function(k) { return "$" + k in this; } | ||
}; | ||
} | ||
d3.selection = Selection; | ||
(function(global) { | ||
"use strict"; | ||
var sourceEvent = function() { | ||
var event = global.d3.event, source; | ||
while (source = event.sourceEvent) event = source; | ||
return event; | ||
}; | ||
Selection.prototype = { | ||
var selectorOf = function(selector) { | ||
return function() { | ||
return this.querySelector(selector); | ||
}; | ||
}; | ||
// The selector may either be a selector string (e.g., ".foo") | ||
// or a function that optionally returns the node to select. | ||
select: function(selector) { | ||
var selection_select = function(selector) { | ||
var depth = this._depth, | ||
@@ -104,8 +70,11 @@ stack = new Array(depth * 2); | ||
return new Selection(visit(this._root, this._update && this._update._root, depth), depth); | ||
}, | ||
}; | ||
// The selector may either be a selector string (e.g., ".foo") | ||
// or a function that optionally returns an array of nodes to select. | ||
// This is the only operation that increases the depth of a selection. | ||
selectAll: function(selector) { | ||
var selectorAllOf = function(selector) { | ||
return function() { | ||
return this.querySelectorAll(selector); | ||
}; | ||
}; | ||
var selection_selectAll = function(selector) { | ||
var depth = this._depth, | ||
@@ -151,7 +120,5 @@ stack = new Array(depth * 2); | ||
return new Selection(visit(this._root, depth), depth + 1); | ||
}, | ||
}; | ||
// The filter may either be a selector string (e.g., ".foo") | ||
// or a function that returns a boolean. | ||
filter: function(filter) { | ||
var selection_filter = function(filter) { | ||
var depth = this._depth, | ||
@@ -199,4 +166,18 @@ stack = new Array(depth * 2); | ||
return new Selection(visit(this._root, depth), depth); | ||
}, | ||
}; | ||
var filterOf = function(selector) { | ||
return function() { | ||
return this.matches(selector); | ||
}; | ||
}; | ||
if (global.document) { | ||
var selection_filter__element = document.documentElement; | ||
if (!selection_filter__element.matches) { | ||
var vendorMatches = selection_filter__element.webkitMatchesSelector || selection_filter__element.msMatchesSelector || selection_filter__element.mozMatchesSelector || selection_filter__element.oMatchesSelector; | ||
filterOf = function(selector) { return function() { return vendorMatches.call(this, selector); }; }; | ||
} | ||
} | ||
// The value may either be an array or a function that returns an array. | ||
@@ -206,3 +187,3 @@ // An optional key function may be specified to control how data is bound; | ||
// Or, if no arguments are specified, this method returns all bound data. | ||
data: function(value, key) { | ||
var selection_data = function(value, key) { | ||
if (!value) { | ||
@@ -365,88 +346,116 @@ var data = new Array(this.size()), i = -1; | ||
return this; | ||
}, | ||
}; | ||
// Lazily constructs the enter selection for this (update) selection. | ||
// Until this selection is joined to data, the enter selection will be empty. | ||
enter: function() { | ||
if (this._enter) return this._enter; | ||
function EnterNode(parent, datum) { | ||
this.ownerDocument = parent.ownerDocument; | ||
this.namespaceURI = parent.namespaceURI; | ||
this._next = null; | ||
this._parent = parent; | ||
this.__data__ = datum; | ||
} | ||
function visit(nodes, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node, | ||
enter = new Array(n); | ||
EnterNode.prototype = { | ||
appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, | ||
insertBefore: function(child, next) { return this._parent.insertBefore(child, next || this._next); } | ||
}; | ||
if (--depth) { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
enter[i] = visit(node, depth); | ||
} | ||
function valueOf(value) { | ||
return function() { | ||
return value; | ||
}; | ||
} | ||
// The leaf groups of the selection hierarchy are initially NodeList, | ||
// and then lazily converted to arrays when mutation is required. | ||
var arrayify = function(selection) { | ||
return selection._root = arrayifyNode(selection._root, selection._depth); | ||
}; | ||
function arrayifyNode(nodes, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node; | ||
if (--depth) { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
nodes[i] = arrayifyNode(node, depth); | ||
} | ||
} | ||
} | ||
enter._parent = nodes._parent; | ||
return enter; | ||
else if (!Array.isArray(nodes)) { | ||
var array = new Array(n); | ||
while (++i < n) array[i] = nodes[i]; | ||
array._parent = nodes._parent; | ||
nodes = array; | ||
} | ||
this._enter = new Selection(visit(arrayify(this), this._depth), this._depth); | ||
this._enter._update = this; | ||
return this._enter; | ||
}, | ||
return nodes; | ||
} | ||
// Lazily constructs the exit selection for this (update) selection. | ||
// Until this selection is joined to data, the exit selection will be empty. | ||
exit: function() { | ||
var emptyOf = function(selection) { | ||
return new Selection(emptyNode(arrayify(selection), selection._depth), selection._depth); | ||
}; | ||
function visit(nodes, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node, | ||
exit = new Array(n); | ||
function emptyNode(nodes, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node, | ||
empty = new Array(n); | ||
if (--depth) { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
exit[i] = visit(node, depth); | ||
} | ||
if (--depth) { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
empty[i] = emptyNode(node, depth); | ||
} | ||
} | ||
} | ||
exit._parent = nodes._parent; | ||
return exit; | ||
empty._parent = nodes._parent; | ||
return empty; | ||
} | ||
var selection_enter = function() { | ||
if (!this._enter) { | ||
this._enter = emptyOf(this); | ||
this._enter._update = this; | ||
} | ||
return this._enter; | ||
}; | ||
return this._exit || (this._exit = new Selection(visit(arrayify(this), this._depth), this._depth)); | ||
}, | ||
var selection_exit = function() { | ||
return this._exit || (this._exit = emptyOf(this)); | ||
}; | ||
order: function() { | ||
var selection_order = function() { | ||
orderNode(this._root, this._depth); | ||
return this; | ||
}; | ||
function visit(nodes, depth) { | ||
var i = nodes.length, | ||
node, | ||
next; | ||
function orderNode(nodes, depth) { | ||
var i = nodes.length, | ||
node, | ||
next; | ||
if (--depth) { | ||
while (--i >= 0) { | ||
if (node = nodes[i]) { | ||
visit(node, depth); | ||
} | ||
if (--depth) { | ||
while (--i >= 0) { | ||
if (node = nodes[i]) { | ||
orderNode(node, depth); | ||
} | ||
} | ||
} | ||
else { | ||
next = nodes[--i]; | ||
while (--i >= 0) { | ||
if (node = nodes[i]) { | ||
if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); | ||
next = node; | ||
} | ||
else { | ||
next = nodes[--i]; | ||
while (--i >= 0) { | ||
if (node = nodes[i]) { | ||
if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); | ||
next = node; | ||
} | ||
} | ||
} | ||
} | ||
visit(this._root, this._depth); | ||
return this; | ||
}, | ||
sort: function(comparator) { | ||
var selection_sort = function(comparator) { | ||
if (!comparator) comparator = ascending; | ||
@@ -477,56 +486,59 @@ | ||
return this.order(); | ||
}, | ||
}; | ||
call: function() { | ||
function ascending(a, b) { | ||
return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; | ||
} | ||
var selection_call = function() { | ||
var callback = arguments[0]; | ||
callback.apply(arguments[0] = this, arguments); | ||
return this; | ||
}, | ||
}; | ||
nodes: function() { | ||
var selection_nodes = function() { | ||
var nodes = new Array(this.size()), i = -1; | ||
this.each(function() { nodes[++i] = this; }); | ||
return nodes; | ||
}, | ||
}; | ||
node: function() { | ||
var selection_node = function() { | ||
return firstNode(this._root, this._depth); | ||
}; | ||
function visit(nodes, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node; | ||
function firstNode(nodes, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node; | ||
if (--depth) { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
if (node = visit(node, depth)) { | ||
return node; | ||
} | ||
if (--depth) { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
if (node = firstNode(node, depth)) { | ||
return node; | ||
} | ||
} | ||
} | ||
} | ||
else { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
return node; | ||
} | ||
else { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
return node; | ||
} | ||
} | ||
} | ||
} | ||
return visit(this._root, this._depth); | ||
}, | ||
size: function() { | ||
var selection_size = function() { | ||
var size = 0; | ||
this.each(function() { ++size; }); | ||
return size; | ||
}, | ||
}; | ||
empty: function() { | ||
var selection_empty = function() { | ||
return !this.node(); | ||
}, | ||
}; | ||
each: function(callback) { | ||
var selection_each = function(callback) { | ||
var depth = this._depth, | ||
@@ -563,7 +575,20 @@ stack = new Array(depth); | ||
return this; | ||
}, | ||
}; | ||
attr: function(name, value) { | ||
name = d3.namespace(name); | ||
var namespaces = (new Map) | ||
.set("svg", "http://www.w3.org/2000/svg") | ||
.set("xhtml", "http://www.w3.org/1999/xhtml") | ||
.set("xlink", "http://www.w3.org/1999/xlink") | ||
.set("xml", "http://www.w3.org/XML/1998/namespace") | ||
.set("xmlns", "http://www.w3.org/2000/xmlns/"); | ||
var namespace = function(name) { | ||
var i = name.indexOf(":"), prefix = name; | ||
if (i >= 0) prefix = name.slice(0, i), name = name.slice(i + 1); | ||
return namespaces.has(prefix) ? {space: namespaces.get(prefix), local: name} : name; | ||
}; | ||
var selection_attr = function(name, value) { | ||
name = namespace(name); | ||
if (arguments.length < 2) { | ||
@@ -609,8 +634,15 @@ var node = this.node(); | ||
: (name.local ? setConstantNS : setConstant))); | ||
}, | ||
}; | ||
style: function(name, value, priority) { | ||
var defaultView = function(node) { | ||
return node | ||
&& ((node.ownerDocument && node.ownerDocument.defaultView) // node is a Node | ||
|| (node.document && node) // node is a Window | ||
|| node.defaultView); // node is a Document | ||
}; | ||
var selection_style = function(name, value, priority) { | ||
var n = arguments.length; | ||
if (n < 2) return windowOf(n = this.node()).getComputedStyle(n, null).getPropertyValue(name); | ||
if (n < 2) return defaultView(n = this.node()).getComputedStyle(n, null).getPropertyValue(name); | ||
@@ -634,5 +666,5 @@ if (n < 3) priority = ""; | ||
return this.each(value == null ? remove : typeof value === "function" ? setFunction : setConstant); | ||
}, | ||
}; | ||
property: function(name, value) { | ||
var selection_property = function(name, value) { | ||
if (arguments.length < 2) return this.node()[name]; | ||
@@ -655,5 +687,11 @@ | ||
return this.each(value == null ? remove : typeof value === "function" ? setFunction : setConstant); | ||
}, | ||
}; | ||
class: function(name, value) { | ||
var requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; | ||
var requote = function(string) { | ||
return string.replace(requoteRe, "\\$&"); | ||
}; | ||
var selection_class = function(name, value) { | ||
name = (name + "").trim().split(/^|\s+/); | ||
@@ -686,5 +724,24 @@ var n = name.length; | ||
return this.each(typeof value === "function" ? setFunction : setConstant); | ||
}, | ||
}; | ||
text: function(value) { | ||
function classerOf(name) { | ||
var re; | ||
return function(node, value) { | ||
if (c = node.classList) return value ? c.add(name) : c.remove(name); | ||
if (!re) re = new RegExp("(?:^|\\s+)" + requote(name) + "(?:\\s+|$)", "g"); | ||
var c = node.getAttribute("class") || ""; | ||
if (value) { | ||
re.lastIndex = 0; | ||
if (!re.test(c)) node.setAttribute("class", collapse(c + " " + name)); | ||
} else { | ||
node.setAttribute("class", collapse(c.replace(re, " "))); | ||
} | ||
}; | ||
} | ||
function collapse(string) { | ||
return string.trim().replace(/\s+/g, " "); | ||
} | ||
var selection_text = function(value) { | ||
if (!arguments.length) return this.node().textContent; | ||
@@ -704,5 +761,5 @@ | ||
return this.each(typeof value === "function" ? setFunction : setConstant); | ||
}, | ||
}; | ||
html: function(value) { | ||
var selection_html = function(value) { | ||
if (!arguments.length) return this.node().innerHTML; | ||
@@ -722,5 +779,5 @@ | ||
return this.each(typeof value === "function" ? setFunction : setConstant); | ||
}, | ||
}; | ||
append: function(creator, selector) { | ||
var selection_append = function(creator, selector) { | ||
if (typeof creator !== "function") creator = creatorOf(creator); | ||
@@ -739,5 +796,23 @@ | ||
: (typeof selector !== "function" && (selector = selectorOf(selector)), insert)); | ||
}, | ||
}; | ||
remove: function() { | ||
function creatorOf(name) { | ||
name = namespace(name); | ||
function creator() { | ||
var document = this.ownerDocument, | ||
uri = this.namespaceURI; | ||
return uri | ||
? document.createElementNS(uri, name) | ||
: document.createElement(name); | ||
} | ||
function creatorNS() { | ||
return this.ownerDocument.createElementNS(name.space, name.local); | ||
} | ||
return name.local ? creatorNS : creator; | ||
} | ||
var selection_remove = function() { | ||
return this.each(function() { | ||
@@ -747,9 +822,18 @@ var parent = this.parentNode; | ||
}); | ||
}, | ||
}; | ||
datum: function(value) { | ||
var selection_datum = function(value) { | ||
return arguments.length ? this.property("__data__", value) : this.node().__data__; | ||
}, | ||
}; | ||
event: function(type, listener, capture) { | ||
var filterEvents = new Map; | ||
if (global.document) { | ||
var selection_event__element = document.documentElement; | ||
if (!("onmouseenter" in selection_event__element)) { | ||
filterEvents.set("mouseenter", "mouseover").set("mouseleave", "mouseout"); | ||
} | ||
} | ||
var selection_event = function(type, listener, capture) { | ||
var n = arguments.length, | ||
@@ -798,6 +882,30 @@ key = "__on" + type, | ||
: (n ? remove : removeAll)); | ||
}, | ||
}; | ||
dispatch: function(type, params) { | ||
function listenerOf(listener, ancestors, args) { | ||
return function(event) { | ||
var i = ancestors.length, event0 = global.d3.event; // Events can be reentrant (e.g., focus). | ||
while (--i >= 0) args[i << 1] = ancestors[i].__data__; | ||
global.d3.event = event; | ||
try { | ||
listener.apply(ancestors[0], args); | ||
} finally { | ||
global.d3.event = event0; | ||
} | ||
}; | ||
} | ||
function filterListenerOf(listener) { | ||
return function(event) { | ||
var related = event.relatedTarget; | ||
if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { | ||
listener(event); | ||
} | ||
}; | ||
} | ||
function noop() {} | ||
var selection_dispatch = function(type, params) { | ||
function dispatchConstant() { | ||
@@ -812,210 +920,146 @@ return dispatchEvent(this, type, params); | ||
return this.each(typeof params === "function" ? dispatchFunction : dispatchConstant); | ||
} | ||
}; | ||
}; | ||
// Deprecated aliases for backwards-compatibility with 3.x: | ||
Selection.prototype.on = Selection.prototype.event; | ||
Selection.prototype.insert = Selection.prototype.append; | ||
Selection.prototype.classed = Selection.prototype.class; | ||
function dispatchEvent(node, type, params) { | ||
var window = defaultView(node), | ||
event = window.CustomEvent; | ||
d3.select = function(selector) { | ||
var root; | ||
if (typeof selector === "string") { | ||
var document = global.document; | ||
root = [document.querySelector(selector)]; | ||
root._parent = document.documentElement; | ||
} else { | ||
root = [selector]; | ||
root._parent = null; | ||
if (event) { | ||
event = new event(type, params); | ||
} else { | ||
event = window.document.createEvent("Event"); | ||
if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; | ||
else event.initEvent(type, false, false); | ||
} | ||
node.dispatchEvent(event); | ||
} | ||
return new Selection(root, 1); | ||
}; | ||
d3.selectAll = function(selector) { | ||
var root; | ||
if (typeof selector === "string") { | ||
var document = global.document; | ||
root = document.querySelectorAll(selector); | ||
root._parent = document.documentElement; | ||
} else { | ||
root = selector; | ||
root._parent = null; | ||
function Selection(root, depth) { | ||
this._root = root; | ||
this._depth = depth; | ||
this._enter = this._update = this._exit = null; | ||
} | ||
return new Selection(root, 1); | ||
}; | ||
function EnterNode(parent, datum) { | ||
this.ownerDocument = parent.ownerDocument; | ||
this.namespaceURI = parent.namespaceURI; | ||
this._next = null; | ||
this._parent = parent; | ||
this.__data__ = datum; | ||
} | ||
Selection.prototype = { | ||
select: selection_select, | ||
selectAll: selection_selectAll, | ||
filter: selection_filter, | ||
data: selection_data, | ||
enter: selection_enter, | ||
exit: selection_exit, | ||
order: selection_order, | ||
sort: selection_sort, | ||
call: selection_call, | ||
nodes: selection_nodes, | ||
node: selection_node, | ||
size: selection_size, | ||
empty: selection_empty, | ||
each: selection_each, | ||
attr: selection_attr, | ||
style: selection_style, | ||
property: selection_property, | ||
class: selection_class, | ||
classed: selection_class, // deprecated alias | ||
text: selection_text, | ||
html: selection_html, | ||
append: selection_append, | ||
insert: selection_append, // deprecated alias | ||
remove: selection_remove, | ||
datum: selection_datum, | ||
event: selection_event, | ||
on: selection_event, // deprecated alias | ||
dispatch: selection_dispatch | ||
}; | ||
EnterNode.prototype = { | ||
appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, | ||
insertBefore: function(child, next) { return this._parent.insertBefore(child, next || this._next); } | ||
}; | ||
var select = function(selector) { | ||
var root; | ||
if (typeof selector === "string") { | ||
root = [document.querySelector(selector)]; | ||
root._parent = document.documentElement; | ||
} else { | ||
root = [selector]; | ||
root._parent = null; | ||
} | ||
return new Selection(root, 1); | ||
}; | ||
// The leaf groups of the selection hierarchy are initially NodeList, | ||
// and then lazily converted to arrays when mutation is required. | ||
function arrayify(selection) { | ||
var bug44083 = global.navigator && /WebKit/.test(global.navigator.userAgent) ? -1 : 0; // https://bugs.webkit.org/show_bug.cgi?id=44083 | ||
function visit(nodes, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node; | ||
if (--depth) { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
nodes[i] = visit(node, depth); | ||
var src_point = function(node, event) { | ||
var svg = node.ownerSVGElement || node; | ||
if (svg.createSVGPoint) { | ||
var point = svg.createSVGPoint(); | ||
if (bug44083 < 0) { | ||
var window = defaultView(node); | ||
if (window.scrollX || window.scrollY) { | ||
svg = select(window.document.body).append("svg").style({position: "absolute", top: 0, left: 0, margin: 0, padding: 0, border: "none"}, "important"); | ||
var ctm = svg.node().getScreenCTM(); | ||
bug44083 = !(ctm.f || ctm.e); | ||
svg.remove(); | ||
} | ||
} | ||
if (bug44083) point.x = event.pageX, point.y = event.pageY; | ||
else point.x = event.clientX, point.y = event.clientY; | ||
point = point.matrixTransform(node.getScreenCTM().inverse()); | ||
return [point.x, point.y]; | ||
} | ||
var rect = node.getBoundingClientRect(); | ||
return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; | ||
}; | ||
else if (!Array.isArray(nodes)) { | ||
var array = new Array(n); | ||
while (++i < n) array[i] = nodes[i]; | ||
array._parent = nodes._parent; | ||
nodes = array; | ||
} | ||
var mouse = function(node, event) { | ||
if (arguments.length < 2) event = sourceEvent(); | ||
if (event.changedTouches) event = event.changedTouches[0]; | ||
return src_point(node, event); | ||
}; | ||
return nodes; | ||
} | ||
return selection._root = visit(selection._root, selection._depth); | ||
} | ||
function creatorOf(name) { | ||
name = d3.namespace(name); | ||
function creator() { | ||
var document = this.ownerDocument, | ||
uri = this.namespaceURI; | ||
return uri | ||
? document.createElementNS(uri, name) | ||
: document.createElement(name); | ||
} | ||
function creatorNS() { | ||
return this.ownerDocument.createElementNS(name.space, name.local); | ||
} | ||
return name.local ? creatorNS : creator; | ||
} | ||
function windowOf(node) { | ||
return node | ||
&& ((node.ownerDocument && node.ownerDocument.defaultView) // node is a Node | ||
|| (node.document && node) // node is a Window | ||
|| node.defaultView); // node is a Document | ||
} | ||
function dispatchEvent(node, type, params) { | ||
var window = windowOf(node), | ||
event = window.CustomEvent; | ||
if (event) { | ||
event = new event(type, params); | ||
} else { | ||
event = window.document.createEvent("Event"); | ||
if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; | ||
else event.initEvent(type, false, false); | ||
} | ||
node.dispatchEvent(event); | ||
} | ||
function classerOf(name) { | ||
var re; | ||
return function(node, value) { | ||
if (c = node.classList) return value ? c.add(name) : c.remove(name); | ||
if (!re) re = new RegExp("(?:^|\\s+)" + requote(name) + "(?:\\s+|$)", "g"); | ||
var c = node.getAttribute("class") || ""; | ||
if (value) { | ||
re.lastIndex = 0; | ||
if (!re.test(c)) node.setAttribute("class", collapse(c + " " + name)); | ||
var selectAll = function(selector) { | ||
var root; | ||
if (typeof selector === "string") { | ||
root = document.querySelectorAll(selector); | ||
root._parent = document.documentElement; | ||
} else { | ||
node.setAttribute("class", collapse(c.replace(re, " "))); | ||
root = selector; | ||
root._parent = null; | ||
} | ||
return new Selection(root, 1); | ||
}; | ||
} | ||
function listenerOf(listener, ancestors, args) { | ||
return function(event) { | ||
var i = ancestors.length, event0 = d3.event; // Events can be reentrant (e.g., focus). | ||
while (--i >= 0) args[i << 1] = ancestors[i].__data__; | ||
d3.event = event; | ||
try { | ||
listener.apply(ancestors[0], args); | ||
} finally { | ||
d3.event = event0; | ||
var src_touch = function(node, touches, identifier) { | ||
if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches; | ||
for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) { | ||
if ((touch = touches[i]).identifier === identifier) { | ||
return src_point(node, touch); | ||
} | ||
} | ||
return null; | ||
}; | ||
} | ||
function filterListenerOf(listener) { | ||
return function(event) { | ||
var related = event.relatedTarget; | ||
if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { | ||
listener(event); | ||
var src_touches = function(node, touches) { | ||
if (arguments.length < 2) touches = sourceEvent().touches; | ||
for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) { | ||
points[i] = src_point(node, touches[i]); | ||
} | ||
return points; | ||
}; | ||
} | ||
function point(node, event) { | ||
var svg = node.ownerSVGElement || node; | ||
if (svg.createSVGPoint) { | ||
var point = svg.createSVGPoint(); | ||
if (bug44083 < 0) { | ||
var window = windowOf(node); | ||
if (window.scrollX || window.scrollY) { | ||
svg = d3.select(window.document.body).append("svg").style({position: "absolute", top: 0, left: 0, margin: 0, padding: 0, border: "none"}, "important"); | ||
var ctm = svg.node().getScreenCTM(); | ||
bug44083 = !(ctm.f || ctm.e); | ||
svg.remove(); | ||
} | ||
} | ||
if (bug44083) point.x = event.pageX, point.y = event.pageY; | ||
else point.x = event.clientX, point.y = event.clientY; | ||
point = point.matrixTransform(node.getScreenCTM().inverse()); | ||
return [point.x, point.y]; | ||
} | ||
var rect = node.getBoundingClientRect(); | ||
return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; | ||
} | ||
var index = { | ||
mouse: mouse, | ||
namespace: namespace, | ||
namespaces: namespaces, | ||
requote: requote, | ||
select: select, | ||
selectAll: selectAll, | ||
selection: Selection, | ||
touch: src_touch, | ||
touches: src_touches | ||
}; | ||
function source() { | ||
var event = d3.event, source; | ||
while (source = event.sourceEvent) event = source; | ||
return event; | ||
} | ||
var d3 = global.d3; | ||
if (d3) for (var field in index) d3[field] = index[field]; | ||
else global.d3 = d3 = index; | ||
if (typeof define === "function" && define.amd) define(d3); | ||
else if (typeof module === "object" && module.exports) module.exports = d3; | ||
d3.mouse = function(node, event) { | ||
if (arguments.length < 2) event = source(); | ||
if (event.changedTouches) event = event.changedTouches[0]; | ||
return point(node, event); | ||
}; | ||
d3.touch = function(node, touches, identifier) { | ||
if (arguments.length < 3) identifier = touches, touches = source().changedTouches; | ||
for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) { | ||
if ((touch = touches[i]).identifier === identifier) { | ||
return point(node, touch); | ||
} | ||
} | ||
return null; | ||
}; | ||
d3.touches = function(node, touches) { | ||
if (arguments.length < 2) touches = source().touches; | ||
for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) { | ||
points[i] = point(node, touches[i]); | ||
} | ||
return points; | ||
}; | ||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | ||
},{}]},{},[1])(1) | ||
}); | ||
})(this); |
@@ -1,1 +0,1 @@ | ||
!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.d3=t()}}(function(){return function t(e,n,r){function i(a,u){if(!n[a]){if(!e[a]){var s="function"==typeof require&&require;if(!u&&s)return s(a,!0);if(o)return o(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return i(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a<r.length;a++)i(r[a]);return i}({1:[function(t,e,n){(function(t){function n(t,e){this._root=t,this._depth=e,this._enter=this._update=this._exit=null}function r(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function i(t){function e(t,n){var r,i=-1,o=t.length;if(--n)for(;++i<o;)(r=t[i])&&(t[i]=e(r,n));else if(!Array.isArray(t)){for(var a=new Array(o);++i<o;)a[i]=t[i];a._parent=t._parent,t=a}return t}return t._root=e(t._root,t._depth)}function o(t){function e(){var e=this.ownerDocument,n=this.namespaceURI;return n?e.createElementNS(n,t):e.createElement(t)}function n(){return this.ownerDocument.createElementNS(t.space,t.local)}return t=p.namespace(t),t.local?n:e}function a(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)}function u(t,e,n){var r=a(t),i=r.CustomEvent;i?i=new i(e,n):(i=r.document.createEvent("Event"),n?(i.initEvent(e,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function s(t){var e;return function(n,r){if(i=n.classList)return r?i.add(t):i.remove(t);e||(e=new RegExp("(?:^|\\s+)"+b(t)+"(?:\\s+|$)","g"));var i=n.getAttribute("class")||"";r?(e.lastIndex=0,e.test(i)||n.setAttribute("class",A(i+" "+t))):n.setAttribute("class",A(i.replace(e," ")))}}function c(t,e,n){return function(r){for(var i=e.length,o=p.event;--i>=0;)n[i<<1]=e[i].__data__;p.event=r;try{t.apply(e[0],n)}finally{p.event=o}}}function l(t){return function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t(e)}}function f(t,e){var n=t.ownerSVGElement||t;if(n.createSVGPoint){var r=n.createSVGPoint();if(0>E){var i=a(t);if(i.scrollX||i.scrollY){n=p.select(i.document.body).append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=n.node().getScreenCTM();E=!(o.f||o.e),n.remove()}}return E?(r.x=e.pageX,r.y=e.pageY):(r.x=e.clientX,r.y=e.clientY),r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}var u=t.getBoundingClientRect();return[e.clientX-u.left-t.clientLeft,e.clientY-u.top-t.clientTop]}function h(){for(var t,e=p.event;t=e.sourceEvent;)e=t;return e}var p=e.exports=t.d3||(t.d3={}),_=t.Map||(_=function(){},_.prototype={set:function(t,e){return this["$"+t]=e,this},get:function(t){return this["$"+t]},has:function(t){return"$"+t in this}},_),d=function(t){return function(){return t}},g=function(t){return function(){return this.querySelector(t)}},v=function(t){return function(){return this.querySelectorAll(t)}},m=function(t){return function(){return this.matches(t)}},y=new _,w=function(){},x=function(t,e){return e>t?-1:t>e?1:t>=e?0:NaN},A=function(t){return t.trim().replace(/\s+/g," ")},b=function(t){return t.replace(S,"\\$&")},S=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,E=t.navigator&&/WebKit/.test(t.navigator.userAgent)?-1:0;!function(t){if(t){var e=t.documentElement;if("onmouseenter"in e||y.set("mouseenter","mouseover").set("mouseleave","mouseout"),!e.matches){var n=e.webkitMatchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector;m=function(t){return function(){return n.call(this,t)}}}}}(t.document),p.namespaces=(new _).set("svg","http://www.w3.org/2000/svg").set("xhtml","http://www.w3.org/1999/xhtml").set("xlink","http://www.w3.org/1999/xlink").set("xml","http://www.w3.org/XML/1998/namespace").set("xmlns","http://www.w3.org/2000/xmlns/"),p.namespace=function(t){var e=t.indexOf(":"),n=t;return e>=0&&(n=t.slice(0,e),t=t.slice(e+1)),p.namespaces.has(n)?{space:p.namespaces.get(n),local:t}:t},p.selection=n,n.prototype={select:function(t){function e(n,r,o){var a,u,s=-1,c=n.length,l=new Array(c);if(--o)for(var f=2*o,h=f+1;++s<c;)(a=n[s])&&(i[f]=a._parent.__data__,i[h]=s,l[s]=e(a,r&&r[s],o));else for(;++s<c;)(a=n[s])&&(i[0]=a.__data__,i[1]=s,(u=t.apply(a,i))&&("__data__"in a&&(u.__data__=a.__data__),r&&(r[s]=u,delete n[s]),l[s]=u));return l._parent=n._parent,l}var r=this._depth,i=new Array(2*r);return"function"!=typeof t&&(t=g(t)),new n(e(this._root,this._update&&this._update._root,r),r)},selectAll:function(t){function e(n,r){var o,a,u=-1,s=n.length,c=new Array(s);if(--r)for(var l=2*r,f=l+1;++u<s;)(o=n[u])&&(i[l]=o._parent.__data__,i[f]=u,c[u]=e(o,r));else for(;++u<s;)(o=n[u])&&(i[0]=o.__data__,i[1]=u,c[u]=a=t.apply(o,i),a._parent=o);return c._parent=n._parent,c}var r=this._depth,i=new Array(2*r);return"function"!=typeof t&&(t=v(t)),new n(e(this._root,r),r+1)},filter:function(t){function e(n,r){var o,a,u=-1,s=n.length;if(--r){var c=2*r,l=c+1;for(a=new Array(s);++u<s;)(o=n[u])&&(i[c]=o._parent.__data__,i[l]=u,a[u]=e(o,r))}else for(a=[];++u<s;)(o=n[u])&&(i[0]=o.__data__,i[1]=u,t.apply(o,i)&&a.push(o));return a._parent=n._parent,a}var r=this._depth,i=new Array(2*r);return"function"!=typeof t&&(t=m(t)),new n(e(this._root,r),r)},data:function(t,e){function n(e,r,i,o){var a,u,s=-1;if(o--){var f=2*o,h=f+1;for(a=e.length;++s<a;)(u=e[s])&&(c[f]=u._parent.__data__,c[h]=s,n(u,r[s],i[s],o))}else{var p,_=0;for(l(e,r,i,t.apply(e._parent,c)),a=e.length;++s<a;)if(p=r[s]){for(s>=_&&(_=s+1);!(u=e[_])&&++_<a;);p._next=u||null}}}function i(t,e,n,i){var o,a=0,u=t.length,s=i.length,c=Math.min(u,s);for(e.length=0,e.length=s,n.length=0,n.length=u;c>a;++a)(o=t[a])?o.__data__=i[a]:e[a]=new r(t._parent,i[a]);for(;s>a;++a)e[a]=new r(t._parent,i[a]);for(;u>a;++a)(o=t[a])&&(n[a]=t[a]);t.length=s}function o(t,n,i,o){var a,u,s,l=o.length,f=t.length,h=new _,p=[null,null].concat(c),d=new Array(f);for(n.length=0,n.length=l,i.length=0,i.length=f,a=0;f>a;++a)(u=t[a])&&(p[0]=u.__data__,p[1]=a,d[a]=s=e.apply(u,p),h.has(s)?i[a]=u:h.set(s,u));for(t.length=0,t.length=l,a=0;l>a;++a)p[0]=o[a],p[1]=a,s=e.apply(t._parent,p),(u=h.get(s))?u!==!0&&(t[a]=u,u.__data__=o[a]):n[a]=new r(t._parent,o[a]),h.set(s,!0);for(a=0;f>a;++a)(u=h.get(d[a]))!==!0&&(i[a]=u)}if(!t){var a=new Array(this.size()),u=-1;return this.each(function(t){a[++u]=t}),a}var s=this._depth-1,c=new Array(2*s),l=e?o:i;return"function"!=typeof t&&(t=d(t)),n(this._root,this.enter()._root,this.exit()._root,s),this},enter:function(){function t(e,n){var r,i=-1,o=e.length,a=new Array(o);if(--n)for(;++i<o;)(r=e[i])&&(a[i]=t(r,n));return a._parent=e._parent,a}return this._enter?this._enter:(this._enter=new n(t(i(this),this._depth),this._depth),this._enter._update=this,this._enter)},exit:function(){function t(e,n){var r,i=-1,o=e.length,a=new Array(o);if(--n)for(;++i<o;)(r=e[i])&&(a[i]=t(r,n));return a._parent=e._parent,a}return this._exit||(this._exit=new n(t(i(this),this._depth),this._depth))},order:function(){function t(e,n){var r,i,o=e.length;if(--n)for(;--o>=0;)(r=e[o])&&t(r,n);else for(i=e[--o];--o>=0;)(r=e[o])&&(i&&i!==r.nextSibling&&i.parentNode.insertBefore(r,i),i=r)}return t(this._root,this._depth),this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}function n(t,r){if(--r)for(var i,o=-1,a=t.length;++o<a;)(i=t[o])&&n(i,r);else t.sort(e)}return t||(t=x),n(i(this),this._depth),this.order()},call:function(){var t=arguments[0];return t.apply(arguments[0]=this,arguments),this},nodes:function(){var t=new Array(this.size()),e=-1;return this.each(function(){t[++e]=this}),t},node:function(){function t(e,n){var r,i=-1,o=e.length;if(--n){for(;++i<o;)if((r=e[i])&&(r=t(r,n)))return r}else for(;++i<o;)if(r=e[i])return r}return t(this._root,this._depth)},size:function(){var t=0;return this.each(function(){++t}),t},empty:function(){return!this.node()},each:function(t){function e(n,i){var o,a=-1,u=n.length;if(--i)for(var s=2*i,c=s+1;++a<u;)(o=n[a])&&(r[s]=o._parent.__data__,r[c]=a,e(o,i));else for(;++a<u;)(o=n[a])&&(r[0]=o.__data__,r[1]=a,t.apply(o,r))}var n=this._depth,r=new Array(n);return e(this._root,n),this},attr:function(t,e){function n(){this.removeAttribute(t)}function r(){this.removeAttributeNS(t.space,t.local)}function i(){this.setAttribute(t,e)}function o(){this.setAttributeNS(t.space,t.local,e)}function a(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}function u(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}if(t=p.namespace(t),arguments.length<2){var s=this.node();return t.local?s.getAttributeNS(t.space,t.local):s.getAttribute(t)}return this.each(null==e?t.local?r:n:"function"==typeof e?t.local?u:a:t.local?o:i)},style:function(t,e,n){function r(){this.style.removeProperty(t)}function i(){this.style.setProperty(t,e,n)}function o(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}var u=arguments.length;return 2>u?a(u=this.node()).getComputedStyle(u,null).getPropertyValue(t):(3>u&&(n=""),this.each(null==e?r:"function"==typeof e?o:i))},property:function(t,e){function n(){delete this[t]}function r(){this[t]=e}function i(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}return arguments.length<2?this.node()[t]:this.each(null==e?n:"function"==typeof e?i:r)},"class":function(t,e){function n(){for(var n=-1;++n<i;)t[n](this,e)}function r(){for(var n=-1,r=e.apply(this,arguments);++n<i;)t[n](this,r)}t=(t+"").trim().split(/^|\s+/);var i=t.length;if(arguments.length<2){var o=this.node(),a=-1;if(e=o.classList){for(;++a<i;)if(!e.contains(t[a]))return!1}else for(e=o.getAttribute("class");++a<i;)if(!classedRe(t[a]).test(e))return!1;return!0}return t=t.map(s),this.each("function"==typeof e?r:n)},text:function(t){function e(){this.textContent=t}function n(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}return arguments.length?(null==t&&(t=""),this.each("function"==typeof t?n:e)):this.node().textContent},html:function(t){function e(){this.innerHTML=t}function n(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}return arguments.length?(null==t&&(t=""),this.each("function"==typeof t?n:e)):this.node().innerHTML},append:function(t,e){function n(){return this.appendChild(t.apply(this,arguments))}function r(){return this.insertBefore(t.apply(this,arguments),e.apply(this,arguments)||null)}return"function"!=typeof t&&(t=o(t)),this.select(arguments.length<2?n:("function"!=typeof e&&(e=g(e)),r))},remove:function(){return this.each(function(){var t=this.parentNode;t&&t.removeChild(this)})},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},event:function(t,e,n){function r(){for(var r=f,o=arguments.length>>1,u=new Array(o);--o>=0;)r=r[arguments[(o<<1)+1]],u[o]=o?r._parent:r;var h=c(e,u,arguments);a&&(h=l(h)),i.call(this),this.addEventListener(t,this[s]=h,h._capture=n),h._listener=e}function i(){var e=this[s];e&&(this.removeEventListener(t,e,e._capture),delete this[s])}function o(){var e,n=new RegExp("^__on([^.]+)"+b(t)+"$");for(var r in this)if(e=r.match(n)){var i=this[r];this.removeEventListener(e[1],i,i._capture),delete this[r]}}var a,u=arguments.length,s="__on"+t,f=this._root;return 2>u?(u=this.node()[s])&&u._listener:(3>u&&(n=!1),(u=t.indexOf("."))>0&&(t=t.slice(0,u)),(a=y.has(t))&&(t=y.get(t)),this.each(e?u?r:w:u?i:o))},dispatch:function(t,e){function n(){return u(this,t,e)}function r(){return u(this,t,e.apply(this,arguments))}return this.each("function"==typeof e?r:n)}},n.prototype.on=n.prototype.event,n.prototype.insert=n.prototype.append,n.prototype.classed=n.prototype["class"],p.select=function(e){var r;if("string"==typeof e){var i=t.document;r=[i.querySelector(e)],r._parent=i.documentElement}else r=[e],r._parent=null;return new n(r,1)},p.selectAll=function(e){var r;if("string"==typeof e){var i=t.document;r=i.querySelectorAll(e),r._parent=i.documentElement}else r=e,r._parent=null;return new n(r,1)},r.prototype={appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e||this._next)}},p.mouse=function(t,e){return arguments.length<2&&(e=h()),e.changedTouches&&(e=e.changedTouches[0]),f(t,e)},p.touch=function(t,e,n){arguments.length<3&&(n=e,e=h().changedTouches);for(var r,i=0,o=e?e.length:0;o>i;++i)if((r=e[i]).identifier===n)return f(t,r);return null},p.touches=function(t,e){arguments.length<2&&(e=h().touches);for(var n=0,r=e?e.length:0,i=new Array(r);r>n;++n)i[n]=f(t,e[n]);return i}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[1])(1)}); | ||
this.Map||(Map=function(){},Map.prototype={set:function(t,e){return this["$"+t]=e,this},get:function(t){return this["$"+t]},has:function(t){return"$"+t in this}}),function(t){"use strict";function e(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function n(t){return function(){return t}}function r(t,e){var n,i=-1,o=t.length;if(--e)for(;++i<o;)(n=t[i])&&(t[i]=r(n,e));else if(!Array.isArray(t)){for(var a=new Array(o);++i<o;)a[i]=t[i];a._parent=t._parent,t=a}return t}function i(t,e){var n,r=-1,o=t.length,a=new Array(o);if(--e)for(;++r<o;)(n=t[r])&&(a[r]=i(n,e));return a._parent=t._parent,a}function o(t,e){var n,r,i=t.length;if(--e)for(;--i>=0;)(n=t[i])&&o(n,e);else for(r=t[--i];--i>=0;)(n=t[i])&&(r&&r!==n.nextSibling&&r.parentNode.insertBefore(n,r),r=n)}function a(t,e){return e>t?-1:t>e?1:t>=e?0:NaN}function u(t,e){var n,r=-1,i=t.length;if(--e){for(;++r<i;)if((n=t[r])&&(n=u(n,e)))return n}else for(;++r<i;)if(n=t[r])return n}function s(t){var e;return function(n,r){if(i=n.classList)return r?i.add(t):i.remove(t);e||(e=new RegExp("(?:^|\\s+)"+U(t)+"(?:\\s+|$)","g"));var i=n.getAttribute("class")||"";r?(e.lastIndex=0,e.test(i)||n.setAttribute("class",c(i+" "+t))):n.setAttribute("class",c(i.replace(e," ")))}}function c(t){return t.trim().replace(/\s+/g," ")}function l(t){function e(){var e=this.ownerDocument,n=this.namespaceURI;return n?e.createElementNS(n,t):e.createElement(t)}function n(){return this.ownerDocument.createElementNS(t.space,t.local)}return t=z(t),t.local?n:e}function h(e,n,r){return function(i){for(var o=n.length,a=t.d3.event;--o>=0;)r[o<<1]=n[o].__data__;t.d3.event=i;try{e.apply(n[0],r)}finally{t.d3.event=a}}}function f(t){return function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t(e)}}function p(){}function _(t,e,n){var r=Y(t),i=r.CustomEvent;i?i=new i(e,n):(i=r.document.createEvent("Event"),n?(i.initEvent(e,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function d(t,e){this._root=t,this._depth=e,this._enter=this._update=this._exit=null}var g=function(){for(var e,n=t.d3.event;e=n.sourceEvent;)n=e;return n},m=function(t){return function(){return this.querySelector(t)}},v=function(t){function e(n,i,o){var a,u,s=-1,c=n.length,l=new Array(c);if(--o)for(var h=2*o,f=h+1;++s<c;)(a=n[s])&&(r[h]=a._parent.__data__,r[f]=s,l[s]=e(a,i&&i[s],o));else for(;++s<c;)(a=n[s])&&(r[0]=a.__data__,r[1]=s,(u=t.apply(a,r))&&("__data__"in a&&(u.__data__=a.__data__),i&&(i[s]=u,delete n[s]),l[s]=u));return l._parent=n._parent,l}var n=this._depth,r=new Array(2*n);return"function"!=typeof t&&(t=m(t)),new d(e(this._root,this._update&&this._update._root,n),n)},y=function(t){return function(){return this.querySelectorAll(t)}},w=function(t){function e(n,i){var o,a,u=-1,s=n.length,c=new Array(s);if(--i)for(var l=2*i,h=l+1;++u<s;)(o=n[u])&&(r[l]=o._parent.__data__,r[h]=u,c[u]=e(o,i));else for(;++u<s;)(o=n[u])&&(r[0]=o.__data__,r[1]=u,c[u]=a=t.apply(o,r),a._parent=o);return c._parent=n._parent,c}var n=this._depth,r=new Array(2*n);return"function"!=typeof t&&(t=y(t)),new d(e(this._root,n),n+1)},A=function(t){function e(n,i){var o,a,u=-1,s=n.length;if(--i){var c=2*i,l=c+1;for(a=new Array(s);++u<s;)(o=n[u])&&(r[c]=o._parent.__data__,r[l]=u,a[u]=e(o,i))}else for(a=[];++u<s;)(o=n[u])&&(r[0]=o.__data__,r[1]=u,t.apply(o,r)&&a.push(o));return a._parent=n._parent,a}var n=this._depth,r=new Array(2*n);return"function"!=typeof t&&(t=x(t)),new d(e(this._root,n),n)},x=function(t){return function(){return this.matches(t)}};if(t.document){var b=document.documentElement;if(!b.matches){var S=b.webkitMatchesSelector||b.msMatchesSelector||b.mozMatchesSelector||b.oMatchesSelector;x=function(t){return function(){return S.call(this,t)}}}}var E=function(t,r){function i(e,n,r,o){var a,u,s=-1;if(o--){var c=2*o,f=c+1;for(a=e.length;++s<a;)(u=e[s])&&(l[c]=u._parent.__data__,l[f]=s,i(u,n[s],r[s],o))}else{var p,_=0;for(h(e,n,r,t.apply(e._parent,l)),a=e.length;++s<a;)if(p=n[s]){for(s>=_&&(_=s+1);!(u=e[_])&&++_<a;);p._next=u||null}}}function o(t,n,r,i){var o,a=0,u=t.length,s=i.length,c=Math.min(u,s);for(n.length=0,n.length=s,r.length=0,r.length=u;c>a;++a)(o=t[a])?o.__data__=i[a]:n[a]=new e(t._parent,i[a]);for(;s>a;++a)n[a]=new e(t._parent,i[a]);for(;u>a;++a)(o=t[a])&&(r[a]=t[a]);t.length=s}function a(t,n,i,o){var a,u,s,c=o.length,h=t.length,f=new Map,p=[null,null].concat(l),_=new Array(h);for(n.length=0,n.length=c,i.length=0,i.length=h,a=0;h>a;++a)(u=t[a])&&(p[0]=u.__data__,p[1]=a,_[a]=s=r.apply(u,p),f.has(s)?i[a]=u:f.set(s,u));for(t.length=0,t.length=c,a=0;c>a;++a)p[0]=o[a],p[1]=a,s=r.apply(t._parent,p),(u=f.get(s))?u!==!0&&(t[a]=u,u.__data__=o[a]):n[a]=new e(t._parent,o[a]),f.set(s,!0);for(a=0;h>a;++a)(u=f.get(_[a]))!==!0&&(i[a]=u)}if(!t){var u=new Array(this.size()),s=-1;return this.each(function(t){u[++s]=t}),u}var c=this._depth-1,l=new Array(2*c),h=r?a:o;return"function"!=typeof t&&(t=n(t)),i(this._root,this.enter()._root,this.exit()._root,c),this};e.prototype={appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e||this._next)}};var M=function(t){return t._root=r(t._root,t._depth)},C=function(t){return new d(i(M(t),t._depth),t._depth)},N=function(){return this._enter||(this._enter=C(this),this._enter._update=this),this._enter},T=function(){return this._exit||(this._exit=C(this))},L=function(){return o(this._root,this._depth),this},P=function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}function n(t,r){if(--r)for(var i,o=-1,a=t.length;++o<a;)(i=t[o])&&n(i,r);else t.sort(e)}return t||(t=a),n(M(this),this._depth),this.order()},D=function(){var t=arguments[0];return t.apply(arguments[0]=this,arguments),this},R=function(){var t=new Array(this.size()),e=-1;return this.each(function(){t[++e]=this}),t},$=function(){return u(this._root,this._depth)},B=function(){var t=0;return this.each(function(){++t}),t},V=function(){return!this.node()},q=function(t){function e(n,i){var o,a=-1,u=n.length;if(--i)for(var s=2*i,c=s+1;++a<u;)(o=n[a])&&(r[s]=o._parent.__data__,r[c]=a,e(o,i));else for(;++a<u;)(o=n[a])&&(r[0]=o.__data__,r[1]=a,t.apply(o,r))}var n=this._depth,r=new Array(n);return e(this._root,n),this},X=(new Map).set("svg","http://www.w3.org/2000/svg").set("xhtml","http://www.w3.org/1999/xhtml").set("xlink","http://www.w3.org/1999/xlink").set("xml","http://www.w3.org/XML/1998/namespace").set("xmlns","http://www.w3.org/2000/xmlns/"),z=function(t){var e=t.indexOf(":"),n=t;return e>=0&&(n=t.slice(0,e),t=t.slice(e+1)),X.has(n)?{space:X.get(n),local:t}:t},I=function(t,e){function n(){this.removeAttribute(t)}function r(){this.removeAttributeNS(t.space,t.local)}function i(){this.setAttribute(t,e)}function o(){this.setAttributeNS(t.space,t.local,e)}function a(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}function u(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}if(t=z(t),arguments.length<2){var s=this.node();return t.local?s.getAttributeNS(t.space,t.local):s.getAttribute(t)}return this.each(null==e?t.local?r:n:"function"==typeof e?t.local?u:a:t.local?o:i)},Y=function(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)},k=function(t,e,n){function r(){this.style.removeProperty(t)}function i(){this.style.setProperty(t,e,n)}function o(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}var a=arguments.length;return 2>a?Y(a=this.node()).getComputedStyle(a,null).getPropertyValue(t):(3>a&&(n=""),this.each(null==e?r:"function"==typeof e?o:i))},G=function(t,e){function n(){delete this[t]}function r(){this[t]=e}function i(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}return arguments.length<2?this.node()[t]:this.each(null==e?n:"function"==typeof e?i:r)},H=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,U=function(t){return t.replace(H,"\\$&")},O=function(t,e){function n(){for(var n=-1;++n<i;)t[n](this,e)}function r(){for(var n=-1,r=e.apply(this,arguments);++n<i;)t[n](this,r)}t=(t+"").trim().split(/^|\s+/);var i=t.length;if(arguments.length<2){var o=this.node(),a=-1;if(e=o.classList){for(;++a<i;)if(!e.contains(t[a]))return!1}else for(e=o.getAttribute("class");++a<i;)if(!classedRe(t[a]).test(e))return!1;return!0}return t=t.map(s),this.each("function"==typeof e?r:n)},j=function(t){function e(){this.textContent=t}function n(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}return arguments.length?(null==t&&(t=""),this.each("function"==typeof t?n:e)):this.node().textContent},K=function(t){function e(){this.innerHTML=t}function n(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}return arguments.length?(null==t&&(t=""),this.each("function"==typeof t?n:e)):this.node().innerHTML},W=function(t,e){function n(){return this.appendChild(t.apply(this,arguments))}function r(){return this.insertBefore(t.apply(this,arguments),e.apply(this,arguments)||null)}return"function"!=typeof t&&(t=l(t)),this.select(arguments.length<2?n:("function"!=typeof e&&(e=m(e)),r))},F=function(){return this.each(function(){var t=this.parentNode;t&&t.removeChild(this)})},J=function(t){return arguments.length?this.property("__data__",t):this.node().__data__},Q=new Map;if(t.document){var Z=document.documentElement;"onmouseenter"in Z||Q.set("mouseenter","mouseover").set("mouseleave","mouseout")}var tt=function(t,e,n){function r(){for(var r=c,o=arguments.length>>1,u=new Array(o);--o>=0;)r=r[arguments[(o<<1)+1]],u[o]=o?r._parent:r;var l=h(e,u,arguments);a&&(l=f(l)),i.call(this),this.addEventListener(t,this[s]=l,l._capture=n),l._listener=e}function i(){var e=this[s];e&&(this.removeEventListener(t,e,e._capture),delete this[s])}function o(){var e,n=new RegExp("^__on([^.]+)"+U(t)+"$");for(var r in this)if(e=r.match(n)){var i=this[r];this.removeEventListener(e[1],i,i._capture),delete this[r]}}var a,u=arguments.length,s="__on"+t,c=this._root;return 2>u?(u=this.node()[s])&&u._listener:(3>u&&(n=!1),(u=t.indexOf("."))>0&&(t=t.slice(0,u)),(a=Q.has(t))&&(t=Q.get(t)),this.each(e?u?r:p:u?i:o))},et=function(t,e){function n(){return _(this,t,e)}function r(){return _(this,t,e.apply(this,arguments))}return this.each("function"==typeof e?r:n)};d.prototype={select:v,selectAll:w,filter:A,data:E,enter:N,exit:T,order:L,sort:P,call:D,nodes:R,node:$,size:B,empty:V,each:q,attr:I,style:k,property:G,"class":O,classed:O,text:j,html:K,append:W,insert:W,remove:F,datum:J,event:tt,on:tt,dispatch:et};var nt=function(t){var e;return"string"==typeof t?(e=[document.querySelector(t)],e._parent=document.documentElement):(e=[t],e._parent=null),new d(e,1)},rt=t.navigator&&/WebKit/.test(t.navigator.userAgent)?-1:0,it=function(t,e){var n=t.ownerSVGElement||t;if(n.createSVGPoint){var r=n.createSVGPoint();if(0>rt){var i=Y(t);if(i.scrollX||i.scrollY){n=nt(i.document.body).append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=n.node().getScreenCTM();rt=!(o.f||o.e),n.remove()}}return rt?(r.x=e.pageX,r.y=e.pageY):(r.x=e.clientX,r.y=e.clientY),r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}var a=t.getBoundingClientRect();return[e.clientX-a.left-t.clientLeft,e.clientY-a.top-t.clientTop]},ot=function(t,e){return arguments.length<2&&(e=g()),e.changedTouches&&(e=e.changedTouches[0]),it(t,e)},at=function(t){var e;return"string"==typeof t?(e=document.querySelectorAll(t),e._parent=document.documentElement):(e=t,e._parent=null),new d(e,1)},ut=function(t,e,n){arguments.length<3&&(n=e,e=g().changedTouches);for(var r,i=0,o=e?e.length:0;o>i;++i)if((r=e[i]).identifier===n)return it(t,r);return null},st=function(t,e){arguments.length<2&&(e=g().touches);for(var n=0,r=e?e.length:0,i=new Array(r);r>n;++n)i[n]=it(t,e[n]);return i},ct={mouse:ot,namespace:z,namespaces:X,requote:U,select:nt,selectAll:at,selection:d,touch:ut,touches:st},lt=t.d3;if(lt)for(var ht in ct)lt[ht]=ct[ht];else t.d3=lt=ct;"function"==typeof define&&define.amd?define(lt):"object"==typeof module&&module.exports&&(module.exports=lt)}(this); |
1015
index.js
@@ -1,998 +0,21 @@ | ||
var d3 = module.exports = global.d3 || (global.d3 = {}), | ||
Map = global.Map || (Map = function() {}, Map.prototype = {set: function(k, v) { this["$" + k] = v; return this; }, get: function(k) { return this["$" + k]; }, has: function(k) { return "$" + k in this; }}, Map), | ||
valueOf = function(value) { return function() { return value; }; }, | ||
selectorOf = function(selector) { return function() { return this.querySelector(selector); }; }, | ||
selectorAllOf = function(selector) { return function() { return this.querySelectorAll(selector); }; }, | ||
filterOf = function(selector) { return function() { return this.matches(selector); }; }, | ||
filterEvents = new Map, | ||
noop = function() {}, | ||
ascending = function(a, b) { return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; }, | ||
collapse = function(string) { return string.trim().replace(/\s+/g, " "); }, | ||
requote = function(string) { return string.replace(requoteRe, "\\$&"); }, | ||
requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g, | ||
bug44083 = global.navigator && /WebKit/.test(global.navigator.userAgent) ? -1 : 0; // https://bugs.webkit.org/show_bug.cgi?id=44083 | ||
import mouse from "./src/mouse"; | ||
import namespace from "./src/namespace"; | ||
import namespaces from "./src/namespaces"; | ||
import requote from "./src/requote"; | ||
import select from "./src/select"; | ||
import selectAll from "./src/selectAll"; | ||
import Selection from "./src/selection"; | ||
import touch from "./src/touch"; | ||
import touches from "./src/touches"; | ||
(function(document) { | ||
if (!document) return; | ||
var element = document.documentElement; | ||
if (!("onmouseenter" in element)) { | ||
filterEvents.set("mouseenter", "mouseover").set("mouseleave", "mouseout"); | ||
} | ||
if (!element.matches) { | ||
var vendorMatches = element.webkitMatchesSelector || element.msMatchesSelector || element.mozMatchesSelector || element.oMatchesSelector; | ||
filterOf = function(selector) { return function() { return vendorMatches.call(this, selector); }; }; | ||
} | ||
})(global.document); | ||
d3.namespaces = (new Map) | ||
.set("svg", "http://www.w3.org/2000/svg") | ||
.set("xhtml", "http://www.w3.org/1999/xhtml") | ||
.set("xlink", "http://www.w3.org/1999/xlink") | ||
.set("xml", "http://www.w3.org/XML/1998/namespace") | ||
.set("xmlns", "http://www.w3.org/2000/xmlns/"); | ||
d3.namespace = function(name) { | ||
var i = name.indexOf(":"), prefix = name; | ||
if (i >= 0) prefix = name.slice(0, i), name = name.slice(i + 1); | ||
return d3.namespaces.has(prefix) ? {space: d3.namespaces.get(prefix), local: name} : name; | ||
export default { | ||
mouse: mouse, | ||
namespace: namespace, | ||
namespaces: namespaces, | ||
requote: requote, | ||
select: select, | ||
selectAll: selectAll, | ||
selection: Selection, | ||
touch: touch, | ||
touches: touches | ||
}; | ||
// When depth = 1, root = [Node, …]. | ||
// When depth = 2, root = [[Node, …], …]. | ||
// When depth = 3, root = [[[Node, …], …], …]. etc. | ||
// Note that [Node, …] and NodeList are used interchangeably; see arrayify. | ||
function Selection(root, depth) { | ||
this._root = root; | ||
this._depth = depth; | ||
this._enter = this._update = this._exit = null; | ||
} | ||
d3.selection = Selection; | ||
Selection.prototype = { | ||
// The selector may either be a selector string (e.g., ".foo") | ||
// or a function that optionally returns the node to select. | ||
select: function(selector) { | ||
var depth = this._depth, | ||
stack = new Array(depth * 2); | ||
if (typeof selector !== "function") selector = selectorOf(selector); | ||
function visit(nodes, update, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node, | ||
subnode, | ||
subnodes = new Array(n); | ||
if (--depth) { | ||
var stack0 = depth * 2, | ||
stack1 = stack0 + 1; | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
stack[stack0] = node._parent.__data__, stack[stack1] = i; | ||
subnodes[i] = visit(node, update && update[i], depth); | ||
} | ||
} | ||
} | ||
// The leaf group may be sparse if the selector returns a falsey value; | ||
// this preserves the index of nodes (unlike selection.filter). | ||
// Propagate data to the new node only if it is defined on the old. | ||
// If this is an enter selection, materialized nodes are moved to update. | ||
else { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
stack[0] = node.__data__, stack[1] = i; | ||
if (subnode = selector.apply(node, stack)) { | ||
if ("__data__" in node) subnode.__data__ = node.__data__; | ||
if (update) update[i] = subnode, delete nodes[i]; | ||
subnodes[i] = subnode; | ||
} | ||
} | ||
} | ||
} | ||
subnodes._parent = nodes._parent; | ||
return subnodes; | ||
} | ||
return new Selection(visit(this._root, this._update && this._update._root, depth), depth); | ||
}, | ||
// The selector may either be a selector string (e.g., ".foo") | ||
// or a function that optionally returns an array of nodes to select. | ||
// This is the only operation that increases the depth of a selection. | ||
selectAll: function(selector) { | ||
var depth = this._depth, | ||
stack = new Array(depth * 2); | ||
if (typeof selector !== "function") selector = selectorAllOf(selector); | ||
function visit(nodes, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node, | ||
subnode, | ||
subnodes = new Array(n); | ||
if (--depth) { | ||
var stack0 = depth * 2, | ||
stack1 = stack0 + 1; | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
stack[stack0] = node._parent.__data__, stack[stack1] = i; | ||
subnodes[i] = visit(node, depth); | ||
} | ||
} | ||
} | ||
// Data is not propagated since there is a one-to-many mapping. | ||
// The parent of the new leaf group is the old node. | ||
else { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
stack[0] = node.__data__, stack[1] = i; | ||
subnodes[i] = subnode = selector.apply(node, stack); | ||
subnode._parent = node; | ||
} | ||
} | ||
} | ||
subnodes._parent = nodes._parent; | ||
return subnodes; | ||
} | ||
return new Selection(visit(this._root, depth), depth + 1); | ||
}, | ||
// The filter may either be a selector string (e.g., ".foo") | ||
// or a function that returns a boolean. | ||
filter: function(filter) { | ||
var depth = this._depth, | ||
stack = new Array(depth * 2); | ||
if (typeof filter !== "function") filter = filterOf(filter); | ||
function visit(nodes, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node, | ||
subnodes; | ||
if (--depth) { | ||
var stack0 = depth * 2, | ||
stack1 = stack0 + 1; | ||
subnodes = new Array(n); | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
stack[stack0] = node._parent.__data__, stack[stack1] = i; | ||
subnodes[i] = visit(node, depth); | ||
} | ||
} | ||
} | ||
// The filter operation does not preserve the original index, | ||
// so the resulting leaf groups are dense (not sparse). | ||
else { | ||
subnodes = []; | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
stack[0] = node.__data__, stack[1] = i; | ||
if (filter.apply(node, stack)) { | ||
subnodes.push(node); | ||
} | ||
} | ||
} | ||
} | ||
subnodes._parent = nodes._parent; | ||
return subnodes; | ||
} | ||
return new Selection(visit(this._root, depth), depth); | ||
}, | ||
// The value may either be an array or a function that returns an array. | ||
// An optional key function may be specified to control how data is bound; | ||
// if no key function is specified, data is bound to nodes by index. | ||
// Or, if no arguments are specified, this method returns all bound data. | ||
data: function(value, key) { | ||
if (!value) { | ||
var data = new Array(this.size()), i = -1; | ||
this.each(function(d) { data[++i] = d; }); | ||
return data; | ||
} | ||
var depth = this._depth - 1, | ||
stack = new Array(depth * 2), | ||
bind = key ? bindKey : bindIndex; | ||
if (typeof value !== "function") value = valueOf(value); | ||
visit(this._root, this.enter()._root, this.exit()._root, depth); | ||
function visit(update, enter, exit, depth) { | ||
var i = -1, | ||
n, | ||
node; | ||
if (depth--) { | ||
var stack0 = depth * 2, | ||
stack1 = stack0 + 1; | ||
n = update.length; | ||
while (++i < n) { | ||
if (node = update[i]) { | ||
stack[stack0] = node._parent.__data__, stack[stack1] = i; | ||
visit(node, enter[i], exit[i], depth); | ||
} | ||
} | ||
} | ||
else { | ||
var j = 0, | ||
before; | ||
bind(update, enter, exit, value.apply(update._parent, stack)); | ||
n = update.length; | ||
// Now connect the enter nodes to their following update node, such that | ||
// appendChild can insert the materialized enter node before this node, | ||
// rather than at the end of the parent node. | ||
while (++i < n) { | ||
if (before = enter[i]) { | ||
if (i >= j) j = i + 1; | ||
while (!(node = update[j]) && ++j < n); | ||
before._next = node || null; | ||
} | ||
} | ||
} | ||
} | ||
function bindIndex(update, enter, exit, data) { | ||
var i = 0, | ||
node, | ||
nodeLength = update.length, | ||
dataLength = data.length, | ||
minLength = Math.min(nodeLength, dataLength); | ||
// Clear the enter and exit arrays, and then initialize to the new length. | ||
enter.length = 0, enter.length = dataLength; | ||
exit.length = 0, exit.length = nodeLength; | ||
for (; i < minLength; ++i) { | ||
if (node = update[i]) { | ||
node.__data__ = data[i]; | ||
} else { | ||
enter[i] = new EnterNode(update._parent, data[i]); | ||
} | ||
} | ||
// Note: we don’t need to delete update[i] here because this loop only | ||
// runs when the data length is greater than the node length. | ||
for (; i < dataLength; ++i) { | ||
enter[i] = new EnterNode(update._parent, data[i]); | ||
} | ||
// Note: and, we don’t need to delete update[i] here because immediately | ||
// following this loop we set the update length to data length. | ||
for (; i < nodeLength; ++i) { | ||
if (node = update[i]) { | ||
exit[i] = update[i]; | ||
} | ||
} | ||
update.length = dataLength; | ||
} | ||
function bindKey(update, enter, exit, data) { | ||
var i, | ||
node, | ||
dataLength = data.length, | ||
nodeLength = update.length, | ||
nodeByKeyValue = new Map, | ||
keyStack = [null, null].concat(stack), | ||
keyValues = new Array(nodeLength), | ||
keyValue; | ||
// Clear the enter and exit arrays, and then initialize to the new length. | ||
enter.length = 0, enter.length = dataLength; | ||
exit.length = 0, exit.length = nodeLength; | ||
// Compute the keys for each node. | ||
for (i = 0; i < nodeLength; ++i) { | ||
if (node = update[i]) { | ||
keyStack[0] = node.__data__, keyStack[1] = i; | ||
keyValues[i] = keyValue = key.apply(node, keyStack); | ||
// Is this a duplicate of a key we’ve previously seen? | ||
// If so, this node is moved to the exit selection. | ||
if (nodeByKeyValue.has(keyValue)) { | ||
exit[i] = node; | ||
} | ||
// Otherwise, record the mapping from key to node. | ||
else { | ||
nodeByKeyValue.set(keyValue, node); | ||
} | ||
} | ||
} | ||
// Now clear the update array and initialize to the new length. | ||
update.length = 0, update.length = dataLength; | ||
// Compute the keys for each datum. | ||
for (i = 0; i < dataLength; ++i) { | ||
keyStack[0] = data[i], keyStack[1] = i; | ||
keyValue = key.apply(update._parent, keyStack); | ||
// Is there a node associated with this key? | ||
// If not, this datum is added to the enter selection. | ||
if (!(node = nodeByKeyValue.get(keyValue))) { | ||
enter[i] = new EnterNode(update._parent, data[i]); | ||
} | ||
// Did we already bind a node using this key? (Or is a duplicate?) | ||
// If unique, the node and datum are joined in the update selection. | ||
// Otherwise, the datum is ignored, neither entering nor exiting. | ||
else if (node !== true) { | ||
update[i] = node; | ||
node.__data__ = data[i]; | ||
} | ||
// Record that we consumed this key, either to enter or update. | ||
nodeByKeyValue.set(keyValue, true); | ||
} | ||
// Take any remaining nodes that were not bound to data, | ||
// and place them in the exit selection. | ||
for (i = 0; i < nodeLength; ++i) { | ||
if ((node = nodeByKeyValue.get(keyValues[i])) !== true) { | ||
exit[i] = node; | ||
} | ||
} | ||
} | ||
return this; | ||
}, | ||
// Lazily constructs the enter selection for this (update) selection. | ||
// Until this selection is joined to data, the enter selection will be empty. | ||
enter: function() { | ||
if (this._enter) return this._enter; | ||
function visit(nodes, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node, | ||
enter = new Array(n); | ||
if (--depth) { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
enter[i] = visit(node, depth); | ||
} | ||
} | ||
} | ||
enter._parent = nodes._parent; | ||
return enter; | ||
} | ||
this._enter = new Selection(visit(arrayify(this), this._depth), this._depth); | ||
this._enter._update = this; | ||
return this._enter; | ||
}, | ||
// Lazily constructs the exit selection for this (update) selection. | ||
// Until this selection is joined to data, the exit selection will be empty. | ||
exit: function() { | ||
function visit(nodes, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node, | ||
exit = new Array(n); | ||
if (--depth) { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
exit[i] = visit(node, depth); | ||
} | ||
} | ||
} | ||
exit._parent = nodes._parent; | ||
return exit; | ||
} | ||
return this._exit || (this._exit = new Selection(visit(arrayify(this), this._depth), this._depth)); | ||
}, | ||
order: function() { | ||
function visit(nodes, depth) { | ||
var i = nodes.length, | ||
node, | ||
next; | ||
if (--depth) { | ||
while (--i >= 0) { | ||
if (node = nodes[i]) { | ||
visit(node, depth); | ||
} | ||
} | ||
} | ||
else { | ||
next = nodes[--i]; | ||
while (--i >= 0) { | ||
if (node = nodes[i]) { | ||
if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); | ||
next = node; | ||
} | ||
} | ||
} | ||
} | ||
visit(this._root, this._depth); | ||
return this; | ||
}, | ||
sort: function(comparator) { | ||
if (!comparator) comparator = ascending; | ||
function compare(a, b) { | ||
return a && b ? comparator(a.__data__, b.__data__) : !a - !b; | ||
} | ||
function visit(nodes, depth) { | ||
if (--depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node; | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
visit(node, depth); | ||
} | ||
} | ||
} | ||
else { | ||
nodes.sort(compare); | ||
} | ||
} | ||
visit(arrayify(this), this._depth); | ||
return this.order(); | ||
}, | ||
call: function() { | ||
var callback = arguments[0]; | ||
callback.apply(arguments[0] = this, arguments); | ||
return this; | ||
}, | ||
nodes: function() { | ||
var nodes = new Array(this.size()), i = -1; | ||
this.each(function() { nodes[++i] = this; }); | ||
return nodes; | ||
}, | ||
node: function() { | ||
function visit(nodes, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node; | ||
if (--depth) { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
if (node = visit(node, depth)) { | ||
return node; | ||
} | ||
} | ||
} | ||
} | ||
else { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
return node; | ||
} | ||
} | ||
} | ||
} | ||
return visit(this._root, this._depth); | ||
}, | ||
size: function() { | ||
var size = 0; | ||
this.each(function() { ++size; }); | ||
return size; | ||
}, | ||
empty: function() { | ||
return !this.node(); | ||
}, | ||
each: function(callback) { | ||
var depth = this._depth, | ||
stack = new Array(depth); | ||
function visit(nodes, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node; | ||
if (--depth) { | ||
var stack0 = depth * 2, | ||
stack1 = stack0 + 1; | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
stack[stack0] = node._parent.__data__, stack[stack1] = i; | ||
visit(node, depth); | ||
} | ||
} | ||
} | ||
else { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
stack[0] = node.__data__, stack[1] = i; | ||
callback.apply(node, stack); | ||
} | ||
} | ||
} | ||
} | ||
visit(this._root, depth); | ||
return this; | ||
}, | ||
attr: function(name, value) { | ||
name = d3.namespace(name); | ||
if (arguments.length < 2) { | ||
var node = this.node(); | ||
return name.local | ||
? node.getAttributeNS(name.space, name.local) | ||
: node.getAttribute(name); | ||
} | ||
function remove() { | ||
this.removeAttribute(name); | ||
} | ||
function removeNS() { | ||
this.removeAttributeNS(name.space, name.local); | ||
} | ||
function setConstant() { | ||
this.setAttribute(name, value); | ||
} | ||
function setConstantNS() { | ||
this.setAttributeNS(name.space, name.local, value); | ||
} | ||
function setFunction() { | ||
var x = value.apply(this, arguments); | ||
if (x == null) this.removeAttribute(name); | ||
else this.setAttribute(name, x); | ||
} | ||
function setFunctionNS() { | ||
var x = value.apply(this, arguments); | ||
if (x == null) this.removeAttributeNS(name.space, name.local); | ||
else this.setAttributeNS(name.space, name.local, x); | ||
} | ||
return this.each(value == null | ||
? (name.local ? removeNS : remove) | ||
: (typeof value === "function" | ||
? (name.local ? setFunctionNS : setFunction) | ||
: (name.local ? setConstantNS : setConstant))); | ||
}, | ||
style: function(name, value, priority) { | ||
var n = arguments.length; | ||
if (n < 2) return windowOf(n = this.node()).getComputedStyle(n, null).getPropertyValue(name); | ||
if (n < 3) priority = ""; | ||
function remove() { | ||
this.style.removeProperty(name); | ||
} | ||
function setConstant() { | ||
this.style.setProperty(name, value, priority); | ||
} | ||
function setFunction() { | ||
var x = value.apply(this, arguments); | ||
if (x == null) this.style.removeProperty(name); | ||
else this.style.setProperty(name, x, priority); | ||
} | ||
return this.each(value == null ? remove : typeof value === "function" ? setFunction : setConstant); | ||
}, | ||
property: function(name, value) { | ||
if (arguments.length < 2) return this.node()[name]; | ||
function remove() { | ||
delete this[name]; | ||
} | ||
function setConstant() { | ||
this[name] = value; | ||
} | ||
function setFunction() { | ||
var x = value.apply(this, arguments); | ||
if (x == null) delete this[name]; | ||
else this[name] = x; | ||
} | ||
return this.each(value == null ? remove : typeof value === "function" ? setFunction : setConstant); | ||
}, | ||
class: function(name, value) { | ||
name = (name + "").trim().split(/^|\s+/); | ||
var n = name.length; | ||
if (arguments.length < 2) { | ||
var node = this.node(), i = -1; | ||
if (value = node.classList) { // SVG elements may not support DOMTokenList! | ||
while (++i < n) if (!value.contains(name[i])) return false; | ||
} else { | ||
value = node.getAttribute("class"); | ||
while (++i < n) if (!classedRe(name[i]).test(value)) return false; | ||
} | ||
return true; | ||
} | ||
name = name.map(classerOf); | ||
function setConstant() { | ||
var i = -1; | ||
while (++i < n) name[i](this, value); | ||
} | ||
function setFunction() { | ||
var i = -1, x = value.apply(this, arguments); | ||
while (++i < n) name[i](this, x); | ||
} | ||
return this.each(typeof value === "function" ? setFunction : setConstant); | ||
}, | ||
text: function(value) { | ||
if (!arguments.length) return this.node().textContent; | ||
function setConstant() { | ||
this.textContent = value; | ||
} | ||
function setFunction() { | ||
var v = value.apply(this, arguments); | ||
this.textContent = v == null ? "" : v; | ||
} | ||
if (value == null) value = ""; | ||
return this.each(typeof value === "function" ? setFunction : setConstant); | ||
}, | ||
html: function(value) { | ||
if (!arguments.length) return this.node().innerHTML; | ||
function setConstant() { | ||
this.innerHTML = value; | ||
} | ||
function setFunction() { | ||
var v = value.apply(this, arguments); | ||
this.innerHTML = v == null ? "" : v; | ||
} | ||
if (value == null) value = ""; | ||
return this.each(typeof value === "function" ? setFunction : setConstant); | ||
}, | ||
append: function(creator, selector) { | ||
if (typeof creator !== "function") creator = creatorOf(creator); | ||
function append() { | ||
return this.appendChild(creator.apply(this, arguments)); | ||
} | ||
function insert() { | ||
return this.insertBefore(creator.apply(this, arguments), selector.apply(this, arguments) || null); | ||
} | ||
return this.select(arguments.length < 2 | ||
? append | ||
: (typeof selector !== "function" && (selector = selectorOf(selector)), insert)); | ||
}, | ||
remove: function() { | ||
return this.each(function() { | ||
var parent = this.parentNode; | ||
if (parent) parent.removeChild(this); | ||
}); | ||
}, | ||
datum: function(value) { | ||
return arguments.length ? this.property("__data__", value) : this.node().__data__; | ||
}, | ||
event: function(type, listener, capture) { | ||
var n = arguments.length, | ||
key = "__on" + type, | ||
filter, | ||
root = this._root; | ||
if (n < 2) return (n = this.node()[key]) && n._listener; | ||
if (n < 3) capture = false; | ||
if ((n = type.indexOf(".")) > 0) type = type.slice(0, n); | ||
if (filter = filterEvents.has(type)) type = filterEvents.get(type); | ||
function add() { | ||
var ancestor = root, i = arguments.length >> 1, ancestors = new Array(i); | ||
while (--i >= 0) ancestor = ancestor[arguments[(i << 1) + 1]], ancestors[i] = i ? ancestor._parent : ancestor; | ||
var l = listenerOf(listener, ancestors, arguments); | ||
if (filter) l = filterListenerOf(l); | ||
remove.call(this); | ||
this.addEventListener(type, this[key] = l, l._capture = capture); | ||
l._listener = listener; | ||
} | ||
function remove() { | ||
var l = this[key]; | ||
if (l) { | ||
this.removeEventListener(type, l, l._capture); | ||
delete this[key]; | ||
} | ||
} | ||
function removeAll() { | ||
var re = new RegExp("^__on([^.]+)" + requote(type) + "$"), match; | ||
for (var name in this) { | ||
if (match = name.match(re)) { | ||
var l = this[name]; | ||
this.removeEventListener(match[1], l, l._capture); | ||
delete this[name]; | ||
} | ||
} | ||
} | ||
return this.each(listener | ||
? (n ? add : noop) // Attempt to add untyped listener is ignored. | ||
: (n ? remove : removeAll)); | ||
}, | ||
dispatch: function(type, params) { | ||
function dispatchConstant() { | ||
return dispatchEvent(this, type, params); | ||
} | ||
function dispatchFunction() { | ||
return dispatchEvent(this, type, params.apply(this, arguments)); | ||
} | ||
return this.each(typeof params === "function" ? dispatchFunction : dispatchConstant); | ||
} | ||
}; | ||
// Deprecated aliases for backwards-compatibility with 3.x: | ||
Selection.prototype.on = Selection.prototype.event; | ||
Selection.prototype.insert = Selection.prototype.append; | ||
Selection.prototype.classed = Selection.prototype.class; | ||
d3.select = function(selector) { | ||
var root; | ||
if (typeof selector === "string") { | ||
var document = global.document; | ||
root = [document.querySelector(selector)]; | ||
root._parent = document.documentElement; | ||
} else { | ||
root = [selector]; | ||
root._parent = null; | ||
} | ||
return new Selection(root, 1); | ||
}; | ||
d3.selectAll = function(selector) { | ||
var root; | ||
if (typeof selector === "string") { | ||
var document = global.document; | ||
root = document.querySelectorAll(selector); | ||
root._parent = document.documentElement; | ||
} else { | ||
root = selector; | ||
root._parent = null; | ||
} | ||
return new Selection(root, 1); | ||
}; | ||
function EnterNode(parent, datum) { | ||
this.ownerDocument = parent.ownerDocument; | ||
this.namespaceURI = parent.namespaceURI; | ||
this._next = null; | ||
this._parent = parent; | ||
this.__data__ = datum; | ||
} | ||
EnterNode.prototype = { | ||
appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, | ||
insertBefore: function(child, next) { return this._parent.insertBefore(child, next || this._next); } | ||
}; | ||
// The leaf groups of the selection hierarchy are initially NodeList, | ||
// and then lazily converted to arrays when mutation is required. | ||
function arrayify(selection) { | ||
function visit(nodes, depth) { | ||
var i = -1, | ||
n = nodes.length, | ||
node; | ||
if (--depth) { | ||
while (++i < n) { | ||
if (node = nodes[i]) { | ||
nodes[i] = visit(node, depth); | ||
} | ||
} | ||
} | ||
else if (!Array.isArray(nodes)) { | ||
var array = new Array(n); | ||
while (++i < n) array[i] = nodes[i]; | ||
array._parent = nodes._parent; | ||
nodes = array; | ||
} | ||
return nodes; | ||
} | ||
return selection._root = visit(selection._root, selection._depth); | ||
} | ||
function creatorOf(name) { | ||
name = d3.namespace(name); | ||
function creator() { | ||
var document = this.ownerDocument, | ||
uri = this.namespaceURI; | ||
return uri | ||
? document.createElementNS(uri, name) | ||
: document.createElement(name); | ||
} | ||
function creatorNS() { | ||
return this.ownerDocument.createElementNS(name.space, name.local); | ||
} | ||
return name.local ? creatorNS : creator; | ||
} | ||
function windowOf(node) { | ||
return node | ||
&& ((node.ownerDocument && node.ownerDocument.defaultView) // node is a Node | ||
|| (node.document && node) // node is a Window | ||
|| node.defaultView); // node is a Document | ||
} | ||
function dispatchEvent(node, type, params) { | ||
var window = windowOf(node), | ||
event = window.CustomEvent; | ||
if (event) { | ||
event = new event(type, params); | ||
} else { | ||
event = window.document.createEvent("Event"); | ||
if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; | ||
else event.initEvent(type, false, false); | ||
} | ||
node.dispatchEvent(event); | ||
} | ||
function classerOf(name) { | ||
var re; | ||
return function(node, value) { | ||
if (c = node.classList) return value ? c.add(name) : c.remove(name); | ||
if (!re) re = new RegExp("(?:^|\\s+)" + requote(name) + "(?:\\s+|$)", "g"); | ||
var c = node.getAttribute("class") || ""; | ||
if (value) { | ||
re.lastIndex = 0; | ||
if (!re.test(c)) node.setAttribute("class", collapse(c + " " + name)); | ||
} else { | ||
node.setAttribute("class", collapse(c.replace(re, " "))); | ||
} | ||
}; | ||
} | ||
function listenerOf(listener, ancestors, args) { | ||
return function(event) { | ||
var i = ancestors.length, event0 = d3.event; // Events can be reentrant (e.g., focus). | ||
while (--i >= 0) args[i << 1] = ancestors[i].__data__; | ||
d3.event = event; | ||
try { | ||
listener.apply(ancestors[0], args); | ||
} finally { | ||
d3.event = event0; | ||
} | ||
}; | ||
} | ||
function filterListenerOf(listener) { | ||
return function(event) { | ||
var related = event.relatedTarget; | ||
if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { | ||
listener(event); | ||
} | ||
}; | ||
} | ||
function point(node, event) { | ||
var svg = node.ownerSVGElement || node; | ||
if (svg.createSVGPoint) { | ||
var point = svg.createSVGPoint(); | ||
if (bug44083 < 0) { | ||
var window = windowOf(node); | ||
if (window.scrollX || window.scrollY) { | ||
svg = d3.select(window.document.body).append("svg").style({position: "absolute", top: 0, left: 0, margin: 0, padding: 0, border: "none"}, "important"); | ||
var ctm = svg.node().getScreenCTM(); | ||
bug44083 = !(ctm.f || ctm.e); | ||
svg.remove(); | ||
} | ||
} | ||
if (bug44083) point.x = event.pageX, point.y = event.pageY; | ||
else point.x = event.clientX, point.y = event.clientY; | ||
point = point.matrixTransform(node.getScreenCTM().inverse()); | ||
return [point.x, point.y]; | ||
} | ||
var rect = node.getBoundingClientRect(); | ||
return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; | ||
} | ||
function source() { | ||
var event = d3.event, source; | ||
while (source = event.sourceEvent) event = source; | ||
return event; | ||
} | ||
d3.mouse = function(node, event) { | ||
if (arguments.length < 2) event = source(); | ||
if (event.changedTouches) event = event.changedTouches[0]; | ||
return point(node, event); | ||
}; | ||
d3.touch = function(node, touches, identifier) { | ||
if (arguments.length < 3) identifier = touches, touches = source().changedTouches; | ||
for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) { | ||
if ((touch = touches[i]).identifier === identifier) { | ||
return point(node, touch); | ||
} | ||
} | ||
return null; | ||
}; | ||
d3.touches = function(node, touches) { | ||
if (arguments.length < 2) touches = source().touches; | ||
for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) { | ||
points[i] = point(node, touches[i]); | ||
} | ||
return points; | ||
}; |
{ | ||
"name": "d3-selection", | ||
"version": "0.2.0", | ||
"version": "0.3.0", | ||
"description": "Data-driven DOM manipulation.", | ||
@@ -11,9 +11,9 @@ "main": "index", | ||
"devDependencies": { | ||
"browserify": "10", | ||
"d3-bundler": "0.1", | ||
"faucet": "0.0", | ||
"jsdom": "3", | ||
"requirejs": "2", | ||
"tape": "4", | ||
"uglify-js": "2", | ||
"requirejs": "2" | ||
"uglify-js": "2" | ||
} | ||
} |
@@ -7,3 +7,3 @@ # d3-selection | ||
* The implementation is now organized into CommonJS modules, rather than the ad hoc [SMASH](https://github.com/mbostock/smash) concatenation process used previously. A standalone build is provided for your convenience using [Browserify](http://browserify.org/), but you are free to define your own build process (e.g., [Webpack](https://webpack.github.io/)). See [#2220](https://github.com/mbostock/d3/issues/2220). | ||
* The implementation is now organized into ES6 modules, rather than the ad hoc [SMASH](https://github.com/mbostock/smash) bundling used previously. A [UMD](https://github.com/umdjs/umd) build is provided for your convenience using [Esperanto](http://esperantojs.org/), but you are free to define your own build process (e.g., [Browserify](http://browserify.org/) or [Webpack](https://webpack.github.io/)). See [#2220](https://github.com/mbostock/d3/issues/2220). | ||
@@ -10,0 +10,0 @@ * The Selection class now extends Object, not Array, obviating the need for [prototype injection](http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/#wrappers_prototype_chain_injection) (and [direct property injection](http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/#wrappers_direct_property_injection) on runtimes that do not support `__proto__`). See [#2191](https://github.com/mbostock/d3/issues/2191). |
var tape = require("tape"), | ||
jsdom = require("jsdom"), | ||
d3 = require("../"); | ||
d3 = require("../d3-selection"); | ||
@@ -5,0 +5,0 @@ tape("d3.selectAll can select by string", function(test) { |
var tape = require("tape"), | ||
jsdom = require("jsdom"), | ||
d3 = require("../"); | ||
d3 = require("../d3-selection"); | ||
@@ -5,0 +5,0 @@ tape("d3.select can select an element", function(test) { |
var tape = require("tape"), | ||
jsdom = require("jsdom"), | ||
d3 = require("../"); | ||
d3 = require("../d3-selection"); | ||
@@ -5,0 +5,0 @@ tape("d3.selectAll can select an array of elements", function(test) { |
var tape = require("tape"), | ||
jsdom = require("jsdom"), | ||
d3 = require("../"); | ||
d3 = require("../d3-selection"); | ||
@@ -5,0 +5,0 @@ tape("selection.enter initially returns an empty selection", function(test) { |
var tape = require("tape"), | ||
jsdom = require("jsdom"), | ||
d3 = require("../"); | ||
d3 = require("../d3-selection"); | ||
@@ -5,0 +5,0 @@ tape("selection.event registers a listener which receives events", function(test) { |
var tape = require("tape"), | ||
jsdom = require("jsdom"), | ||
d3 = require("../"); | ||
d3 = require("../d3-selection"); | ||
@@ -5,0 +5,0 @@ tape("selection.exit initially returns an empty selection", function(test) { |
var tape = require("tape"), | ||
jsdom = require("jsdom"), | ||
d3 = require("../"); | ||
d3 = require("../d3-selection"); | ||
@@ -5,0 +5,0 @@ tape("selection.select can select elements (in the simplest case)", function(test) { |
var tape = require("tape"), | ||
jsdom = require("jsdom"), | ||
d3 = require("../"); | ||
d3 = require("../d3-selection"); | ||
@@ -5,0 +5,0 @@ tape("selection.selectAll can select elements (in the simplest case)", function(test) { |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
105095
59
2438
2
0