c3-rails 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2af42ee06a4a8faf8c82e37002f9b742b62b7936
4
- data.tar.gz: 1778852ef17eea288816f5bc1dd356d5c8a4f588
3
+ metadata.gz: 19e82bdda3c512c5a70832b8b96bb713d69c2f03
4
+ data.tar.gz: 01858e862092226457ad8b2c50e21c70dc4f4327
5
5
  SHA512:
6
- metadata.gz: 4dde6172793ab7cee798a676d5bcace2ab3f738c8c928c752fb6dc3d17091e1c883eb27658291cce1a308a2aec3124350a199e94e475e2586828b229bf4765a5
7
- data.tar.gz: fc67f6469210f021304d442a3d6ad0f5414cb68ec234b8e4d6952b46756873d1d7d5b78eb74cb012fb28ef038b015b41c06aeb23ada3f0170690c2ab5179a964
6
+ metadata.gz: e798f410c1f11d74a810fbfa7226b9adc12b83e454f9aff1268c1423ef0428da8333b98a9af7bb8294eeab7141b963eae99afb6554b317feb679dcfc95b61e10
7
+ data.tar.gz: 946676c5e49156d8245d90e07bfe6476f8691fd2cb1ab8a8ffd8dbfeac527c4f640174f2cd7e94d4d2d9c27a91943e92c1d563f7a2d2d16b56717926f6630069
@@ -1,5 +1,5 @@
1
1
  module C3
2
2
  module Rails
3
- VERSION = "0.4.3"
3
+ VERSION = "0.4.4"
4
4
  end
5
5
  end
@@ -3,7 +3,7 @@
3
3
 
4
4
  /*global define, module, exports, require */
5
5
 
6
- var c3 = { version: "0.4.3" };
6
+ var c3 = { version: "0.4.4" };
7
7
 
8
8
  var c3_chart_fn, c3_chart_internal_fn;
9
9
 
@@ -113,8 +113,8 @@
113
113
  $$.defocusedTargetIds = [];
114
114
 
115
115
  $$.xOrient = config.axis_rotated ? "left" : "bottom";
116
- $$.yOrient = config.axis_rotated ? "bottom" : "left";
117
- $$.y2Orient = config.axis_rotated ? "top" : "right";
116
+ $$.yOrient = config.axis_rotated ? (config.axis_y_inner ? "top" : "bottom") : (config.axis_y_inner ? "right" : "left");
117
+ $$.y2Orient = config.axis_rotated ? (config.axis_y_inner ? "bottom" : "top") : (config.axis_y_inner ? "left" : "right");
118
118
  $$.subXOrient = config.axis_rotated ? "left" : "bottom";
119
119
 
120
120
  $$.isLegendRight = config.legend_position === 'right';
@@ -143,6 +143,14 @@
143
143
  $$.axes.subx = d3.selectAll([]); // needs when excluding subchart.js
144
144
  };
145
145
 
146
+ c3_chart_internal_fn.initChartElements = function () {
147
+ if (this.initBar) { this.initBar(); }
148
+ if (this.initLine) { this.initLine(); }
149
+ if (this.initArc) { this.initArc(); }
150
+ if (this.initGauge) { this.initGauge(); }
151
+ if (this.initText) { this.initText(); }
152
+ };
153
+
146
154
  c3_chart_internal_fn.initWithData = function (data) {
147
155
  var $$ = this, d3 = $$.d3, config = $$.config;
148
156
  var defs, main, binding = true;
@@ -171,6 +179,9 @@
171
179
  if (config.data_hide) {
172
180
  $$.addHiddenTargetIds(config.data_hide === true ? $$.mapToIds($$.data.targets) : config.data_hide);
173
181
  }
182
+ if (config.legend_hide) {
183
+ $$.addHiddenLegendIds(config.legend_hide === true ? $$.mapToIds($$.data.targets) : config.legend_hide);
184
+ }
174
185
 
175
186
  // when gauge, hide legend // TODO: fix
176
187
  if ($$.hasType('gauge')) {
@@ -245,18 +256,8 @@
245
256
  // Cover whole with rects for events
246
257
  $$.initEventRect();
247
258
 
248
- // Define g for bar chart area
249
- if ($$.initBar) { $$.initBar(); }
250
-
251
- // Define g for line chart area
252
- if ($$.initLine) { $$.initLine(); }
253
-
254
- // Define g for arc chart area
255
- if ($$.initArc) { $$.initArc(); }
256
- if ($$.initGauge) { $$.initGauge(); }
257
-
258
- // Define g for text area
259
- if ($$.initText) { $$.initText(); }
259
+ // Define g for chart
260
+ $$.initChartElements();
260
261
 
261
262
  // if zoom privileged, insert rect to forefront
262
263
  // TODO: is this needed?
@@ -427,7 +428,7 @@
427
428
  c3_chart_internal_fn.redraw = function (options, transitions) {
428
429
  var $$ = this, main = $$.main, d3 = $$.d3, config = $$.config;
429
430
  var areaIndices = $$.getShapeIndices($$.isAreaType), barIndices = $$.getShapeIndices($$.isBarType), lineIndices = $$.getShapeIndices($$.isLineType);
430
- var withY, withSubchart, withTransition, withTransitionForExit, withTransitionForAxis, withTransform, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain, withLegend, withEventRect;
431
+ var withY, withSubchart, withTransition, withTransitionForExit, withTransitionForAxis, withTransform, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain, withLegend, withEventRect, withDimension;
431
432
  var hideAxis = $$.hasArcType();
432
433
  var drawArea, drawBar, drawLine, xForText, yForText;
433
434
  var duration, durationForExit, durationForAxis;
@@ -445,6 +446,7 @@
445
446
  withTrimXDomain = getOption(options, "withTrimXDomain", true);
446
447
  withLegend = getOption(options, "withLegend", false);
447
448
  withEventRect = getOption(options, "withEventRect", true);
449
+ withDimension = getOption(options, "withDimension", true);
448
450
  withTransitionForExit = getOption(options, "withTransitionForExit", withTransition);
449
451
  withTransitionForAxis = getOption(options, "withTransitionForAxis", withTransition);
450
452
 
@@ -457,7 +459,7 @@
457
459
  // update legend and transform each g
458
460
  if (withLegend && config.legend_show) {
459
461
  $$.updateLegend($$.mapToIds($$.data.targets), options, transitions);
460
- } else if ((!config.axis_rotated && withY) || (config.axis_rotated && withUpdateXDomain)) {
462
+ } else if (withDimension) {
461
463
  // need to update dimension (e.g. axis.y.tick.values) because y tick values should change
462
464
  // no need to update axis in it because they will be updated in redraw()
463
465
  $$.updateDimension(true);
@@ -724,7 +726,8 @@
724
726
  return d.value !== null && this.withoutFadeIn[d.id] ? this.opacityForCircle(d) : 0;
725
727
  };
726
728
  c3_chart_internal_fn.opacityForCircle = function (d) {
727
- return isValue(d.value) && this.config.point_show ? (this.isScatterType(d) ? 0.5 : 1) : 0;
729
+ var opacity = this.config.point_show ? 1 : 0;
730
+ return isValue(d.value) ? (this.isScatterType(d) ? 0.5 : opacity) : 0;
728
731
  };
729
732
  c3_chart_internal_fn.opacityForText = function () {
730
733
  return this.hasDataLabel() ? 1 : 0;
@@ -988,6 +991,7 @@
988
991
  color_threshold: {},
989
992
  // legend
990
993
  legend_show: true,
994
+ legend_hide: false,
991
995
  legend_position: 'bottom',
992
996
  legend_inset_anchor: 'top-left',
993
997
  legend_inset_x: 10,
@@ -1025,6 +1029,7 @@
1025
1029
  axis_y_max: undefined,
1026
1030
  axis_y_min: undefined,
1027
1031
  axis_y_center: undefined,
1032
+ axis_y_inner: undefined,
1028
1033
  axis_y_label: {},
1029
1034
  axis_y_tick_format: undefined,
1030
1035
  axis_y_tick_outer: true,
@@ -1038,6 +1043,7 @@
1038
1043
  axis_y2_max: undefined,
1039
1044
  axis_y2_min: undefined,
1040
1045
  axis_y2_center: undefined,
1046
+ axis_y2_inner: undefined,
1041
1047
  axis_y2_label: {},
1042
1048
  axis_y2_tick_format: undefined,
1043
1049
  axis_y2_tick_outer: true,
@@ -1574,10 +1580,12 @@
1574
1580
  };
1575
1581
  c3_chart_internal_fn.updateXs = function () {
1576
1582
  var $$ = this;
1577
- $$.xs = [];
1578
- $$.data.targets[0].values.forEach(function (v) {
1579
- $$.xs[v.index] = v.x;
1580
- });
1583
+ if ($$.data.targets.length) {
1584
+ $$.xs = [];
1585
+ $$.data.targets[0].values.forEach(function (v) {
1586
+ $$.xs[v.index] = v.x;
1587
+ });
1588
+ }
1581
1589
  };
1582
1590
  c3_chart_internal_fn.getPrevX = function (i) {
1583
1591
  var x = this.xs[i - 1];
@@ -2495,8 +2503,10 @@
2495
2503
  return config.padding_left;
2496
2504
  } else if (config.axis_rotated) {
2497
2505
  return !config.axis_x_show ? 1 : Math.max(ceil10($$.getAxisWidthByAxisId('x', withoutRecompute)), 40);
2506
+ } else if (!config.axis_y_show || config.axis_y_inner) { // && !config.axis_rotated
2507
+ return $$.getYAxisLabelPosition().isOuter ? 30 : 1;
2498
2508
  } else {
2499
- return !config.axis_y_show ? 1 : ceil10($$.getAxisWidthByAxisId('y', withoutRecompute));
2509
+ return ceil10($$.getAxisWidthByAxisId('y', withoutRecompute));
2500
2510
  }
2501
2511
  };
2502
2512
  c3_chart_internal_fn.getCurrentPaddingRight = function () {
@@ -2506,8 +2516,10 @@
2506
2516
  return config.padding_right + 1; // 1 is needed not to hide tick line
2507
2517
  } else if (config.axis_rotated) {
2508
2518
  return defaultPadding + legendWidthOnRight;
2519
+ } else if (!config.axis_y2_show || config.axis_y2_inner) { // && !config.axis_rotated
2520
+ return defaultPadding + legendWidthOnRight + ($$.getY2AxisLabelPosition().isOuter ? 20 : 0);
2509
2521
  } else {
2510
- return (!config.axis_y2_show ? defaultPadding : ceil10($$.getAxisWidthByAxisId('y2'))) + legendWidthOnRight;
2522
+ return ceil10($$.getAxisWidthByAxisId('y2')) + legendWidthOnRight;
2511
2523
  }
2512
2524
  };
2513
2525
 
@@ -3751,6 +3763,7 @@
3751
3763
  .style('opacity', 0)
3752
3764
  .style('visibility', 'hidden');
3753
3765
  };
3766
+ var legendItemTextBox = {};
3754
3767
  c3_chart_internal_fn.updateLegend = function (targetIds, options, transitions) {
3755
3768
  var $$ = this, config = $$.config;
3756
3769
  var xForLegend, xForLegendText, xForLegendRect, yForLegend, yForLegendText, yForLegendRect;
@@ -3764,9 +3777,16 @@
3764
3777
  withTransition = getOption(options, "withTransition", true);
3765
3778
  withTransitionForTransform = getOption(options, "withTransitionForTransform", true);
3766
3779
 
3780
+ function getTextBox(textElement, id) {
3781
+ if (!legendItemTextBox[id]) {
3782
+ legendItemTextBox[id] = $$.getTextRect(textElement.textContent, CLASS.legendItem);
3783
+ }
3784
+ return legendItemTextBox[id];
3785
+ }
3786
+
3767
3787
  function updatePositions(textElement, id, index) {
3768
3788
  var reset = index === 0, isLast = index === targetIds.length - 1,
3769
- box = $$.getTextRect(textElement.textContent, CLASS.legendItem),
3789
+ box = getTextBox(textElement, id),
3770
3790
  itemWidth = box.width + tileWidth + (isLast && !($$.isLegendRight || $$.isLegendInset) ? 0 : paddingRight),
3771
3791
  itemHeight = box.height + paddingTop,
3772
3792
  itemLength = $$.isLegendRight || $$.isLegendInset ? itemHeight : itemWidth,
@@ -3977,7 +3997,7 @@
3977
3997
 
3978
3998
  $$.axes.y = main.append("g")
3979
3999
  .attr("class", CLASS.axis + ' ' + CLASS.axisY)
3980
- .attr("clip-path", $$.clipPathForYAxis)
4000
+ .attr("clip-path", config.axis_y_inner ? "" : $$.clipPathForYAxis)
3981
4001
  .attr("transform", $$.getTranslate('y'))
3982
4002
  .style("visibility", config.axis_y_show ? 'visible' : 'hidden');
3983
4003
  $$.axes.y.append("text")
@@ -4188,7 +4208,7 @@
4188
4208
  if ($$.config.axis_rotated) {
4189
4209
  return position.isInner ? "-0.5em" : "3em";
4190
4210
  } else {
4191
- return position.isInner ? "1.2em" : -20 - $$.getMaxTickWidth('y');
4211
+ return position.isInner ? "1.2em" : -10 - ($$.config.axis_y_inner ? 0 : ($$.getMaxTickWidth('y') + 10));
4192
4212
  }
4193
4213
  };
4194
4214
  c3_chart_internal_fn.dyForY2AxisLabel = function () {
@@ -4197,7 +4217,7 @@
4197
4217
  if ($$.config.axis_rotated) {
4198
4218
  return position.isInner ? "1.2em" : "-2.2em";
4199
4219
  } else {
4200
- return position.isInner ? "-0.5em" : 30 + this.getMaxTickWidth('y2');
4220
+ return position.isInner ? "-0.5em" : 15 + ($$.config.axis_y2_inner ? 0 : (this.getMaxTickWidth('y2') + 15));
4201
4221
  }
4202
4222
  };
4203
4223
  c3_chart_internal_fn.textAnchorForXAxisLabel = function () {
@@ -4361,7 +4381,7 @@
4361
4381
  };
4362
4382
  c3_chart_internal_fn.getYAxisClipX = function () {
4363
4383
  var $$ = this;
4364
- return $$.getAxisClipX($$.config.axis_rotated);
4384
+ return $$.config.axis_y_inner ? -1 : $$.getAxisClipX($$.config.axis_rotated);
4365
4385
  };
4366
4386
  c3_chart_internal_fn.getYAxisClipY = function () {
4367
4387
  var $$ = this;
@@ -4387,7 +4407,7 @@
4387
4407
  };
4388
4408
  c3_chart_internal_fn.getYAxisClipWidth = function () {
4389
4409
  var $$ = this;
4390
- return $$.getAxisClipWidth($$.config.axis_rotated);
4410
+ return $$.getAxisClipWidth($$.config.axis_rotated) + ($$.config.axis_y_inner ? 20 : 0);
4391
4411
  };
4392
4412
  c3_chart_internal_fn.getYAxisClipHeight = function () {
4393
4413
  var $$ = this;
@@ -5191,7 +5211,8 @@
5191
5211
  withTransition: false,
5192
5212
  withY: $$.config.zoom_rescale,
5193
5213
  withSubchart: false,
5194
- withUpdateXDomain: true
5214
+ withUpdateXDomain: true,
5215
+ withDimension: false
5195
5216
  });
5196
5217
  $$.config.subchart_onbrush.call($$.api, x.orgDomain());
5197
5218
  };
@@ -5276,7 +5297,8 @@
5276
5297
  withTransition: false,
5277
5298
  withY: config.zoom_rescale,
5278
5299
  withSubchart: false,
5279
- withEventRect: false
5300
+ withEventRect: false,
5301
+ withDimension: false
5280
5302
  });
5281
5303
  if (d3.event.sourceEvent.type === 'mousemove') {
5282
5304
  $$.cancelClick = true;
@@ -5544,7 +5566,7 @@
5544
5566
  return CLASS.chartArc + this.classTarget(d.data.id);
5545
5567
  };
5546
5568
  c3_chart_internal_fn.getTargetSelectorSuffix = function (targetId) {
5547
- return targetId || targetId === 0 ? ('-' + targetId).replace(/[\s?!@#$%^&*()_=+,.<>'":;\[\]/|~`{}\\]/g, '-') : '';
5569
+ return targetId || targetId === 0 ? ('-' + targetId).replace(/[\s?!@#$%^&*()_=+,.<>'":;\[\]\/|~`{}\\]/g, '-') : '';
5548
5570
  };
5549
5571
  c3_chart_internal_fn.selectorTarget = function (id, prefix) {
5550
5572
  return (prefix || '') + '.' + CLASS.target + this.getTargetSelectorSuffix(id);
@@ -6240,12 +6262,16 @@
6240
6262
  return [].concat(targetIds).indexOf(t.id) >= 0;
6241
6263
  });
6242
6264
  };
6243
- c3_chart_fn.data.shown = function (targetId) {
6244
- return this.internal.filterTargetsToShow(this.data(targetId));
6265
+ c3_chart_fn.data.shown = function (targetIds) {
6266
+ return this.internal.filterTargetsToShow(this.data(targetIds));
6245
6267
  };
6246
6268
  c3_chart_fn.data.values = function (targetId) {
6247
- var target = this.data(targetId);
6248
- return target ? target.values.map(function (d) { return d.value; }) : null;
6269
+ var targets, values = null;
6270
+ if (targetId) {
6271
+ targets = this.data(targetId);
6272
+ values = targets[0] ? targets[0].values.map(function (d) { return d.value; }) : null;
6273
+ }
6274
+ return values;
6249
6275
  };
6250
6276
  c3_chart_fn.data.names = function (names) {
6251
6277
  return this.internal.updateDataAttributes('names', names);
@@ -6429,6 +6455,8 @@
6429
6455
  // Features:
6430
6456
  // 1. category axis
6431
6457
  // 2. ceil values of translate/x/y to int for half pixel antialiasing
6458
+ // 3. multiline tick text
6459
+ var tickTextCharSize;
6432
6460
  function c3_axis(d3, params) {
6433
6461
  var scale = d3.scale.linear(), orient = "bottom", innerTickSize = 6, outerTickSize, tickPadding = 3, tickValues = null, tickFormat, tickArguments;
6434
6462
 
@@ -6477,6 +6505,9 @@
6477
6505
  return tickFormat ? tickFormat(v) : v;
6478
6506
  }
6479
6507
  function getSizeFor1Char(tick) {
6508
+ if (tickTextCharSize) {
6509
+ return tickTextCharSize;
6510
+ }
6480
6511
  var size = {
6481
6512
  h: 11.5,
6482
6513
  w: 5.5
@@ -6491,6 +6522,7 @@
6491
6522
  size.w = w;
6492
6523
  }
6493
6524
  }).text('');
6525
+ tickTextCharSize = size;
6494
6526
  return size;
6495
6527
  }
6496
6528
  function axis(g) {
@@ -6525,7 +6557,7 @@
6525
6557
  tickOffset = tickX = 0;
6526
6558
  }
6527
6559
 
6528
- var text, tspan, sizeFor1Char = getSizeFor1Char(tick), counts = [];
6560
+ var text, tspan, sizeFor1Char = getSizeFor1Char(g.select('.tick')), counts = [];
6529
6561
  var tickLength = Math.max(innerTickSize, 0) + tickPadding,
6530
6562
  isVertical = orient === 'left' || orient === 'right';
6531
6563
 
@@ -6539,7 +6571,7 @@
6539
6571
  }
6540
6572
 
6541
6573
  if (!maxWidth || maxWidth <= 0) {
6542
- maxWidth = isVertical ? 95 : params.isCategory ? (Math.ceil(scale1(ticks[1]) - scale1(ticks[0])) - 10) : 110;
6574
+ maxWidth = isVertical ? 95 : params.isCategory ? (Math.ceil(scale1(ticks[1]) - scale1(ticks[0])) - 12) : 110;
6543
6575
  }
6544
6576
 
6545
6577
  function split(splitted, text) {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: c3-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sunny Li
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-18 00:00:00.000000000 Z
11
+ date: 2014-11-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: This gem provides "c3 - A D3-based reusable chart library" for Rails
14
14
  email: