Skip to content

Commit 138ac35

Browse files
committed
DRY layout array container defaults using handleArrayContainerDefaults
1 parent d21d782 commit 138ac35

File tree

9 files changed

+43
-68
lines changed

9 files changed

+43
-68
lines changed

src/components/annotations/annotation_defaults.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ var Axes = require('../../plots/cartesian/axes');
1616
var attributes = require('./attributes');
1717

1818

19-
module.exports = function handleAnnotationDefaults(annIn, fullLayout) {
20-
var annOut = {};
19+
module.exports = function handleAnnotationDefaults(annIn, annOut, fullLayout, opts) {
20+
opts = opts || {};
2121

2222
function coerce(attr, dflt) {
2323
return Lib.coerce(annIn, annOut, attributes, attr, dflt);
2424
}
2525

26-
var visible = coerce('visible');
26+
var visible = coerce('visible', !opts.itemIsNotPlainObject);
2727

2828
if(!visible) return annOut;
2929

src/components/annotations/defaults.js

+6-8
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,15 @@
99

1010
'use strict';
1111

12+
var handleArrayContainerDefaults = require('../../plots/array_container_defaults');
1213
var handleAnnotationDefaults = require('./annotation_defaults');
1314

1415

1516
module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {
16-
var containerIn = layoutIn.annotations || [],
17-
containerOut = layoutOut.annotations = [];
17+
var opts = {
18+
name: 'annotations',
19+
handleItemDefaults: handleAnnotationDefaults
20+
};
1821

19-
for(var i = 0; i < containerIn.length; i++) {
20-
var annIn = containerIn[i] || {},
21-
annOut = handleAnnotationDefaults(annIn, layoutOut);
22-
23-
containerOut.push(annOut);
24-
}
22+
handleArrayContainerDefaults(layoutIn, layoutOut, opts);
2523
};

src/components/annotations/draw.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,8 @@ function drawOne(gd, index, opt, value) {
243243
optionsIn[axLetter] = position;
244244
}
245245

246-
var options = handleAnnotationDefaults(optionsIn, fullLayout);
246+
var options = {};
247+
handleAnnotationDefaults(optionsIn, options, fullLayout);
247248
fullLayout.annotations[index] = options;
248249

249250
var xa = Axes.getFromId(gd, options.xref),

src/components/images/defaults.js

+8-12
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,20 @@
88

99
'use strict';
1010

11-
var Axes = require('../../plots/cartesian/axes');
1211
var Lib = require('../../lib');
13-
var attributes = require('./attributes');
12+
var Axes = require('../../plots/cartesian/axes');
13+
var handleArrayContainerDefaults = require('../../plots/array_container_defaults');
1414

15+
var attributes = require('./attributes');
1516
var name = 'images';
1617

1718
module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {
18-
var contIn = Array.isArray(layoutIn[name]) ? layoutIn[name] : [],
19-
contOut = layoutOut[name] = [];
19+
var opts = {
20+
name: name,
21+
handleItemDefaults: imageDefaults
22+
};
2023

21-
for(var i = 0; i < contIn.length; i++) {
22-
var itemIn = contIn[i] || {},
23-
itemOut = {};
24-
25-
imageDefaults(itemIn, itemOut, layoutOut);
26-
27-
contOut.push(itemOut);
28-
}
24+
handleArrayContainerDefaults(layoutIn, layoutOut, opts);
2925
};
3026

3127

src/components/shapes/defaults.js

+6-8
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,15 @@
99

1010
'use strict';
1111

12+
var handleArrayContainerDefaults = require('../../plots/array_container_defaults');
1213
var handleShapeDefaults = require('./shape_defaults');
1314

1415

1516
module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {
16-
var containerIn = layoutIn.shapes || [],
17-
containerOut = layoutOut.shapes = [];
17+
var opts = {
18+
name: 'shapes',
19+
handleItemDefaults: handleShapeDefaults
20+
};
1821

19-
for(var i = 0; i < containerIn.length; i++) {
20-
var shapeIn = containerIn[i] || {},
21-
shapeOut = handleShapeDefaults(shapeIn, layoutOut);
22-
23-
containerOut.push(shapeOut);
24-
}
22+
handleArrayContainerDefaults(layoutIn, layoutOut, opts);
2523
};

src/components/shapes/draw.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,8 @@ function updateShape(gd, index, opt, value) {
234234
optionsIn[posAttr] = position;
235235
}
236236

237-
var options = handleShapeDefaults(optionsIn, gd._fullLayout);
237+
var options = {};
238+
handleShapeDefaults(optionsIn, options, gd._fullLayout);
238239
gd._fullLayout.shapes[index] = options;
239240

240241
var clipAxes;

src/components/shapes/shape_defaults.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@ var Axes = require('../../plots/cartesian/axes');
1515
var attributes = require('./attributes');
1616
var helpers = require('./helpers');
1717

18-
module.exports = function handleShapeDefaults(shapeIn, fullLayout) {
19-
var shapeOut = {};
18+
19+
module.exports = function handleShapeDefaults(shapeIn, shapeOut, fullLayout, opts) {
20+
opts = opts || {};
2021

2122
function coerce(attr, dflt) {
2223
return Lib.coerce(shapeIn, shapeOut, attributes, attr, dflt);
2324
}
2425

25-
var visible = coerce('visible');
26+
var visible = coerce('visible', !opts.itemIsNotPlainObject);
2627

2728
if(!visible) return shapeOut;
2829

src/components/sliders/defaults.js

+6-16
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
'use strict';
1010

1111
var Lib = require('../../lib');
12+
var handleArrayContainerDefaults = require('../../plots/array_container_defaults');
1213

1314
var attributes = require('./attributes');
1415
var constants = require('./constants');
@@ -18,23 +19,12 @@ var stepAttrs = attributes.steps;
1819

1920

2021
module.exports = function slidersDefaults(layoutIn, layoutOut) {
21-
var contIn = Array.isArray(layoutIn[name]) ? layoutIn[name] : [],
22-
contOut = layoutOut[name] = [];
22+
var opts = {
23+
name: name,
24+
handleItemDefaults: sliderDefaults
25+
};
2326

24-
for(var i = 0; i < contIn.length; i++) {
25-
var sliderIn = contIn[i] || {},
26-
sliderOut = {};
27-
28-
sliderDefaults(sliderIn, sliderOut, layoutOut);
29-
30-
// used on button click to update the 'active' field
31-
sliderOut._input = sliderIn;
32-
33-
// used to determine object constancy
34-
sliderOut._index = i;
35-
36-
contOut.push(sliderOut);
37-
}
27+
handleArrayContainerDefaults(layoutIn, layoutOut, opts);
3828
};
3929

4030
function sliderDefaults(sliderIn, sliderOut, layoutOut) {

src/components/updatemenus/defaults.js

+6-16
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
'use strict';
1010

1111
var Lib = require('../../lib');
12+
var handleArrayContainerDefaults = require('../../plots/array_container_defaults');
1213

1314
var attributes = require('./attributes');
1415
var constants = require('./constants');
@@ -18,23 +19,12 @@ var buttonAttrs = attributes.buttons;
1819

1920

2021
module.exports = function updateMenusDefaults(layoutIn, layoutOut) {
21-
var contIn = Array.isArray(layoutIn[name]) ? layoutIn[name] : [],
22-
contOut = layoutOut[name] = [];
22+
var opts = {
23+
name: name,
24+
handleItemDefaults: menuDefaults
25+
};
2326

24-
for(var i = 0; i < contIn.length; i++) {
25-
var menuIn = contIn[i] || {},
26-
menuOut = {};
27-
28-
menuDefaults(menuIn, menuOut, layoutOut);
29-
30-
// used on button click to update the 'active' field
31-
menuOut._input = menuIn;
32-
33-
// used to determine object constancy
34-
menuOut._index = i;
35-
36-
contOut.push(menuOut);
37-
}
27+
handleArrayContainerDefaults(layoutIn, layoutOut, opts);
3828
};
3929

4030
function menuDefaults(menuIn, menuOut, layoutOut) {

0 commit comments

Comments
 (0)