Skip to content

Commit cd53a6a

Browse files
committed
Merge remote-tracking branch 'origin/master' into new-formats-in-period-ticklabelmode
2 parents 9424347 + 29b456e commit cd53a6a

File tree

8 files changed

+90
-23
lines changed

8 files changed

+90
-23
lines changed

src/components/modebar/buttons.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,9 @@ modeBarButtons.resetCameraLastSave3d = {
390390
function handleCamera3d(gd, ev) {
391391
var button = ev.currentTarget;
392392
var attr = button.getAttribute('data-attr');
393+
var resetLastSave = attr === 'resetLastSave';
394+
var resetDefault = attr === 'resetDefault';
395+
393396
var fullLayout = gd._fullLayout;
394397
var sceneIds = fullLayout._subplots.gl3d || [];
395398
var aobj = {};
@@ -402,12 +405,12 @@ function handleCamera3d(gd, ev) {
402405
var scene = fullLayout[sceneId]._scene;
403406
var didUpdate;
404407

405-
if(attr === 'resetLastSave') {
408+
if(resetLastSave) {
406409
aobj[camera + '.up'] = scene.viewInitial.up;
407410
aobj[camera + '.eye'] = scene.viewInitial.eye;
408411
aobj[camera + '.center'] = scene.viewInitial.center;
409412
didUpdate = true;
410-
} else if(attr === 'resetDefault') {
413+
} else if(resetDefault) {
411414
aobj[camera + '.up'] = null;
412415
aobj[camera + '.eye'] = null;
413416
aobj[camera + '.center'] = null;

src/plot_api/plot_api.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1739,13 +1739,14 @@ function _restyle(gd, aobj, traces) {
17391739
// swap hovermode if set to "compare x/y data"
17401740
if(ai === 'orientationaxes') {
17411741
var hovermode = nestedProperty(gd.layout, 'hovermode');
1742-
if(hovermode.get() === 'x') {
1742+
var h = hovermode.get();
1743+
if(h === 'x') {
17431744
hovermode.set('y');
1744-
} else if(hovermode.get() === 'y') {
1745+
} else if(h === 'y') {
17451746
hovermode.set('x');
1746-
} else if(hovermode.get() === 'x unified') {
1747+
} else if(h === 'x unified') {
17471748
hovermode.set('y unified');
1748-
} else if(hovermode.get() === 'y unified') {
1749+
} else if(h === 'y unified') {
17491750
hovermode.set('x unified');
17501751
}
17511752
}
@@ -2769,6 +2770,8 @@ function react(gd, data, layout, config) {
27692770
// when at least one animatable attribute has changed,
27702771
// N.B. config changed aren't animatable
27712772
if(newFullLayout.transition && !configChanged && (restyleFlags.anim || relayoutFlags.anim)) {
2773+
if(relayoutFlags.ticks) seq.push(subroutines.doTicksRelayout);
2774+
27722775
Plots.doCalcdata(gd);
27732776
subroutines.doAutoRangeAndConstraints(gd);
27742777

src/plots/cartesian/axes.js

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -743,7 +743,8 @@ axes.calcTicks = function calcTicks(ax, opts) {
743743

744744
var removedPreTick0Label = false;
745745
var ticksOut = new Array(tickVals.length);
746-
for(var i = 0; i < tickVals.length; i++) {
746+
var i;
747+
for(i = 0; i < tickVals.length; i++) {
747748
var _minor = tickVals[i].minor;
748749
var _value = tickVals[i].value;
749750

@@ -771,28 +772,32 @@ axes.calcTicks = function calcTicks(ax, opts) {
771772
var B = tickVals[b].value;
772773

773774
var delta = definedDelta || Math.abs(B - A);
774-
var half = axrev ? -0.5 : 0.5;
775775
if(delta >= ONEDAY * 365) { // Years could have days less than ONEAVGYEAR period
776-
v += half * ONEAVGYEAR;
776+
v += ONEAVGYEAR / 2;
777777
} else if(delta >= ONEDAY * 28) { // Months could have days less than ONEAVGMONTH period
778-
v += half * ONEAVGMONTH;
778+
v += ONEAVGMONTH / 2;
779779
} else if(delta >= ONEDAY) {
780-
v += half * ONEDAY;
780+
v += ONEDAY / 2;
781781
}
782782

783783
ticksOut[i].periodX = v;
784784

785785
if(v > maxRange || v < minRange) { // hide label if outside the range
786786
ticksOut[i].text = '';
787-
if(i === 0) removedPreTick0Label = true;
787+
removedPreTick0Label = true;
788788
}
789789
}
790790
}
791791

792-
if(removedPreTick0Label && ticksOut.length > 1) {
793-
// redo tick0 text
794-
ax._prevDateHead = '';
795-
ticksOut[1].text = axes.tickText(ax, tickVals[1].value).text;
792+
if(removedPreTick0Label) {
793+
for(i = 1; i < ticksOut.length; i++) {
794+
if(ticksOut[i].periodX <= maxRange && ticksOut[i].periodX >= minRange) {
795+
// redo first visible tick
796+
ax._prevDateHead = '';
797+
ticksOut[i].text = axes.tickText(ax, tickVals[i].value).text;
798+
break;
799+
}
800+
}
796801
}
797802

798803
ax._inCalcTicks = false;

src/traces/table/plot.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,14 @@ module.exports = function plot(gd, wrappedTraceHolders) {
5757
.classed(c.cn.tableControlView, true)
5858
.style('box-sizing', 'content-box');
5959
if(dynamic) {
60+
var wheelEvent = 'onwheel' in document ? 'wheel' : 'mousewheel';
6061
cvEnter
6162
.on('mousemove', function(d) {
6263
tableControlView
6364
.filter(function(dd) {return d === dd;})
6465
.call(renderScrollbarKit, gd);
6566
})
66-
.on('mousewheel', function(d) {
67+
.on(wheelEvent, function(d) {
6768
if(d.scrollbarState.wheeling) return;
6869
d.scrollbarState.wheeling = true;
6970
var newY = d.scrollY + d3.event.deltaY;
43 Bytes
Loading

test/jasmine/assets/mouse_event.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,8 @@ module.exports = function(type, x, y, opts) {
3636
var el = (opts && opts.element) || document.elementFromPoint(x, y);
3737
var ev;
3838

39-
if(type === 'scroll' || type === 'mousewheel') {
40-
// somehow table needs this to be mouswheel but others need wheel.
41-
// yet they all work the same in the browser?
42-
type = (type === 'scroll') ? 'wheel' : 'mousewheel';
39+
if(type === 'scroll' || type === 'wheel') {
40+
type = 'wheel';
4341
ev = new window.WheelEvent(type, Lib.extendFlat({}, fullOpts, opts));
4442
} else {
4543
ev = new window.MouseEvent(type, fullOpts);

test/jasmine/tests/table_test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ describe('table', function() {
415415
gdWheelEventCount = 0;
416416
Plotly.plot(gd, mockCopy.data, mockCopy.layout)
417417
.then(function() {
418-
gd.addEventListener('mousewheel', function(evt) {
418+
gd.addEventListener('wheel', function(evt) {
419419
gdWheelEventCount++;
420420
// make sure we don't *really* scroll the page.
421421
// that would be annoying!
@@ -440,7 +440,7 @@ describe('table', function() {
440440

441441
function scroll(pos, dy) {
442442
mouseEvent('mousemove', pos.x, pos.y);
443-
mouseEvent('mousewheel', pos.x, pos.y, {deltaX: 0, deltaY: dy});
443+
mouseEvent('wheel', pos.x, pos.y, {deltaX: 0, deltaY: dy});
444444
}
445445

446446
it('bubbles scroll events iff they did not scroll a table', function() {

test/jasmine/tests/titles_test.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,63 @@ describe('Titles can be updated', function() {
621621
}
622622
});
623623

624+
describe('Titles and labels', function() {
625+
'use strict';
626+
627+
var gd;
628+
beforeEach(function() { gd = createGraphDiv(); });
629+
afterEach(destroyGraphDiv);
630+
631+
it('should react with transition', function(done) {
632+
Plotly.newPlot(gd, {
633+
data: [
634+
{
635+
type: 'bar',
636+
x: ['a', 'b'],
637+
y: [1, 2],
638+
}
639+
],
640+
layout: {
641+
title: {
642+
text: 'OLD'
643+
},
644+
xaxis: {
645+
title: {
646+
text: 'x-old'
647+
}
648+
}
649+
}
650+
}).then(function() {
651+
Plotly.react(gd, {
652+
data: [
653+
{
654+
type: 'bar',
655+
x: ['b', 'a'],
656+
y: [3, 2],
657+
}
658+
],
659+
layout: {
660+
title: {
661+
text: 'NEW'
662+
},
663+
xaxis: {
664+
title: {
665+
text: 'x-new'
666+
}
667+
},
668+
transition: { duration: 500 }
669+
}
670+
});
671+
}).then(function() {
672+
expectTitle('NEW');
673+
expect(xTitleSel().text()).toBe('x-new');
674+
expect(d3.select('.xtick').text()).toBe('b');
675+
})
676+
.catch(fail)
677+
.then(done);
678+
});
679+
});
680+
624681
describe('Titles support setting custom font properties', function() {
625682
'use strict';
626683

0 commit comments

Comments
 (0)