Skip to content

Commit d35ff08

Browse files
committed
add fallback to have stable sort in Chrome < 70
1 parent d87ee12 commit d35ff08

File tree

2 files changed

+29
-25
lines changed

2 files changed

+29
-25
lines changed

src/components/legend/get_legend_data.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,14 @@ module.exports = function getLegendData(calcdata, opts) {
8787
if(shouldCollapse) legendData = [legendData];
8888

8989
var orderFn = function(a, b) {
90-
return a.trace.legendrank - b.trace.legendrank;
90+
return (
91+
(a.trace.legendrank - b.trace.legendrank) ||
92+
(a._preSort - b._preSort) // fallback for old Chrome < 70 https://bugs.chromium.org/p/v8/issues/detail?id=90
93+
);
9194
};
9295
for(i = 0; i < legendData.length; i++) {
9396
// sort considering trace.legendrank and legend.traceorder
97+
legendData[i].forEach(function(a, i) { a._preSort = i; });
9498
legendData[i].sort(orderFn);
9599
if(reversed) legendData[i].reverse();
96100

test/jasmine/tests/legend_test.js

+24-24
Original file line numberDiff line numberDiff line change
@@ -285,14 +285,14 @@ describe('legend getLegendData user-defined legendrank', function() {
285285

286286
expected = [
287287
[
288-
[{trace: {
288+
[{_preSort: 1, trace: {
289289
legendrank: 1,
290290
type: 'scatter',
291291
visible: true,
292292
legendgroup: 'group',
293293
showlegend: true
294294
}}],
295-
[{trace: {
295+
[{_preSort: 0, trace: {
296296
legendrank: 3,
297297
type: 'scatter',
298298
visible: true,
@@ -301,7 +301,7 @@ describe('legend getLegendData user-defined legendrank', function() {
301301
}}]
302302
],
303303
[
304-
[{trace: {
304+
[{_preSort: 0, trace: {
305305
legendrank: 2,
306306
type: 'bar',
307307
visible: 'legendonly',
@@ -347,21 +347,21 @@ describe('legend getLegendData user-defined legendrank', function() {
347347

348348
expected = [
349349
[
350-
[{trace: {
350+
[{_preSort: 2, trace: {
351351
legendrank: 1,
352352
type: 'scatter',
353353
visible: true,
354354
legendgroup: '',
355355
showlegend: true
356356
}}],
357-
[{trace: {
357+
[{_preSort: 1, trace: {
358358
legendrank: 2,
359359
type: 'bar',
360360
visible: 'legendonly',
361361
legendgroup: '',
362362
showlegend: true
363363
}}],
364-
[{trace: {
364+
[{_preSort: 0, trace: {
365365
legendrank: 3,
366366
type: 'scatter',
367367
visible: true,
@@ -439,21 +439,21 @@ describe('legend getLegendData user-defined legendrank', function() {
439439

440440
expected = [
441441
[
442-
[{trace: {
442+
[{_preSort: 0, trace: {
443443
legendrank: 3,
444444
type: 'scatter',
445445
visible: true,
446446
legendgroup: '',
447447
showlegend: true
448448
}}],
449-
[{trace: {
449+
[{_preSort: 1, trace: {
450450
legendrank: 2,
451451
type: 'bar',
452452
visible: 'legendonly',
453453
legendgroup: '',
454454
showlegend: true
455455
}}],
456-
[{trace: {
456+
[{_preSort: 2, trace: {
457457
legendrank: 1,
458458
type: 'box',
459459
visible: true,
@@ -499,14 +499,14 @@ describe('legend getLegendData user-defined legendrank', function() {
499499

500500
expected = [
501501
[
502-
[{trace: {
502+
[{_preSort: 0, trace: {
503503
legendrank: 3,
504504
type: 'scatter',
505505
visible: true,
506506
legendgroup: 'group',
507507
showlegend: true
508508
}}],
509-
[{trace: {
509+
[{_preSort: 1, trace: {
510510
legendrank: 1,
511511
type: 'box',
512512
visible: true,
@@ -515,7 +515,7 @@ describe('legend getLegendData user-defined legendrank', function() {
515515
}}]
516516
],
517517
[
518-
[{trace: {
518+
[{_preSort: 0, trace: {
519519
legendrank: 2,
520520
type: 'bar',
521521
visible: 'legendonly',
@@ -564,21 +564,21 @@ describe('legend getLegendData default legendrank', function() {
564564

565565
expected = [
566566
[
567-
[{trace: {
567+
[{_preSort: 0, trace: {
568568
type: 'scatter',
569569
visible: true,
570570
legendgroup: 'group',
571571
showlegend: true
572572
}}],
573-
[{trace: {
573+
[{_preSort: 1, trace: {
574574
type: 'scatter',
575575
visible: true,
576576
legendgroup: 'group',
577577
showlegend: true
578578
}}]
579579
],
580580
[
581-
[{trace: {
581+
[{_preSort: 0, trace: {
582582
type: 'bar',
583583
visible: 'legendonly',
584584
legendgroup: '',
@@ -620,19 +620,19 @@ describe('legend getLegendData default legendrank', function() {
620620

621621
expected = [
622622
[
623-
[{trace: {
623+
[{_preSort: 0, trace: {
624624
type: 'scatter',
625625
visible: true,
626626
legendgroup: '',
627627
showlegend: true
628628
}}],
629-
[{trace: {
629+
[{_preSort: 1, trace: {
630630
type: 'bar',
631631
visible: 'legendonly',
632632
legendgroup: '',
633633
showlegend: true
634634
}}],
635-
[{trace: {
635+
[{_preSort: 2, trace: {
636636
type: 'scatter',
637637
visible: true,
638638
legendgroup: '',
@@ -703,19 +703,19 @@ describe('legend getLegendData default legendrank', function() {
703703

704704
expected = [
705705
[
706-
[{trace: {
706+
[{_preSort: 2, trace: {
707707
type: 'box',
708708
visible: true,
709709
legendgroup: '',
710710
showlegend: true
711711
}}],
712-
[{trace: {
712+
[{_preSort: 1, trace: {
713713
type: 'bar',
714714
visible: 'legendonly',
715715
legendgroup: '',
716716
showlegend: true
717717
}}],
718-
[{trace: {
718+
[{_preSort: 0, trace: {
719719
type: 'scatter',
720720
visible: true,
721721
legendgroup: '',
@@ -757,21 +757,21 @@ describe('legend getLegendData default legendrank', function() {
757757

758758
expected = [
759759
[
760-
[{trace: {
760+
[{_preSort: 1, trace: {
761761
type: 'box',
762762
visible: true,
763763
legendgroup: 'group',
764764
showlegend: true
765765
}}],
766-
[{trace: {
766+
[{_preSort: 0, trace: {
767767
type: 'scatter',
768768
visible: true,
769769
legendgroup: 'group',
770770
showlegend: true
771771
}}]
772772
],
773773
[
774-
[{trace: {
774+
[{_preSort: 0, trace: {
775775
type: 'bar',
776776
visible: 'legendonly',
777777
legendgroup: '',

0 commit comments

Comments
 (0)