Skip to content

Commit 7033585

Browse files
committed
add Axes.getTickSigns
1 parent 944482c commit 7033585

File tree

4 files changed

+40
-46
lines changed

4 files changed

+40
-46
lines changed

Diff for: src/components/colorbar/draw.js

+2-9
Original file line numberDiff line numberDiff line change
@@ -437,22 +437,15 @@ module.exports = function draw(gd, id) {
437437
var shift = xLeft + thickPx +
438438
(opts.outlinewidth || 0) / 2 - (opts.ticks === 'outside' ? 1 : 0);
439439

440-
// TODO dry!
441-
var sideOpposite = 'right';
442-
var axLetter = 'y';
443-
var tickSign = [-1, 1, cbAxisOut.side === sideOpposite ? 1 : -1];
444-
if((cbAxisOut.ticks !== 'inside') === (axLetter === 'x')) {
445-
tickSign = tickSign.map(function(v) { return -v; });
446-
}
447-
448440
var vals = Axes.calcTicks(cbAxisOut);
449441
var transFn = Axes.makeTransFn(cbAxisOut);
450442
var labelFns = Axes.makeLabelFns(cbAxisOut, shift);
443+
var tickSign = Axes.getTickSigns(cbAxisOut)[2];
451444

452445
Axes.drawTicks(gd, cbAxisOut, {
453446
vals: cbAxisOut.ticks === 'inside' ? Axes.clipEnds(cbAxisOut, vals) : vals,
454447
layer: axisLayer,
455-
path: Axes.makeTickPath(cbAxisOut, shift, tickSign[2]),
448+
path: Axes.makeTickPath(cbAxisOut, shift, tickSign),
456449
transFn: transFn
457450
});
458451

Diff for: src/plots/cartesian/axes.js

+30-14
Original file line numberDiff line numberDiff line change
@@ -1643,21 +1643,14 @@ axes.drawOne = function(gd, ax, opts) {
16431643
}
16441644
}
16451645

1646-
// Which direction do the 'ax.side' values, and free ticks go?
1647-
// then we flip if outside XOR y axis
1648-
var sideOpposite = {x: 'top', y: 'right'}[axLetter];
1649-
var tickSign = [-1, 1, ax.side === sideOpposite ? 1 : -1];
1650-
if((ax.ticks !== 'inside') === (axLetter === 'x')) {
1651-
tickSign = tickSign.map(function(v) { return -v; });
1652-
}
1653-
1646+
var tickSigns = axes.getTickSigns(ax);
16541647
var tickVals = ax.ticks === 'inside' ? valsClipped : vals;
16551648
var tickSubplots = [];
16561649

16571650
if(ax.ticks) {
1658-
var mainTickPath = axes.makeTickPath(ax, ax._mainLinePosition, tickSign[2]);
1651+
var mainTickPath = axes.makeTickPath(ax, ax._mainLinePosition, tickSigns[2]);
16591652
if(ax._anchorAxis && ax.mirror && ax.mirror !== true) {
1660-
mainTickPath += axes.makeTickPath(ax, ax._mainMirrorPosition, -tickSign[2]);
1653+
mainTickPath += axes.makeTickPath(ax, ax._mainMirrorPosition, tickSigns[3]);
16611654
}
16621655

16631656
axes.drawTicks(gd, ax, {
@@ -1675,8 +1668,8 @@ axes.drawOne = function(gd, ax, opts) {
16751668
plotinfo = fullLayout._plots[sp];
16761669
// [bottom or left, top or right], free and main are handled above
16771670
var linepositions = ax._linepositions[sp] || [];
1678-
var spTickPath = axes.makeTickPath(ax, linepositions[0], tickSign[0]) +
1679-
axes.makeTickPath(ax, linepositions[1], tickSign[1]);
1671+
var spTickPath = axes.makeTickPath(ax, linepositions[0], tickSigns[0]) +
1672+
axes.makeTickPath(ax, linepositions[1], tickSigns[1]);
16801673

16811674
axes.drawTicks(gd, ax, {
16821675
vals: tickVals,
@@ -1709,6 +1702,31 @@ axes.drawOne = function(gd, ax, opts) {
17091702
});
17101703
};
17111704

1705+
/**
1706+
* Which direction do the 'ax.side' values, and free ticks go?
1707+
*
1708+
* @param {object} ax (full) axis object
1709+
* - @param {string} _id (starting with 'x' or 'y')
1710+
* - @param {string} side
1711+
* - @param {string} ticks
1712+
* @return {array} all entries are either -1 or 1
1713+
* - [0]: sign for top/right ticks (i.e. negative SVG direction)
1714+
* - [1]: sign for bottom/left ticks (i.e. positive SVG direction)
1715+
* - [2]: sign for ticks corresponding to 'ax.side'
1716+
* - [3]: sign for ticks mirroring 'ax.side'
1717+
*/
1718+
axes.getTickSigns = function(ax) {
1719+
var axLetter = ax._id.charAt(0);
1720+
var sideOpposite = {x: 'top', y: 'right'}[axLetter];
1721+
var main = ax.side === sideOpposite ? 1 : -1;
1722+
var out = [-1, 1, main, -main];
1723+
// then we flip if outside XOR y axis
1724+
if((ax.ticks !== 'inside') === (axLetter === 'x')) {
1725+
out = out.map(function(v) { return -v; });
1726+
}
1727+
return out;
1728+
};
1729+
17121730
axes.makeTransFn = function(ax) {
17131731
var axLetter = ax._id.charAt(0);
17141732
var offset = ax._offset;
@@ -1717,8 +1735,6 @@ axes.makeTransFn = function(ax) {
17171735
function(d) { return 'translate(0,' + (offset + ax.l2p(d.x)) + ')'; };
17181736
};
17191737

1720-
// incorporate sng logic here!
1721-
17221738
axes.makeTickPath = function(ax, shift, sgn) {
17231739
var axLetter = ax._id.charAt(0);
17241740
var pad = (ax.linewidth || 1) / 2;

Diff for: src/plots/polar/polar.js

+4-14
Original file line numberDiff line numberDiff line change
@@ -405,17 +405,12 @@ proto.updateRadialAxis = function(fullLayout, polarLayout) {
405405
var vals = Axes.calcTicks(ax);
406406
var valsClipped = Axes.clipEnds(ax, vals);
407407
var labelFns = Axes.makeLabelFns(ax, 0);
408-
409-
var sideOpposite = {x: 'top', y: 'right'}[ax._id];
410-
var tickSign = [-1, 1, ax.side === sideOpposite ? 1 : -1];
411-
if((ax.ticks !== 'inside') === (ax._id === 'x')) {
412-
tickSign = tickSign.map(function(v) { return -v; });
413-
}
408+
var tickSign = Axes.getTickSigns(ax)[2];
414409

415410
Axes.drawTicks(gd, ax, {
416411
vals: vals,
417412
layer: layers['radial-axis'],
418-
path: Axes.makeTickPath(ax, 0, tickSign[2]),
413+
path: Axes.makeTickPath(ax, 0, tickSign),
419414
transFn: transFn,
420415
noCrisp: true
421416
});
@@ -625,17 +620,12 @@ proto.updateAngularAxis = function(fullLayout, polarLayout) {
625620
}
626621

627622
if(ax.visible) {
628-
// TODO dry!!
629-
var sideOpposite = 'right';
630-
var tickSign = [-1, 1, ax.side === sideOpposite ? 1 : -1];
631-
if((ax.ticks !== 'inside') === false) {
632-
tickSign = tickSign.map(function(v) { return -v; });
633-
}
623+
var tickSign = ax.ticks === 'inside' ? -1 : 1;
634624

635625
Axes.drawTicks(gd, ax, {
636626
vals: vals,
637627
layer: layers['angular-axis'],
638-
path: 'M' + (tickSign[2] * pad) + ',0h' + (tickSign[2] * ax.ticklen),
628+
path: 'M' + (tickSign * pad) + ',0h' + (tickSign * ax.ticklen),
639629
transFn: transFn2,
640630
noCrisp: true
641631
});

Diff for: src/plots/ternary/ternary.js

+4-9
Original file line numberDiff line numberDiff line change
@@ -419,20 +419,15 @@ proto.drawAx = function(ax) {
419419
}
420420

421421
ax.setScale();
422+
422423
var vals = Axes.calcTicks(ax);
423424
var valsClipped = Axes.clipEnds(ax, vals);
424425
var transFn = Axes.makeTransFn(ax);
425-
426-
// TODO dry!!
427-
var sideOpposite = {x: 'top', y: 'right'}[axId];
428-
var tickSign = [-1, 1, ax.side === sideOpposite ? 1 : -1];
429-
if((ax.ticks !== 'inside') === (axId === 'x')) {
430-
tickSign = tickSign.map(function(v) { return -v; });
431-
}
426+
var tickSign = Axes.getTickSigns(ax)[2];
432427

433428
var caRad = Lib.deg2rad(counterAngle);
434-
var pad = tickSign[2] * (ax.linewidth || 1) / 2;
435-
var len = tickSign[2] * ax.ticklen;
429+
var pad = tickSign * (ax.linewidth || 1) / 2;
430+
var len = tickSign * ax.ticklen;
436431
var w = _this.w;
437432
var h = _this.h;
438433

0 commit comments

Comments
 (0)