From edc15c941ec70021dee5a296b5f2df0d404fce8a Mon Sep 17 00:00:00 2001 From: Masayuki Tanaka Date: Mon, 28 Oct 2013 18:57:54 +0900 Subject: [PATCH] Enable multiple selection with alt drag --- c3.js | 9 +++- c3.min.js | 124 +++++++++++++++++++++++++++--------------------------- 2 files changed, 69 insertions(+), 64 deletions(-) diff --git a/c3.js b/c3.js index 3aa3240..0ca337f 100644 --- a/c3.js +++ b/c3.js @@ -793,7 +793,7 @@ //-- Define brush/zoom -// var brush = d3.svg.brush().on("brush", redrawForBrush); - var zoom = d3.behavior.zoom().on("zoom", __zoom_enabled ? redrawForZoom : null); + var zoom = d3.behavior.zoom().on("zoomstart", function(){ zoom.startDomain = d3.event.sourceEvent.altKey ? x.orgDomain() : null; }).on("zoom", __zoom_enabled ? redrawForZoom : null); // define functions for c3 brush.update = function () { @@ -1104,7 +1104,7 @@ .call( d3.behavior.drag().origin(Object).on('drag', function(d){ if ( ! __data_selection_enabled) return; // do nothing if not selectable - if (__zoom_enabled) return; // skip if zoomable because of conflict drag dehavior + if (__zoom_enabled && ! zoom.startDomain) return; // skip if zoomable because of conflict drag dehavior var sx = dragStart[0], sy = dragStart[1], mouse = d3.mouse(this), @@ -1461,6 +1461,11 @@ }); } function redrawForZoom() { + if (d3.event.sourceEvent.type === 'mousemove' && zoom.startDomain) { + x.domain(zoom.startDomain); + zoom.x(x); + return; + } redraw({ withTransition: false, withY: false, diff --git a/c3.min.js b/c3.min.js index 21e316b..33bbda1 100644 --- a/c3.min.js +++ b/c3.min.js @@ -1,64 +1,64 @@ -(function(xb){function jc(){function l(b,h){b.attr("transform",function(b){return"translate("+(h(b)+R)+",0)"})}function s(b,h){b.attr("transform",function(b){return"translate(0,"+h(b)+")"})}function Oa(b){var h=b[0];b=b[b.length-1];return ha?0:a}function ba(a){var c=Da[a.id];a.name=l(c)?c:a.id;return a}function va(a){var c=a[0],d={},m=[],f,b;for(f=1;fa?0:a}function ca(a){var c=Ea[a.id];a.name=l(c)?c:a.id;return a}function wa(a){var c=a[0],d={},n=[],f,b;for(f=1;fw[d].indexOf(f.id)))for(b=0;b=g;g+=diffx2)p+=b(a[f-1],a[f],g,u);return p}function pb(a){var c=k.data.targets=ca(a),d,b;N();R();r.domain(d3.extent(a.map(function(a){return a.x}))); -y.domain(C(c,"y"));O.domain(C(c,"y2"));U.domain(r.domain());Qa.domain(y.domain());Ra.domain(O.domain());M.ticks(10>a.length?a.length:10);fa.ticks(Ic).outerTickSize(0).tickFormat(Jc);Sa.ticks(Kc).outerTickSize(0).tickFormat(Lc);ya=r.domain();F.x(U);oa&&Ga.x(r);Ha=d3.select(xa).append("svg").attr("width",n+H+D).attr("height",t+v+T);Za=Ha.append("defs");Za.append("clipPath").attr("id",qb).append("rect").attr("y",v).attr("width",n).attr("height",t-v);Za.append("clipPath").attr("id","xaxis-clip").append("rect").attr("x", --1).attr("y",-1).attr("width",n+2).attr("height",40);Za.append("clipPath").attr("id","yaxis-clip").append("rect").attr("x",-H+1).attr("y",v-1).attr("width",H).attr("height",t-v+2);g=Ha.append("g").attr("transform",I.main);x=pa?Ha.append("g").attr("transform",I.context):null;qa=ra?Ha.append("g").attr("transform",I.legend):null;Y=d3.select(xa).style("position","relative").append("div").style("position","absolute").style("width","30%").style("z-index","10").style("visibility","hidden");g.append("g").attr("class", -"x axis").attr("clip-path",e?"":"url(#xaxis-clip)").attr("transform",I.x).call(e?fa:M);g.append("g").attr("class","y axis").attr("clip-path",e?"url(#yaxis-clip)":"").call(e?M:fa).append("text").attr("transform","rotate(-90)").attr("dy","1.4em").attr("dx","-.8em").style("text-anchor","end").text(Mc);Gb&&g.append("g").attr("class","y2 axis").attr("transform",I.y2).call(Sa);if(oa)g.append("rect").attr("class","zoom-rect").attr("width",n).attr("height",t).style("opacity",0).call(Ga).on("dblclick.zoom", +a.id}function yc(a){return lb(a)+" -circles -circles-"+a.id}function Ob(a){return lb(a)+" -bars -bars-"+a.id}function zc(a,c){return"-shape -shape-"+c+" -circle -circle-"+c}function Pb(a,c){return"-shape -shape-"+c+" -bar -bar-"+c}function Ac(a,c){return"region region-"+c+" "+("classes"in a?[].concat(a.classes).join(" "):"")}function Ya(a){return m(a.x)}function Fa(a){return m(E?ha(a.value):a.value)}function Qb(a){return y(a.value)}function W(a){return m(a.x)}function X(a){return h(a.id)(a.value)} +function Bc(){var a={},c=0,d,b;Ta(Ba).forEach(function(f){for(d=0;dw[d].indexOf(f.id)))for(b=0;b=g;g+=diffx2)p+=b(a[f-1],a[f],g,u);return p}function pb(a){var c=k.data.targets=da(a),d,b;O();S();m.domain(d3.extent(a.map(function(a){return a.x}))); +y.domain(C(c,"y"));P.domain(C(c,"y2"));V.domain(m.domain());Qa.domain(y.domain());Ra.domain(P.domain());M.ticks(10>a.length?a.length:10);ga.ticks(Ic).outerTickSize(0).tickFormat(Jc);Sa.ticks(Kc).outerTickSize(0).tickFormat(Lc);za=m.domain();F.x(V);pa&&N.x(m);Ha=d3.select(ya).append("svg").attr("width",r+H+D).attr("height",t+v+U);Za=Ha.append("defs");Za.append("clipPath").attr("id",qb).append("rect").attr("y",v).attr("width",r).attr("height",t-v);Za.append("clipPath").attr("id","xaxis-clip").append("rect").attr("x", +-1).attr("y",-1).attr("width",r+2).attr("height",40);Za.append("clipPath").attr("id","yaxis-clip").append("rect").attr("x",-H+1).attr("y",v-1).attr("width",H).attr("height",t-v+2);g=Ha.append("g").attr("transform",I.main);x=qa?Ha.append("g").attr("transform",I.context):null;ra=sa?Ha.append("g").attr("transform",I.legend):null;Z=d3.select(ya).style("position","relative").append("div").style("position","absolute").style("width","30%").style("z-index","10").style("visibility","hidden");g.append("g").attr("class", +"x axis").attr("clip-path",e?"":"url(#xaxis-clip)").attr("transform",I.x).call(e?ga:M);g.append("g").attr("class","y axis").attr("clip-path",e?"url(#yaxis-clip)":"").call(e?M:ga).append("text").attr("transform","rotate(-90)").attr("dy","1.4em").attr("dx","-.8em").style("text-anchor","end").text(Mc);Gb&&g.append("g").attr("class","y2 axis").attr("transform",I.y2).call(Sa);if(pa)g.append("rect").attr("class","zoom-rect").attr("width",r).attr("height",t).style("opacity",0).call(N).on("dblclick.zoom", null);d=g.append("g").attr("clip-path",Ia).attr("class","grid");ac&&d.append("g").attr("class","xgrids");rb&&(b=d.append("g").attr("class","xgrid-lines").selectAll(".xgrid-line").data(rb).enter().append("g").attr("class","xgrid-line"),b.append("line").attr("class",function(a){return""+a["class"]}),b.append("text").attr("class",function(a){return""+a["class"]}).attr("text-anchor","end").attr("transform",e?"":"rotate(-90)").attr("dx",e?0:-v).attr("dy",-6).text(function(a){return a.text}));Nc&&d.append("g").attr("class", -"xgrid-focus").append("line").attr("class","xgrid-focus").attr("x1",e?0:-10).attr("x2",e?n:-10).attr("y1",e?-10:v).attr("y2",e?-10:t);bc&&d.append("g").attr("class","ygrids");sb&&d.append("g").attr("class","ygrid-lines").selectAll("ygrid-line").data(sb).enter().append("line").attr("class",function(a){return"ygrid-line "+a["class"]});g.append("g").attr("clip-path",Ia).attr("class","regions");g.append("g").attr("clip-path",Ia).attr("class","chart");g.select(".chart").append("g").attr("class","event-rects").style("fill-opacity", -0).selectAll(".event-rects").data(a).enter().append("rect").attr("class",function(a,c){return"event-rect event-rect-"+c}).style("cursor",function(a){return Z&&ha?"pointer":null}).on("mouseover",function(a,c){if(!$a){var d=k.data.targets.map(function(a){return ba(a.values[c])}),b,m;if(0",b,e,f;for(b=0;b"+f+""+e+"";return c+""}),Pc=b(["tooltip","init","show"],!1),sa=b(["tooltip","init","x"],0),gc=b(["tooltip","init","position"],{top:"0px",left:"50px"}),qb=xa.replace("#","")+"-clip",Ia="url(#"+qb+")",E="timeseries"===ic,na="categorized"=== -ic,vb=null,$a=!1,ub=!1,da=ra?40:0,ga=d3.time.format(Vc).parse,P=function(a,c){var b=[],e=null!==c?c:"#1f77b4 #ff7f0e #2ca02c #d62728 #9467bd #8c564b #e377c2 #7f7f7f #bcbd22 #17becf".split(" ");return function(c){if(c in a)return a[c];0<=b.indexOf(c)||b.push(c);return e[b.indexOf(c)%e.length]}}(Wc,Xc),oc=function(){var a=[[d3.time.format("%Y/%-m/%-d"),function(){return!0}],[d3.time.format("%-m/%-d"),function(a){return a.getMonth()}],[d3.time.format("%-m/%-d"),function(a){return 1!=a.getDate()}],[d3.time.format("%-m/%-d"), -function(a){return a.getDay()&&1!=a.getDate()}],[d3.time.format("%I %p"),function(a){return a.getHours()}],[d3.time.format("%I:%M"),function(a){return a.getMinutes()}],[d3.time.format(":%S"),function(a){return a.getSeconds()}],[d3.time.format(".%L"),function(a){return a.getMilliseconds()}]];return function(c){for(var b=a.length-1,e=a[b];!e[1](c);)e=a[--b];return e[0](c)}}(),Db,Ib,Fb,Pa,Hb,Jb,n,t,ea,cb,ma,Kb,Lb,fb,gb,r,y,O,U,Qa,Ra,M,fa,Sa,za,kc=e?"left":"bottom",lc=e?eb?"top":"bottom":eb?"right":"left", -mc=e?db?"bottom":"top":db?"left":"right",nc="bottom",I={main:function(){return"translate("+H+","+v+")"},context:function(){return"translate("+G+","+ta+")"},legend:function(){return"translate("+Oa+","+yb+")"},y2:function(){return"translate("+(e?0:n)+","+(e?10:0)+")"},x:function(){return"translate(0,"+t+")"},subx:function(){return"translate(0,"+ea+")"}},Rc=function(){var a=d3.svg.line().x(e?function(a){return h(a.id)(a.value)}:Ya).y(e?Ya:function(a){return h(a.id)(a.value)});return function(c){var b; -if(nb(c))return"spline"===X["string"===typeof c?c:c.id]?a.interpolate("cardinal"):a.interpolate("linear"),0b.classes.indexOf(a)})});return J};k.data.get=function(a){a=k.data.getAsTarget(a);return l(a)?a.values.map(function(a){return a.value}):void 0};k.data.getAsTarget=function(a){var b=Ta(function(b){return b.id==a});return 0",b,e,f;for(b=0;b"+f+""+e+"";return c+""}),Pc=b(["tooltip","init","show"],!1),ta=b(["tooltip","init","x"],0),gc=b(["tooltip","init","position"],{top:"0px",left:"50px"}),qb=ya.replace("#", +"")+"-clip",Ia="url(#"+qb+")",E="timeseries"===ic,oa="categorized"===ic,vb=null,$a=!1,ub=!1,ea=sa?40:0,ha=d3.time.format(Vc).parse,Q=function(a,c){var b=[],e=null!==c?c:"#1f77b4 #ff7f0e #2ca02c #d62728 #9467bd #8c564b #e377c2 #7f7f7f #bcbd22 #17becf".split(" ");return function(c){if(c in a)return a[c];0<=b.indexOf(c)||b.push(c);return e[b.indexOf(c)%e.length]}}(Wc,Xc),oc=function(){var a=[[d3.time.format("%Y/%-m/%-d"),function(){return!0}],[d3.time.format("%-m/%-d"),function(a){return a.getMonth()}], +[d3.time.format("%-m/%-d"),function(a){return 1!=a.getDate()}],[d3.time.format("%-m/%-d"),function(a){return a.getDay()&&1!=a.getDate()}],[d3.time.format("%I %p"),function(a){return a.getHours()}],[d3.time.format("%I:%M"),function(a){return a.getMinutes()}],[d3.time.format(":%S"),function(a){return a.getSeconds()}],[d3.time.format(".%L"),function(a){return a.getMilliseconds()}]];return function(c){for(var b=a.length-1,e=a[b];!e[1](c);)e=a[--b];return e[0](c)}}(),Db,Ib,Fb,Pa,Hb,Jb,r,t,fa,cb,na,Kb, +Lb,fb,gb,m,y,P,V,Qa,Ra,M,ga,Sa,Aa,kc=e?"left":"bottom",lc=e?eb?"top":"bottom":eb?"right":"left",mc=e?db?"bottom":"top":db?"left":"right",nc="bottom",I={main:function(){return"translate("+H+","+v+")"},context:function(){return"translate("+G+","+ua+")"},legend:function(){return"translate("+Oa+","+yb+")"},y2:function(){return"translate("+(e?0:r)+","+(e?10:0)+")"},x:function(){return"translate(0,"+t+")"},subx:function(){return"translate(0,"+fa+")"}},Rc=function(){var a=d3.svg.line().x(e?function(a){return h(a.id)(a.value)}: +Ya).y(e?Ya:function(a){return h(a.id)(a.value)});return function(c){var b;if(nb(c))return"spline"===Y["string"===typeof c?c:c.id]?a.interpolate("cardinal"):a.interpolate("linear"),0b.classes.indexOf(a)})});return J};k.data.get=function(a){a=k.data.getAsTarget(a);return l(a)?a.values.map(function(a){return a.value}): +void 0};k.data.getAsTarget=function(a){var b=Ta(function(b){return b.id==a});return 0