diff --git a/Makefile b/Makefile index 7aac1ebf..ec745de5 100644 --- a/Makefile +++ b/Makefile @@ -35,8 +35,10 @@ d3.core.js: \ src/core/descending.js \ src/core/merge.js \ src/core/split.js \ + src/core/collapse.js \ src/core/call.js \ src/core/range.js \ + src/core/requote.js \ src/core/text.js \ src/core/json.js \ src/core/ns.js \ diff --git a/d3.js b/d3.js index 9faf991c..cc473863 100644 --- a/d3.js +++ b/d3.js @@ -1,4 +1,4 @@ -d3 = {version: "0.26.1"}; // semver +d3 = {version: "0.27.0"}; // semver if (!Date.now) Date.now = function() { return +new Date(); }; @@ -44,6 +44,9 @@ d3["split"] = function(array, f) { function d3_splitter(d) { return d == null; } +function d3_collapse(s) { + return s.replace(/(^\s+)|(\s+$)/g, "").replace(/\s+/g, " "); +} function d3_call(callback, var_args) { var_args = d3_array(arguments); var_args[0] = this; @@ -66,6 +69,11 @@ d3.range = function(start, stop, step) { else while ((j = start + step * ++i) < stop) range.push(j); return range; }; +d3["requote"] = function(s) { + return s.replace(d3_requote_re, "\\$&"); +}; + +var d3_requote_re = /[\\\^\$\*\+\?\[\]\(\)\.\{\}]/g; d3.text = function(url, mime, callback) { var req = new XMLHttpRequest(); if (arguments.length == 3) req.overrideMimeType(mime); @@ -1057,6 +1065,43 @@ function d3_selection(groups) { : (name.local ? attrConstantNS : attrConstant))); }; + groups["classed"] = function(name, value) { + var re = new RegExp("(^|\\s+)" + d3["requote"](name) + "(\\s+|$)", "g"); + + // If no value is specified, return the first value. + if (arguments.length < 2) { + return first(function() { + return re.test(this.className); + }); + } + + /** @this {Element} */ + function classedAdd() { + var classes = this.className; + if (!re.test(classes)) { + this.className = d3_collapse(classes + " " + name); + } + } + + /** @this {Element} */ + function classedRemove() { + var classes = d3_collapse(this.className.replace(re, " ")); + this.className = classes.length ? classes : null; + } + + /** @this {Element} */ + function classedFunction() { + (value.apply(this, arguments) + ? classedAdd + : classedRemove).call(this); + } + + return groups.each(typeof value == "function" + ? classedFunction : value + ? classedAdd + : classedRemove); + }; + groups.style = function(name, value, priority) { if (arguments.length < 3) priority = null; @@ -1203,7 +1248,7 @@ function d3_selection(groups) { }; groups.sort = function(comparator) { - comparator = d3_comparator.apply(this, arguments); + comparator = d3_selection_comparator.apply(this, arguments); for (var j = 0, m = groups.length; j < m; j++) { var group = groups[j]; group.sort(comparator); @@ -1253,20 +1298,12 @@ function d3_selection_join(key) { }; } -function d3_comparator(comparator) { - if (!arguments.length) comparator = d3_ascending; +function d3_selection_comparator(comparator) { + if (!arguments.length) comparator = d3.ascending; return function(a, b) { return comparator(a && a.__data__, b && b.__data__); }; } - -function d3_ascending(a, b) { - return a < b ? -1 : a > b ? 1 : 0; -} - -function d3_descending(a, b) { - return a < b ? 1 : a > b ? -1 : 0; -} d3.transition = d3_root.transition; var d3_transitionId = 0, diff --git a/d3.min.js b/d3.min.js index 503f2434..d9e8708b 100644 --- a/d3.min.js +++ b/d3.min.js @@ -1,61 +1,63 @@ -(function(){var o=null;d3={version:"0.26.1"};if(!Date.now)Date.now=function(){return+new Date};if(!Object.create)Object.create=function(a){function b(){}b.prototype=a;return new b};function x(a){return Array.prototype.slice.call(a)}function y(a){return typeof a=="function"?a:function(){return a}}d3.ascending=function(a,b){return ab?1:0};d3.descending=function(a,b){return ba?1:0};d3.merge=function(a){return Array.prototype.concat.apply([],a)}; -d3.split=function(a,b){var e=[],f=[],c,d=-1,h=a.length;if(arguments.length<2)b=aa;for(;++db;)f.push(d);else for(;(d=a+e*++c)b?1:0};d3.descending=function(a,b){return ba?1:0};d3.merge=function(a){return Array.prototype.concat.apply([],a)}; +d3.split=function(a,b){var e=[],f=[],c,d=-1,h=a.length;if(arguments.length<2)b=aa;for(;++db;)f.push(d);else for(;(d=a+e*++c)=0?g.substring(i):(i=g.length,""),m=[];i>0;)m.push(g.substring(i-=3,i+3));g=m.reverse().join(",")+j}i=g.length;if(i=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,da=F(2),ea=F(3),ma={linear:function(){return fa},poly:F,quad:function(){return da},cubic:function(){return ea},sin:function(){return ga},exp:function(){return ha},circle:function(){return ia},elastic:ja,back:ka,bounce:function(){return la}},pa={"in":function(a){return a},out:na,"in-out":oa,"out-in":function(a){return oa(na(a))}}; -d3.ease=function(a){var b=a.indexOf("-");return pa[b>=0?a.substring(b+1):"in"](ma[b>=0?a.substring(0,b):a].apply(o,Array.prototype.slice.call(arguments,1)))};function na(a){return function(b){return 1-a(1-b)}}function oa(a){return function(b){return 0.5*(b<0.5?a(2*b):2-a(2-2*b))}}function fa(a){return a}function F(a){return function(b){return Math.pow(b,a)}}function ga(a){return 1-Math.cos(a*Math.PI/2)}function ha(a){return a?Math.pow(2,10*(a-1))-0.0010:0} -function ia(a){return 1-Math.sqrt(1-a*a)}function ja(a,b){var e;if(arguments.length<2)b=0.45;if(arguments.length<1){a=1;e=b/4}else e=b/(2*Math.PI)*Math.asin(1/a);return function(f){return 1+a*Math.pow(2,10*-f)*Math.sin((f-e)*2*Math.PI/b)}}function ka(a){a||(a=1.70158);return function(b){return b*b*((a+1)*b-a)}}function la(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375}d3.event=o; +d3.ns={prefix:{svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},qualify:function(a){var b=a.indexOf(":");return b<0?a:{space:d3.ns.prefix[a.substring(0,b)],local:a.substring(b+1)}}};d3.dispatch=function(){for(var a={},b,e=0,f=arguments.length;e=0?g.substring(i):(i=g.length,""),l=[];i>0;)l.push(g.substring(i-=3,i+3));g=l.reverse().join(",")+j}i=g.length;if(i=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,fa=F(2),ga=F(3),oa={linear:function(){return ha},poly:F,quad:function(){return fa},cubic:function(){return ga},sin:function(){return ia},exp:function(){return ja},circle:function(){return ka},elastic:la,back:ma,bounce:function(){return na}},ra={"in":function(a){return a},out:pa,"in-out":qa,"out-in":function(a){return qa(pa(a))}}; +d3.ease=function(a){var b=a.indexOf("-");return ra[b>=0?a.substring(b+1):"in"](oa[b>=0?a.substring(0,b):a].apply(o,Array.prototype.slice.call(arguments,1)))};function pa(a){return function(b){return 1-a(1-b)}}function qa(a){return function(b){return 0.5*(b<0.5?a(2*b):2-a(2-2*b))}}function ha(a){return a}function F(a){return function(b){return Math.pow(b,a)}}function ia(a){return 1-Math.cos(a*Math.PI/2)}function ja(a){return a?Math.pow(2,10*(a-1))-0.0010:0} +function ka(a){return 1-Math.sqrt(1-a*a)}function la(a,b){var e;if(arguments.length<2)b=0.45;if(arguments.length<1){a=1;e=b/4}else e=b/(2*Math.PI)*Math.asin(1/a);return function(f){return 1+a*Math.pow(2,10*-f)*Math.sin((f-e)*2*Math.PI/b)}}function ma(a){a||(a=1.70158);return function(b){return b*b*((a+1)*b-a)}}function na(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375}d3.event=o; d3.interpolate=function(a,b){if(typeof b=="number")return d3.interpolateNumber(+a,b);if(typeof b=="string")return b in G||/^(#|rgb\(|hsl\()/.test(b)?d3.interpolateRgb(String(a),b):d3.interpolateString(String(a),b);if(b instanceof Array)return d3.interpolateArray(a,b);return d3.interpolateObject(a,b)};d3.interpolateNumber=function(a,b){b-=a;return function(e){return a+b*e}}; d3.interpolateString=function(a,b){var e,f,c=0,d=[],h=[],g,i;for(f=0;e=H.exec(b);++f){e.index&&d.push(b.substring(c,e.index));h.push({a:d.length,x:e[0]});d.push(o);c=H.lastIndex}c360)h-=360;else if(h<0)h+=360;if(h<60)return c+(d-c)*h/60;if(h<180)return d;if(h<240)return c+(d-c)*(240-h)/60;return c}var c,d;a%=360;if(a<0)a+=360;b=b<0?0:b>1?1:b;e=e<0?0:e>1?1:e;d=e<=0.5?e*(1+b):e+b-e*b;c=2*e-d;return J(Math.round(f(a+120)*255),Math.round(f(a)*255),Math.round(f(a-120)*255))}var P=O([[document]]);P[0].parentNode=document.documentElement; +seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},N;for(N in G)G[N]=I(G[N],J,ta);d3.hsl=function(a,b,e){return arguments.length==1?I(""+a,va,M):M(+a,+b,+e)}; +function M(a,b,e){return{h:a,s:b,l:e,toString:wa}}function wa(){return"hsl("+this.h+","+this.s*100+"%,"+this.l*100+"%)"}function ta(a,b,e){function f(h){if(h>360)h-=360;else if(h<0)h+=360;if(h<60)return c+(d-c)*h/60;if(h<180)return d;if(h<240)return c+(d-c)*(240-h)/60;return c}var c,d;a%=360;if(a<0)a+=360;b=b<0?0:b>1?1:b;e=e<0?0:e>1?1:e;d=e<=0.5?e*(1+b):e+b-e*b;c=2*e-d;return J(Math.round(f(a+120)*255),Math.round(f(a)*255),Math.round(f(a-120)*255))}var P=O([[document]]);P[0].parentNode=document.documentElement; d3.select=function(a){return typeof a=="string"?P.select(a):O([[a]])};d3.selectAll=function(a){return typeof a=="string"?P.selectAll(a):O([x(a)])}; -function O(a){function b(c){for(var d=[],h,g,i,j,m=0,p=a.length;mb?1:0}d3.transition=P.transition;var ya=0,R=0; -function Q(a){function b(k){var n=true,q=-1;a.each(function(){if(i[++q]!=2){var l=(k-j[q])/m[q],t=this.__transition__,u,s,v=d[q];if(l<1){n=false;if(l<0)return}else l=1;if(i[q]){if(t.d!=f){i[q]=2;return}}else if(!t||t.d>f){i[q]=2;return}else{i[q]=1;g.start.dispatch.apply(this,arguments);v=d[q]={};t.d=f;for(s in c)v[s]=c[s].apply(this,arguments)}u=r(l);for(s in c)v[s].call(this,u);if(l==1){i[q]=2;if(t.d==f){l=t.o;if(l==f){delete this.__transition__;h&&this.parentNode.removeChild(this)}R=f;g.end.dispatch.apply(this, -arguments);R=0;t.o=l}}}});return n}var e={},f=R||++ya,c={},d=[],h=false,g=d3.dispatch("start","end"),i=[],j=[],m=[],p,r=d3.ease("cubic-in-out");a.each(function(){(this.__transition__||(this.__transition__={})).o=f});e.delay=function(k){var n=Infinity,q=-1;if(typeof k=="function")a.each(function(){var l=j[++q]=+k.apply(this,arguments);if(lp)p=q})}else{p=+k;a.each(function(){m[++n]=p})}return e};e.ease=function(k){r=typeof k=="string"?d3.ease(k):k;return e};e.attrTween=function(k,n){function q(t,u){var s=n.call(this,t,u,this.getAttribute(k));return function(v){this.setAttribute(k,s(v))}}function l(t,u){var s=n.call(this,t,u,this.getAttributeNS(k.space,k.local));return function(v){this.setAttributeNS(k.space,k.local,s(v))}}c["attr."+k]=k.local?l:q;return e};e.attr=function(k,n){return e.attrTween(k,Aa(n))};e.styleTween= -function(k,n,q){c["style."+k]=function(l,t){var u=n.call(this,l,t,window.getComputedStyle(this,o).getPropertyValue(k));return function(s){this.style.setProperty(k,u(s),q)}};return e};e.style=function(k,n,q){return e.styleTween(k,Aa(n),q)};e.select=function(k){var n;k=Q(a.select(k)).ease(r);n=-1;k.delay(function(){return j[++n]});n=-1;k.duration(function(){return m[++n]});return k};e.selectAll=function(k){var n;k=Q(a.selectAll(k)).ease(r);n=-1;k.delay(function(q,l){return j[l?n:++n]});n=-1;k.duration(function(q, -l){return m[l?n:++n]});return k};e.remove=function(){h=true;return e};e.each=function(k,n){g[k].add(n);return e};e.call=E;return e.delay(0).duration(250)}var S=o,T=0,U;function za(a,b){var e=Date.now(),f=false,c=e+b,d=S;if(isFinite(b)){for(;d;){if(d.n==a){d.j=e;d.delay=b;f=true}else{var h=d.j+d.delay;if(he.delay)e.t=e.n(a);e=e.next}a=o;for(b=S;b;)b=b.t?a?a.next=b.next:S=b.next:(a=b).next;a||(U=clearInterval(U))}function Aa(a){return typeof a=="function"?function(b,e,f){return d3.interpolate(f,a.call(this,b,e))}:function(b,e,f){return d3.interpolate(f,a)}}d3.scale={}; -d3.scale.linear=function(){function a(j){return i((j-e)*h)}function b(j){var m=Math.min(e,f),p=Math.max(e,f),r=p-m,k=Math.pow(10,Math.floor(Math.log(r/j)/Math.LN10));j=j/(r/k);if(j<=0.15)k*=10;else if(j<=0.35)k*=5;else if(j<=0.75)k*=2;return{start:Math.ceil(m/k)*k,stop:Math.floor(p/k)*k+k*0.5,q:k}}var e=0,f=1,c=0,d=1,h=1/(f-e),g=(f-e)/(d-c),i=d3.interpolate(c,d);a.invert=function(j){return(j-c)*g+e};a.domain=function(j){if(!arguments.length)return[e,f];e=j[0];f=j[1];h=1/(f-e);g=(f-e)/(d-c);return a}; +function O(a){function b(c){for(var d=[],h,g,i,j,l=0,p=a.length;lf){i[q]=2;return}else{i[q]=1;g.start.dispatch.apply(this,arguments);v=d[q]={};t.d=f;for(s in c)v[s]=c[s].apply(this,arguments)}u=r(m);for(s in c)v[s].call(this,u);if(m==1){i[q]=2;if(t.d==f){m=t.o;if(m==f){delete this.__transition__;h&&this.parentNode.removeChild(this)}R=f;g.end.dispatch.apply(this, +arguments);R=0;t.o=m}}}});return n}var e={},f=R||++za,c={},d=[],h=false,g=d3.dispatch("start","end"),i=[],j=[],l=[],p,r=d3.ease("cubic-in-out");a.each(function(){(this.__transition__||(this.__transition__={})).o=f});e.delay=function(k){var n=Infinity,q=-1;if(typeof k=="function")a.each(function(){var m=j[++q]=+k.apply(this,arguments);if(mp)p=q})}else{p=+k;a.each(function(){l[++n]=p})}return e};e.ease=function(k){r=typeof k=="string"?d3.ease(k):k;return e};e.attrTween=function(k,n){function q(t,u){var s=n.call(this,t,u,this.getAttribute(k));return function(v){this.setAttribute(k,s(v))}}function m(t,u){var s=n.call(this,t,u,this.getAttributeNS(k.space,k.local));return function(v){this.setAttributeNS(k.space,k.local,s(v))}}c["attr."+k]=k.local?m:q;return e};e.attr=function(k,n){return e.attrTween(k,Ba(n))};e.styleTween= +function(k,n,q){c["style."+k]=function(m,t){var u=n.call(this,m,t,window.getComputedStyle(this,o).getPropertyValue(k));return function(s){this.style.setProperty(k,u(s),q)}};return e};e.style=function(k,n,q){return e.styleTween(k,Ba(n),q)};e.select=function(k){var n;k=Q(a.select(k)).ease(r);n=-1;k.delay(function(){return j[++n]});n=-1;k.duration(function(){return l[++n]});return k};e.selectAll=function(k){var n;k=Q(a.selectAll(k)).ease(r);n=-1;k.delay(function(q,m){return j[m?n:++n]});n=-1;k.duration(function(q, +m){return l[m?n:++n]});return k};e.remove=function(){h=true;return e};e.each=function(k,n){g[k].add(n);return e};e.call=ba;return e.delay(0).duration(250)}var S=o,T=0,U;function Aa(a,b){var e=Date.now(),f=false,c=e+b,d=S;if(isFinite(b)){for(;d;){if(d.n==a){d.j=e;d.delay=b;f=true}else{var h=d.j+d.delay;if(he.delay)e.t=e.n(a);e=e.next}a=o;for(b=S;b;)b=b.t?a?a.next=b.next:S=b.next:(a=b).next;a||(U=clearInterval(U))}function Ba(a){return typeof a=="function"?function(b,e,f){return d3.interpolate(f,a.call(this,b,e))}:function(b,e,f){return d3.interpolate(f,a)}}d3.scale={}; +d3.scale.linear=function(){function a(j){return i((j-e)*h)}function b(j){var l=Math.min(e,f),p=Math.max(e,f),r=p-l,k=Math.pow(10,Math.floor(Math.log(r/j)/Math.LN10));j=j/(r/k);if(j<=0.15)k*=10;else if(j<=0.35)k*=5;else if(j<=0.75)k*=2;return{start:Math.ceil(l/k)*k,stop:Math.floor(p/k)*k+k*0.5,q:k}}var e=0,f=1,c=0,d=1,h=1/(f-e),g=(f-e)/(d-c),i=d3.interpolate(c,d);a.invert=function(j){return(j-c)*g+e};a.domain=function(j){if(!arguments.length)return[e,f];e=j[0];f=j[1];h=1/(f-e);g=(f-e)/(d-c);return a}; a.range=function(j){if(!arguments.length)return[c,d];c=j[0];d=j[1];g=(f-e)/(d-c);i=d3.interpolate(c,d);return a};a.ticks=function(j){j=b(j);return d3.range(j.start,j.stop,j.q)};a.tickFormat=function(j){return d3.format(",."+Math.max(0,-Math.floor(Math.log(b(j).q)/Math.LN10+0.01))+"f")};return a}; d3.scale.log=function(){function a(c){return Math.log(c)/Math.LN10}function b(c){return Math.pow(10,c)}function e(c){return f(a(c))}var f=d3.scale.linear();e.invert=function(c){return b(f.invert(c))};e.domain=function(c){if(!arguments.length)return f.domain().map(b);f.domain(c.map(a));return e};e.range=function(){var c=f.range.apply(f,arguments);return arguments.length?e:c};e.ticks=function(){var c=f.domain(),d=Math.floor(c[0]),h=Math.ceil(c[1]),g=[];if(c.every(isFinite)){for(;++d<=h;)for(c=1;c<10;c++)g.push(b(d)* c);g.push(b(d))}return g};e.tickFormat=function(){return function(c){return c.toPrecision(1)}};return e}; d3.scale.pow=function(){function a(h){return Math.pow(h,c)}function b(h){return Math.pow(h,d)}function e(h){return f(a(h))}var f=d3.scale.linear(),c=1,d=1/c;e.invert=function(h){return b(f.invert(h))};e.domain=function(h){if(!arguments.length)return f.domain().map(b);f.domain(h.map(a));return e};e.range=function(){var h=f.range.apply(f,arguments);return arguments.length?e:h};e.exponent=function(h){if(!arguments.length)return c;var g=e.domain();c=h;d=1/h;return e.domain(g)};return e}; d3.scale.sqrt=function(){return d3.scale.pow().exponent(0.5)}; d3.scale.ordinal=function(){function a(d){d=d in e?e[d]:e[d]=b.push(d)-1;return f[d%f.length]}var b=[],e={},f=[],c=0;a.domain=function(d){if(!arguments.length)return b;b=d;e={};for(var h=-1,g=-1,i=b.length;++h b ? 1 : 0; -} - -function d3_descending(a, b) { - return a < b ? 1 : a > b ? -1 : 0; -}