Skip to content

Commit 8575b27

Browse files
committed
replace wrap360 with Lib.mod & wrap180 with new Lib.modHalf
1 parent e792bc8 commit 8575b27

File tree

9 files changed

+41
-39
lines changed

9 files changed

+41
-39
lines changed

src/lib/angles.js

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,14 @@
88

99
'use strict';
1010

11+
var mod = require('./mod').mod;
12+
1113
var PI = Math.PI;
1214
var twoPI = 2 * PI;
1315

14-
function deg2rad(deg) {
15-
return deg / 180 * PI;
16-
}
17-
18-
function rad2deg(rad) {
19-
return rad / PI * 180;
20-
}
16+
function deg2rad(deg) { return deg / 180 * PI; }
2117

22-
function wrap360(deg) {
23-
var out = deg % 360;
24-
return out < 0 ? out + 360 : out;
25-
}
26-
27-
function wrap180(deg) {
28-
if(Math.abs(deg) > 180) deg -= Math.round(deg / 360) * 360;
29-
return deg;
30-
}
18+
function rad2deg(rad) { return rad / PI * 180; }
3119

3220
/**
3321
* is sector a full circle?
@@ -84,12 +72,12 @@ function isAngleInsideSector(a, aBnds) {
8472
s1 = aBnds[0];
8573
}
8674

87-
s0 = wrap360(rad2deg(s0));
88-
s1 = wrap360(rad2deg(s1));
89-
if(s0 > s1) s1 += 360;
75+
s0 = mod(s0, twoPI);
76+
s1 = mod(s1, twoPI);
77+
if(s0 > s1) s1 += twoPI;
9078

91-
var a0 = wrap360(rad2deg(a));
92-
var a1 = a0 + 360;
79+
var a0 = mod(a, twoPI);
80+
var a1 = a0 + twoPI;
9381

9482
return (a0 >= s0 && a0 <= s1) || (a1 >= s0 && a1 <= s1);
9583
}
@@ -237,8 +225,6 @@ function pathAnnulus(r0, r1, a0, a1, cx, cy) {
237225
module.exports = {
238226
deg2rad: deg2rad,
239227
rad2deg: rad2deg,
240-
wrap360: wrap360,
241-
wrap180: wrap180,
242228
angleDelta: angleDelta,
243229
angleDist: angleDist,
244230
isFullCircle: isFullCircle,

src/lib/coerce.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ var colorscaleNames = Object.keys(require('../components/colorscale/scales'));
1818
var nestedProperty = require('./nested_property');
1919
var counterRegex = require('./regex').counter;
2020
var DESELECTDIM = require('../constants/interactions').DESELECTDIM;
21-
var wrap180 = require('./angles').wrap180;
21+
var modHalf = require('./mod').modHalf;
2222
var isArrayOrTypedArray = require('./is_array').isArrayOrTypedArray;
2323

2424
exports.valObjectMeta = {
@@ -186,7 +186,7 @@ exports.valObjectMeta = {
186186
coerceFunction: function(v, propOut, dflt) {
187187
if(v === 'auto') propOut.set('auto');
188188
else if(!isNumeric(v)) propOut.set(dflt);
189-
else propOut.set(wrap180(+v));
189+
else propOut.set(modHalf(+v, 180));
190190
}
191191
},
192192
subplotid: {

src/lib/dates.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ var d3 = require('d3');
1313
var isNumeric = require('fast-isnumeric');
1414

1515
var Loggers = require('./loggers');
16-
var mod = require('./mod');
16+
var mod = require('./mod').mod;
1717

1818
var constants = require('../constants/numerical');
1919
var BADNUM = constants.BADNUM;

src/lib/geometry2d.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
'use strict';
1010

11-
var mod = require('./mod');
11+
var mod = require('./mod').mod;
1212

1313
/*
1414
* look for intersection of two line segments

src/lib/index.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,14 @@ lib.nestedProperty = require('./nested_property');
2222
lib.keyedContainer = require('./keyed_container');
2323
lib.relativeAttr = require('./relative_attr');
2424
lib.isPlainObject = require('./is_plain_object');
25-
lib.mod = require('./mod');
2625
lib.toLogRange = require('./to_log_range');
2726
lib.relinkPrivateKeys = require('./relink_private');
2827
lib.ensureArray = require('./ensure_array');
2928

29+
var modModule = require('./mod');
30+
lib.mod = modModule.mod;
31+
lib.modHalf = modModule.modHalf;
32+
3033
var isArrayModule = require('./is_array');
3134
lib.isTypedArray = isArrayModule.isTypedArray;
3235
lib.isArrayOrTypedArray = isArrayModule.isArrayOrTypedArray;
@@ -86,8 +89,6 @@ lib.apply2DTransform2 = matrixModule.apply2DTransform2;
8689
var anglesModule = require('./angles');
8790
lib.deg2rad = anglesModule.deg2rad;
8891
lib.rad2deg = anglesModule.rad2deg;
89-
lib.wrap360 = anglesModule.wrap360;
90-
lib.wrap180 = anglesModule.wrap180;
9192
lib.angleDelta = anglesModule.angleDelta;
9293
lib.angleDist = anglesModule.angleDist;
9394
lib.isFullCircle = anglesModule.isFullCircle;

src/lib/mod.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,23 @@
1212
* sanitized modulus function that always returns in the range [0, d)
1313
* rather than (-d, 0] if v is negative
1414
*/
15-
module.exports = function mod(v, d) {
15+
function mod(v, d) {
1616
var out = v % d;
1717
return out < 0 ? out + d : out;
18+
}
19+
20+
/**
21+
* sanitized modulus function that always returns in the range [-1.5*d, 1.5*d]
22+
* rather than (-d, 0] if v is negative
23+
*/
24+
function modHalf(v, d) {
25+
var d2 = 2 * d;
26+
return Math.abs(v) > d ?
27+
v - Math.round(v / d2) * d2 :
28+
v;
29+
}
30+
31+
module.exports = {
32+
mod: mod,
33+
modHalf: modHalf
1834
};

src/plots/polar/polar.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,9 @@ var constants = require('./constants');
3333
var helpers = require('./helpers');
3434

3535
var _ = Lib._;
36+
var mod = Lib.mod;
3637
var deg2rad = Lib.deg2rad;
3738
var rad2deg = Lib.rad2deg;
38-
var wrap360 = Lib.wrap360;
39-
var wrap180 = Lib.wrap180;
4039

4140
function Polar(gd, id) {
4241
this.id = id;
@@ -375,7 +374,7 @@ proto.updateRadialAxis = function(fullLayout, polarLayout) {
375374
var cx = _this.cx;
376375
var cy = _this.cy;
377376
var radialLayout = polarLayout.radialaxis;
378-
var a0 = wrap360(polarLayout.sector[0]);
377+
var a0 = mod(polarLayout.sector[0], 360);
379378
var ax = _this.radialAxis;
380379

381380
_this.fillViewInitialKey('radialaxis.angle', radialLayout.angle);
@@ -1122,7 +1121,7 @@ proto.updateAngularDrag = function(fullLayout) {
11221121
});
11231122

11241123
// update rotation -> range -> _m,_b
1125-
angularAxis.rotation = wrap180(rot1);
1124+
angularAxis.rotation = Lib.modHalf(rot1, 180);
11261125
angularAxis.setGeometry();
11271126
angularAxis.setScale();
11281127

@@ -1238,7 +1237,7 @@ function computeSectorBBox(sector) {
12381237
var s0 = sector[0];
12391238
var s1 = sector[1];
12401239
var arc = s1 - s0;
1241-
var a0 = wrap360(s0);
1240+
var a0 = mod(s0, 360);
12421241
var a1 = a0 + arc;
12431242

12441243
var ax0 = Math.cos(deg2rad(a0));

src/traces/scattermapbox/hover.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ module.exports = function hoverPoints(pointData, xval, yval) {
3535
var lonlat = d.lonlat;
3636
if(lonlat[0] === BADNUM) return Infinity;
3737

38-
var lon = Lib.wrap180(lonlat[0]);
38+
var lon = Lib.modHalf(lonlat[0], 180);
3939
var lat = lonlat[1];
4040
var pt = subplot.project([lon, lat]);
4141
var dx = pt.x - xa.c2p([xval2, lat]);
@@ -52,7 +52,7 @@ module.exports = function hoverPoints(pointData, xval, yval) {
5252

5353
var di = cd[pointData.index];
5454
var lonlat = di.lonlat;
55-
var lonlatShifted = [Lib.wrap180(lonlat[0]) + lonShift, lonlat[1]];
55+
var lonlatShifted = [Lib.modHalf(lonlat[0], 180) + lonShift, lonlat[1]];
5656

5757
// shift labels back to original winded globe
5858
var xc = xa.c2p(lonlatShifted);

src/traces/scattermapbox/select.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ module.exports = function selectPoints(searchInfo, polygon) {
3232
var lonlat = di.lonlat;
3333

3434
if(lonlat[0] !== BADNUM) {
35-
var lonlat2 = [Lib.wrap180(lonlat[0]), lonlat[1]];
35+
var lonlat2 = [Lib.modHalf(lonlat[0], 180), lonlat[1]];
3636
var xy = [xa.c2p(lonlat2), ya.c2p(lonlat2)];
3737

3838
if(polygon.contains(xy)) {

0 commit comments

Comments
 (0)