Skip to content

Commit 3ee7dbf

Browse files
committed
declare new mergeArray options in Lib and use them in bar
1 parent 9d4a4bf commit 3ee7dbf

File tree

3 files changed

+37
-10
lines changed

3 files changed

+37
-10
lines changed

src/lib/index.js

+28-2
Original file line numberDiff line numberDiff line change
@@ -459,13 +459,39 @@ lib.noneOrAll = function(containerIn, containerOut, attrList) {
459459
* @param {object} cd : calcdata trace
460460
* @param {string} cdAttr : calcdata key
461461
*/
462-
lib.mergeArray = function(traceAttr, cd, cdAttr, isNumber) {
462+
lib.mergeArray = function(traceAttr, cd, cdAttr, fn) {
463+
var hasFn = typeof fn === 'function';
463464
if(lib.isArrayOrTypedArray(traceAttr)) {
464465
var imax = Math.min(traceAttr.length, cd.length);
465-
for(var i = 0; i < imax; i++) cd[i][cdAttr] = isNumber ? +traceAttr[i] : traceAttr[i];
466+
for(var i = 0; i < imax; i++) {
467+
var v = traceAttr[i];
468+
cd[i][cdAttr] = hasFn ? fn(v) : v;
469+
}
466470
}
467471
};
468472

473+
// cast numbers to numbers and if not return 0
474+
lib.mergeArrayCastIfNumber = function(traceAttr, cd, cdAttr) {
475+
return lib.mergeArray(traceAttr, cd, cdAttr, function(v) {
476+
return isNumeric(v) ? +v : v;
477+
});
478+
};
479+
480+
// cast numbers to numbers, NaN to NaN, null to 0
481+
lib.mergeArrayCastNumber = function(traceAttr, cd, cdAttr) {
482+
return lib.mergeArray(traceAttr, cd, cdAttr, function(v) {
483+
return +v;
484+
});
485+
};
486+
487+
// cast numbers to positive numbers, returns 0 if not greater than 0
488+
lib.mergeArrayCastPositive = function(traceAttr, cd, cdAttr) {
489+
return lib.mergeArray(traceAttr, cd, cdAttr, function(v) {
490+
var w = +v;
491+
return w > 0 ? w : 0;
492+
});
493+
};
494+
469495
/** fills calcdata field (given by cdAttr) with traceAttr values
470496
* or function of traceAttr values (e.g. some fallback)
471497
*

src/traces/bar/arrays_to_calcdata.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,24 @@
88

99
'use strict';
1010

11-
var mergeArray = require('../../lib').mergeArray;
11+
var Lib = require('../../lib');
1212

1313
// arrayOk attributes, merge them into calcdata array
1414
module.exports = function arraysToCalcdata(cd, trace) {
1515
for(var i = 0; i < cd.length; i++) cd[i].i = i;
1616

17-
mergeArray(trace.text, cd, 'tx');
18-
mergeArray(trace.hovertext, cd, 'htx');
17+
Lib.mergeArray(trace.text, cd, 'tx');
18+
Lib.mergeArray(trace.hovertext, cd, 'htx');
1919

2020
var marker = trace.marker;
2121
if(marker) {
22-
mergeArray(marker.opacity, cd, 'mo', true);
23-
mergeArray(marker.color, cd, 'mc');
22+
Lib.mergeArray(marker.opacity, cd, 'mo', true);
23+
Lib.mergeArray(marker.color, cd, 'mc');
2424

2525
var markerLine = marker.line;
2626
if(markerLine) {
27-
mergeArray(markerLine.color, cd, 'mlc');
28-
mergeArray(markerLine.width, cd, 'mlw', true);
27+
Lib.mergeArray(markerLine.color, cd, 'mlc');
28+
Lib.mergeArrayCastPositive(markerLine.width, cd, 'mlw');
2929
}
3030
}
3131
};

src/traces/bar/helpers.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
var isNumeric = require('fast-isnumeric');
1212
var tinycolor = require('tinycolor2');
13+
var isArrayOrTypedArray = require('../../lib').isArrayOrTypedArray;
1314

1415
exports.coerceString = function(attributeDefinition, value, defaultValue) {
1516
if(typeof value === 'string') {
@@ -68,7 +69,7 @@ exports.getValue = function(arrayOrScalar, index) {
6869
exports.getLineWidth = function(trace, di) {
6970
var w =
7071
(0 < di.mlw) ? di.mlw :
71-
(0 < trace.marker.line.width) ? trace.marker.line.width : // Note: we don't want to get true & return an array when trace.marker.line.width is an array containing zeros.
72+
!isArrayOrTypedArray(trace.marker.line.width) ? trace.marker.line.width :
7273
0;
7374

7475
return w;

0 commit comments

Comments
 (0)