Skip to content

Commit 2c378e0

Browse files
committedJul 3, 2019
indicator: changes default delta.valueformat and delta alignment
1 parent 7e789b3 commit 2c378e0

11 files changed

+43
-21
lines changed
 

‎src/traces/indicator/defaults.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
6363
}
6464
coerce('delta.reference', traceOut.value);
6565
coerce('delta.relative');
66-
coerce('delta.valueformat', traceOut.delta.relative ? '2%' : '.3s');
66+
coerce('delta.valueformat', traceOut.delta.relative ? '+2%' : '+.3s');
6767
coerce('delta.increasing.symbol');
6868
coerce('delta.increasing.color');
6969
coerce('delta.decreasing.symbol');

‎src/traces/indicator/plot.js

+38-16
Original file line numberDiff line numberDiff line change
@@ -629,11 +629,19 @@ function drawNumbers(gd, plotGroup, cd, opts) {
629629
return delta;
630630
}
631631

632-
// Position delta relative to bignumber
632+
var key = trace.mode + trace.align;
633633
var delta;
634-
if(trace._hasDelta) delta = drawDelta();
635-
if(trace._hasNumber) drawBignumber();
634+
if(trace._hasDelta) {
635+
delta = drawDelta();
636+
key += trace.delta.position + trace.delta.font.size + trace.delta.font.family + trace.delta.valueformat;
637+
key += trace.delta.increasing.symbol + trace.delta.decreasing.symbol;
638+
}
639+
if(trace._hasNumber) {
640+
drawBignumber();
641+
key += trace.number.font.size + trace.number.font.family + trace.number.valueformat + trace.number.suffix + trace.number.prefix;
642+
}
636643

644+
// Position delta relative to bignumber
637645
if(trace._hasDelta && trace._hasNumber) {
638646
var bignumberCenter = [
639647
(bignumberbBox.left + bignumberbBox.right) / 2,
@@ -644,32 +652,32 @@ function drawNumbers(gd, plotGroup, cd, opts) {
644652
(deltabBox.top + deltabBox.bottom) / 2
645653
];
646654

655+
var dx, dy;
647656
if(trace.delta.position === 'left') {
648-
delta.attr('dx', bignumberbBox.left - deltabBox.right - cn.horizontalPadding);
649-
delta.attr('dy', bignumberCenter[1] - deltaCenter[1]);
657+
dx = cache(trace, 'deltaPos', 0, bignumberbBox.left - deltabBox.right - 0.75 * trace.delta.font.size, key, Math.min);
658+
dy = bignumberCenter[1] - deltaCenter[1];
650659
}
651660
if(trace.delta.position === 'right') {
652-
delta.attr('dx', bignumberbBox.right - deltabBox.left + cn.horizontalPadding);
653-
delta.attr('dy', bignumberCenter[1] - deltaCenter[1]);
661+
dx = cache(trace, 'deltaPos', 0, bignumberbBox.right - deltabBox.left + 0.75 * trace.delta.font.size, key, Math.max);
662+
dy = bignumberCenter[1] - deltaCenter[1];
654663
}
655664
if(trace.delta.position === 'bottom') {
656-
delta.attr('dx', null);
657-
delta.attr('dy', deltabBox.height);
665+
dx = null;
666+
dy = deltabBox.height;
658667
}
659668
if(trace.delta.position === 'top') {
660-
delta.attr('dx', null);
661-
delta.attr('dy', bignumberbBox.top);
669+
dx = null;
670+
dy = bignumberbBox.top;
662671
}
672+
673+
delta.attr({dx: dx, dy: dy});
663674
}
664675

665676
// Resize numbers to fit within space and position
666677
numbers.attr('transform', function() {
667678
var m = opts.numbersScaler(numbers);
668-
var key = m[2];
669-
if(!(trace._numbersScale && trace._numbersScale.key === key)) {
670-
trace._numbersScale = {key: key, value: 1};
671-
}
672-
var scaleRatio = trace._numbersScale.value = Math.min(trace._numbersScale.value, m[0]);
679+
key += m[2];
680+
var scaleRatio = cache(trace, 'numbersScale', 1, m[0], key, Math.min);
673681
var numbersbBox = m[1];
674682
var translateY;
675683
if(!trace._scaleNumbers) scaleRatio = 1;
@@ -687,6 +695,9 @@ function drawNumbers(gd, plotGroup, cd, opts) {
687695
var ref = numbersbBox[numbersAlign];
688696
if(numbersAlign === 'center') ref = (numbersbBox.left + numbersbBox.right) / 2;
689697
var translateX = numbersX - scaleRatio * ref;
698+
699+
// Stash translateX
700+
translateX = cache(trace, 'numbersTranslate', 0, translateX, key, Math.max);
690701
return strTranslate(translateX, translateY) + ' scale(' + scaleRatio + ')';
691702
});
692703
}
@@ -783,3 +794,14 @@ function fitTextInsideCircle(el, radius) {
783794
var ratio = radius / elRadius;
784795
return [ratio, textBB, radius];
785796
}
797+
798+
function cache(trace, name, initialValue, value, key, fn) {
799+
var objName = '_cache' + name;
800+
if(!(trace[objName] && trace[objName].key === key)) {
801+
trace[objName] = {key: key, value: initialValue};
802+
}
803+
var v = Lib.aggNums(fn, null, [trace[objName].value, value], 2);
804+
trace[objName].value = v;
805+
806+
return v;
807+
}
18 Bytes
Loading
219 Bytes
Loading
-132 Bytes
Loading
503 Bytes
Loading
-1.03 KB
Loading
-223 Bytes
Loading
-1.56 KB
Loading
435 Bytes
Loading

‎test/jasmine/tests/indicator_test.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ describe('Indicator defaults', function() {
4242
it('defaults to formatting numbers using SI prefix', function() {
4343
var out = _supply({type: 'indicator', mode: 'number+delta', value: 1});
4444
expect(out.number.valueformat).toBe('.3s');
45-
expect(out.delta.valueformat).toBe('.3s');
45+
expect(out.delta.valueformat).toBe('+.3s');
4646
});
4747

4848
it('defaults to displaying relative changes in percentage', function() {
4949
var out = _supply({type: 'indicator', mode: 'delta', delta: {relative: true}, value: 1});
50-
expect(out.delta.valueformat).toBe('2%');
50+
expect(out.delta.valueformat).toBe('+2%');
5151
});
5252

5353
it('defaults delta.reference to current value', function() {
@@ -292,11 +292,11 @@ describe('Indicator plot', function() {
292292
delta: {reference: 200}
293293
}], {width: 400, height: 400})
294294
.then(function() {
295-
assertContent(gd._fullData[0].delta.increasing.symbol + '20.0');
295+
assertContent(gd._fullData[0].delta.increasing.symbol + '+20.0');
296296
return Plotly.restyle(gd, 'delta.relative', true);
297297
})
298298
.then(function() {
299-
assertContent(gd._fullData[0].delta.increasing.symbol + '10%');
299+
assertContent(gd._fullData[0].delta.increasing.symbol + '+10%');
300300
return Plotly.restyle(gd, 'delta.valueformat', '.3f');
301301
})
302302
.then(function() {

0 commit comments

Comments
 (0)
Please sign in to comment.