@@ -1643,21 +1643,14 @@ axes.drawOne = function(gd, ax, opts) {
1643
1643
}
1644
1644
}
1645
1645
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 ) ;
1654
1647
var tickVals = ax . ticks === 'inside' ? valsClipped : vals ;
1655
1648
var tickSubplots = [ ] ;
1656
1649
1657
1650
if ( ax . ticks ) {
1658
- var mainTickPath = axes . makeTickPath ( ax , ax . _mainLinePosition , tickSign [ 2 ] ) ;
1651
+ var mainTickPath = axes . makeTickPath ( ax , ax . _mainLinePosition , tickSigns [ 2 ] ) ;
1659
1652
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 ] ) ;
1661
1654
}
1662
1655
1663
1656
axes . drawTicks ( gd , ax , {
@@ -1675,8 +1668,8 @@ axes.drawOne = function(gd, ax, opts) {
1675
1668
plotinfo = fullLayout . _plots [ sp ] ;
1676
1669
// [bottom or left, top or right], free and main are handled above
1677
1670
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 ] ) ;
1680
1673
1681
1674
axes . drawTicks ( gd , ax , {
1682
1675
vals : tickVals ,
@@ -1709,6 +1702,31 @@ axes.drawOne = function(gd, ax, opts) {
1709
1702
} ) ;
1710
1703
} ;
1711
1704
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
+
1712
1730
axes . makeTransFn = function ( ax ) {
1713
1731
var axLetter = ax . _id . charAt ( 0 ) ;
1714
1732
var offset = ax . _offset ;
@@ -1717,8 +1735,6 @@ axes.makeTransFn = function(ax) {
1717
1735
function ( d ) { return 'translate(0,' + ( offset + ax . l2p ( d . x ) ) + ')' ; } ;
1718
1736
} ;
1719
1737
1720
- // incorporate sng logic here!
1721
-
1722
1738
axes . makeTickPath = function ( ax , shift , sgn ) {
1723
1739
var axLetter = ax . _id . charAt ( 0 ) ;
1724
1740
var pad = ( ax . linewidth || 1 ) / 2 ;
0 commit comments