diff options
Diffstat (limited to 'visualize/static/d3.js')
-rw-r--r-- | visualize/static/d3.js | 99 |
1 files changed, 65 insertions, 34 deletions
diff --git a/visualize/static/d3.js b/visualize/static/d3.js index d71f57d5..9042897e 100644 --- a/visualize/static/d3.js +++ b/visualize/static/d3.js @@ -10,7 +10,7 @@ try { d3_style_setProperty.call(this, name, value + "", priority); }; } -d3 = {version: "2.6.1"}; // semver +d3 = {version: "2.7.2"}; // semver var d3_array = d3_arraySlice; // conversion for NodeLists function d3_arrayCopy(pseudoarray) { @@ -424,9 +424,10 @@ d3.round = function(x, n) { }; d3.xhr = function(url, mime, callback) { var req = new XMLHttpRequest; - if (arguments.length < 3) callback = mime; + if (arguments.length < 3) callback = mime, mime = null; else if (mime && req.overrideMimeType) req.overrideMimeType(mime); req.open("GET", url, true); + if (mime) req.setRequestHeader("Accept", mime); req.onreadystatechange = function() { if (req.readyState === 4) callback(req.status < 300 ? req : null); }; @@ -1346,12 +1347,16 @@ function d3_selection(groups) { } var d3_select = function(s, n) { return n.querySelector(s); }, - d3_selectAll = function(s, n) { return n.querySelectorAll(s); }; + d3_selectAll = function(s, n) { return n.querySelectorAll(s); }, + d3_selectRoot = document.documentElement, + d3_selectMatcher = d3_selectRoot.matchesSelector || d3_selectRoot.webkitMatchesSelector || d3_selectRoot.mozMatchesSelector || d3_selectRoot.msMatchesSelector || d3_selectRoot.oMatchesSelector, + d3_selectMatches = function(n, s) { return d3_selectMatcher.call(n, s); }; // Prefer Sizzle, if available. if (typeof Sizzle === "function") { d3_select = function(s, n) { return Sizzle(s, n)[0]; }; d3_selectAll = function(s, n) { return Sizzle.uniqueSort(Sizzle(s, n)); }; + d3_selectMatches = Sizzle.matchesSelector; } var d3_selectionPrototype = []; @@ -1570,16 +1575,18 @@ d3_selectionPrototype.property = function(name, value) { ? propertyFunction : propertyConstant)); }; d3_selectionPrototype.text = function(value) { - return arguments.length < 1 ? this.node().textContent - : (this.each(typeof value === "function" - ? function() { this.textContent = value.apply(this, arguments); } - : function() { this.textContent = value; })); + return arguments.length < 1 + ? this.node().textContent : this.each(typeof value === "function" + ? function() { var v = value.apply(this, arguments); this.textContent = v == null ? "" : v; } : value == null + ? function() { this.textContent = ""; } + : function() { this.textContent = value; }); }; d3_selectionPrototype.html = function(value) { - return arguments.length < 1 ? this.node().innerHTML - : (this.each(typeof value === "function" - ? function() { this.innerHTML = value.apply(this, arguments); } - : function() { this.innerHTML = value; })); + return arguments.length < 1 + ? this.node().innerHTML : this.each(typeof value === "function" + ? function() { var v = value.apply(this, arguments); this.innerHTML = v == null ? "" : v; } : value == null + ? function() { this.innerHTML = ""; } + : function() { this.innerHTML = value; }); }; // TODO append(node)? // TODO append(function)? @@ -1735,13 +1742,14 @@ d3_selectionPrototype.data = function(data, join) { function d3_selection_dataNode(data) { return {__data__: data}; } -// TODO preserve null elements to maintain index? d3_selectionPrototype.filter = function(filter) { var subgroups = [], subgroup, group, node; + if (typeof filter !== "function") filter = d3_selection_filter(filter); + for (var j = 0, m = this.length; j < m; j++) { subgroups.push(subgroup = []); subgroup.parentNode = (group = this[j]).parentNode; @@ -1754,24 +1762,33 @@ d3_selectionPrototype.filter = function(filter) { return d3_selection(subgroups); }; + +function d3_selection_filter(selector) { + return function() { + return d3_selectMatches(this, selector); + }; +} d3_selectionPrototype.map = function(map) { return this.each(function() { this.__data__ = map.apply(this, arguments); }); }; -d3_selectionPrototype.sort = function(comparator) { - comparator = d3_selection_sortComparator.apply(this, arguments); - for (var j = 0, m = this.length; j < m; j++) { - for (var group = this[j].sort(comparator), i = 1, n = group.length, prev = group[0]; i < n; i++) { - var node = group[i]; - if (node) { - if (prev) prev.parentNode.insertBefore(node, prev.nextSibling); - prev = node; +d3_selectionPrototype.order = function() { + for (var j = -1, m = this.length; ++j < m;) { + for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0;) { + if (node = group[i]) { + if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); + next = node; } } } return this; }; +d3_selectionPrototype.sort = function(comparator) { + comparator = d3_selection_sortComparator.apply(this, arguments); + for (var j = -1, m = this.length; ++j < m;) this[j].sort(comparator); + return this.order(); +}; function d3_selection_sortComparator(comparator) { if (!arguments.length) comparator = d3.ascending; @@ -1863,7 +1880,7 @@ d3_selectionPrototype.transition = function() { }; var d3_selectionRoot = d3_selection([[document]]); -d3_selectionRoot[0].parentNode = document.documentElement; +d3_selectionRoot[0].parentNode = d3_selectRoot; // TODO fast singleton implementation! // TODO select(function) @@ -2262,9 +2279,13 @@ var d3_timer_frame = window.requestAnimationFrame || window.msRequestAnimationFrame || function(callback) { setTimeout(callback, 17); }; d3.transform = function(string) { - d3_transformG.setAttribute("transform", string); - var t = d3_transformG.transform.baseVal.consolidate(); - return new d3_transform(t ? t.matrix : d3_transformIdentity); + var g = document.createElementNS(d3.ns.prefix.svg, "g"), + identity = {a: 1, b: 0, c: 0, d: 1, e: 0, f: 0}; + return (d3.transform = function(string) { + g.setAttribute("transform", string); + var t = g.transform.baseVal.consolidate(); + return new d3_transform(t ? t.matrix : identity); + })(string); }; // Compute x-scale and normalize the first row. @@ -2316,9 +2337,7 @@ function d3_transformCombine(a, b, k) { return a; } -var d3_transformG = document.createElementNS(d3.ns.prefix.svg, "g"), - d3_transformIdentity = {a: 1, b: 0, c: 0, d: 1, e: 0, f: 0}, - d3_transformDegrees = 180 / Math.PI; +var d3_transformDegrees = 180 / Math.PI; function d3_noop() {} d3.scale = {}; @@ -2559,11 +2578,11 @@ function d3_scale_log(linear, log) { var d3_scale_logFormat = d3.format(".0e"); function d3_scale_logp(x) { - return Math.log(x) / Math.LN10; + return Math.log(x < 0 ? 0 : x) / Math.LN10; } function d3_scale_logn(x) { - return -Math.log(-x) / Math.LN10; + return -Math.log(x > 0 ? 0 : -x) / Math.LN10; } d3_scale_logp.pow = function(x) { @@ -2702,7 +2721,7 @@ function d3_scale_ordinal(domain, ranger) { }; scale.rangeExtent = function() { - return ranger.x; + return ranger.t === "range" ? d3_scaleExtent(ranger.x) : ranger.x; }; scale.copy = function() { @@ -3489,10 +3508,10 @@ d3.svg.chord = function() { var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i); return "M" + s.p0 - + arc(s.r, s.p1) + (equals(s, t) + + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) - + arc(t.r, t.p1) + + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z"; } @@ -3515,8 +3534,8 @@ d3.svg.chord = function() { return a.a0 == b.a0 && a.a1 == b.a1; } - function arc(r, p) { - return "A" + r + "," + r + " 0 0,1 " + p; + function arc(r, p, a) { + return "A" + r + "," + r + " 0 " + +(a > Math.PI) + ",1 " + p; } function curve(r0, p0, r1, p1) { @@ -3836,7 +3855,10 @@ d3.svg.axis = function() { switch (orient) { case "bottom": { tickTransform = d3_svg_axisX; + subtickEnter.attr("y2", tickMinorSize); subtickUpdate.attr("x2", 0).attr("y2", tickMinorSize); + tickEnter.select("line").attr("y2", tickMajorSize); + tickEnter.select("text").attr("y", Math.max(tickMajorSize, 0) + tickPadding); tickUpdate.select("line").attr("x2", 0).attr("y2", tickMajorSize); tickUpdate.select("text").attr("x", 0).attr("y", Math.max(tickMajorSize, 0) + tickPadding).attr("dy", ".71em").attr("text-anchor", "middle"); pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize); @@ -3844,7 +3866,10 @@ d3.svg.axis = function() { } case "top": { tickTransform = d3_svg_axisX; + subtickEnter.attr("y2", -tickMinorSize); subtickUpdate.attr("x2", 0).attr("y2", -tickMinorSize); + tickEnter.select("line").attr("y2", -tickMajorSize); + tickEnter.select("text").attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)); tickUpdate.select("line").attr("x2", 0).attr("y2", -tickMajorSize); tickUpdate.select("text").attr("x", 0).attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("dy", "0em").attr("text-anchor", "middle"); pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize); @@ -3852,7 +3877,10 @@ d3.svg.axis = function() { } case "left": { tickTransform = d3_svg_axisY; + subtickEnter.attr("x2", -tickMinorSize); subtickUpdate.attr("x2", -tickMinorSize).attr("y2", 0); + tickEnter.select("line").attr("x2", -tickMajorSize); + tickEnter.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)); tickUpdate.select("line").attr("x2", -tickMajorSize).attr("y2", 0); tickUpdate.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("y", 0).attr("dy", ".32em").attr("text-anchor", "end"); pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize); @@ -3860,7 +3888,10 @@ d3.svg.axis = function() { } case "right": { tickTransform = d3_svg_axisY; + subtickEnter.attr("x2", tickMinorSize); subtickUpdate.attr("x2", tickMinorSize).attr("y2", 0); + tickEnter.select("line").attr("x2", tickMajorSize); + tickEnter.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding); tickUpdate.select("line").attr("x2", tickMajorSize).attr("y2", 0); tickUpdate.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding).attr("y", 0).attr("dy", ".32em").attr("text-anchor", "start"); pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize); |