@@ -34,63 +34,70 @@ function annAutorange(gd) {
34
34
Lib . filterVisible ( fullLayout . annotations ) . forEach ( function ( ann ) {
35
35
var xa = Axes . getFromId ( gd , ann . xref ) ;
36
36
var ya = Axes . getFromId ( gd , ann . yref ) ;
37
- var headSize = 3 * ann . arrowsize * ann . arrowwidth || 0 ;
38
- var startHeadSize = 3 * ann . startarrowsize * ann . arrowwidth || 0 ;
39
-
40
- var headPlus , headMinus , startHeadPlus , startHeadMinus ;
41
-
42
- if ( xa ) {
43
- headPlus = headSize + ann . xshift ;
44
- headMinus = headSize - ann . xshift ;
45
- startHeadPlus = startHeadSize + ann . xshift ;
46
- startHeadMinus = startHeadSize - ann . xshift ;
47
-
48
- if ( ann . axref === ann . xref ) {
49
- // expand for the arrowhead (padded by arrowhead)
50
- Axes . expand ( xa , [ xa . r2c ( ann . x ) ] , {
51
- ppadplus : headPlus ,
52
- ppadminus : headMinus
53
- } ) ;
54
- // again for the textbox (padded by textbox)
55
- Axes . expand ( xa , [ xa . r2c ( ann . ax ) ] , {
56
- ppadplus : Math . max ( ann . _xpadplus , startHeadPlus ) ,
57
- ppadminus : Math . max ( ann . _xpadminus , startHeadMinus )
58
- } ) ;
59
- }
60
- else {
61
- startHeadPlus = ann . ax ? startHeadPlus + ann . ax : startHeadPlus ;
62
- startHeadMinus = ann . ax ? startHeadMinus - ann . ax : startHeadMinus ;
63
- Axes . expand ( xa , [ xa . r2c ( ann . x ) ] , {
64
- ppadplus : Math . max ( ann . _xpadplus , headPlus , startHeadPlus ) ,
65
- ppadminus : Math . max ( ann . _xpadminus , headMinus , startHeadMinus )
66
- } ) ;
67
- }
68
- }
69
-
70
- if ( ya ) {
71
- headPlus = headSize - ann . yshift ;
72
- headMinus = headSize + ann . yshift ;
73
- startHeadPlus = startHeadSize - ann . yshift ;
74
- startHeadMinus = startHeadSize + ann . yshift ;
75
-
76
- if ( ann . ayref === ann . yref ) {
77
- Axes . expand ( ya , [ ya . r2c ( ann . y ) ] , {
78
- ppadplus : headPlus ,
79
- ppadminus : headMinus
80
- } ) ;
81
- Axes . expand ( ya , [ ya . r2c ( ann . ay ) ] , {
82
- ppadplus : Math . max ( ann . _ypadplus , startHeadPlus ) ,
83
- ppadminus : Math . max ( ann . _ypadminus , startHeadMinus )
84
- } ) ;
85
- }
86
- else {
87
- startHeadPlus = ann . ay ? startHeadPlus + ann . ay : startHeadPlus ;
88
- startHeadMinus = ann . ay ? startHeadMinus - ann . ay : startHeadMinus ;
89
- Axes . expand ( ya , [ ya . r2c ( ann . y ) ] , {
90
- ppadplus : Math . max ( ann . _ypadplus , headPlus , startHeadPlus ) ,
91
- ppadminus : Math . max ( ann . _ypadminus , headMinus , startHeadMinus )
92
- } ) ;
93
- }
94
- }
37
+
38
+ ann . _extremes = { } ;
39
+ if ( xa ) calcAxisExpansion ( ann , xa ) ;
40
+ if ( ya ) calcAxisExpansion ( ann , ya ) ;
95
41
} ) ;
96
42
}
43
+
44
+ function calcAxisExpansion ( ann , ax ) {
45
+ var headSize = 3 * ann . arrowsize * ann . arrowwidth || 0 ;
46
+ var startHeadSize = 3 * ann . startarrowsize * ann . arrowwidth || 0 ;
47
+
48
+ var axId = ax . _id ;
49
+ var letter = axId . charAt ( 0 ) ;
50
+ var pos = ann [ letter ] ;
51
+ var apos = ann [ 'a' + letter ] ;
52
+ var ref = ann [ letter + 'ref' ] ;
53
+ var aref = ann [ 'a' + letter + 'ref' ] ;
54
+ var shift = ann [ letter + 'shift' ] ;
55
+ var padplus = ann [ '_' + letter + 'padplus' ] ;
56
+ var padminus = ann [ '_' + letter + 'padminus' ] ;
57
+
58
+ var headPlus , headMinus ;
59
+ var startHeadPlus , startHeadMinus ;
60
+
61
+ switch ( letter ) {
62
+ case 'x' :
63
+ headPlus = headSize + shift ;
64
+ headMinus = headSize - shift ;
65
+ startHeadPlus = startHeadSize + shift ;
66
+ startHeadMinus = startHeadSize - shift ;
67
+ break ;
68
+ case 'y' :
69
+ headPlus = headSize - shift ;
70
+ headMinus = headSize + shift ;
71
+ startHeadPlus = startHeadSize - shift ;
72
+ startHeadMinus = startHeadSize + shift ;
73
+ break ;
74
+ }
75
+
76
+ var extremes ;
77
+
78
+ if ( aref === ref ) {
79
+ // expand for the arrowhead (padded by arrowhead)
80
+ var extremeArrowHead = Axes . findExtremes ( ax , [ ax . r2c ( pos ) ] , {
81
+ ppadplus : headPlus ,
82
+ ppadminus : headMinus
83
+ } ) ;
84
+ // again for the textbox (padded by textbox)
85
+ var extremeText = Axes . findExtremes ( ax , [ ax . r2c ( apos ) ] , {
86
+ ppadplus : Math . max ( padplus , startHeadPlus ) ,
87
+ ppadminus : Math . max ( padminus , startHeadMinus )
88
+ } ) ;
89
+ extremes = {
90
+ min : [ extremeArrowHead . min [ 0 ] , extremeText . min [ 0 ] ] ,
91
+ max : [ extremeArrowHead . max [ 0 ] , extremeText . max [ 0 ] ]
92
+ } ;
93
+ } else {
94
+ startHeadPlus = apos ? startHeadPlus + apos : startHeadPlus ;
95
+ startHeadMinus = apos ? startHeadMinus - apos : startHeadMinus ;
96
+ extremes = Axes . findExtremes ( ax , [ ax . r2c ( pos ) ] , {
97
+ ppadplus : Math . max ( padplus , headPlus , startHeadPlus ) ,
98
+ ppadminus : Math . max ( padminus , headMinus , startHeadMinus )
99
+ } ) ;
100
+ }
101
+
102
+ ann . _extremes [ axId ] = extremes ;
103
+ }
0 commit comments