plotly.js
Version:
The open source javascript graphing library that powers plotly
67 lines (50 loc) • 1.97 kB
JavaScript
var Lib = require('../../lib');
var Axes = require('../../plots/cartesian/axes');
var handleArrayContainerDefaults = require('../../plots/array_container_defaults');
var handleAnnotationCommonDefaults = require('../annotations/common_defaults');
var attributes = require('./attributes');
module.exports = function handleDefaults(sceneLayoutIn, sceneLayoutOut, opts) {
handleArrayContainerDefaults(sceneLayoutIn, sceneLayoutOut, {
name: 'annotations',
handleItemDefaults: handleAnnotationDefaults,
fullLayout: opts.fullLayout
});
};
function handleAnnotationDefaults(annIn, annOut, sceneLayout, opts) {
function coerce(attr, dflt) {
return Lib.coerce(annIn, annOut, attributes, attr, dflt);
}
function coercePosition(axLetter) {
var axName = axLetter + 'axis';
// mock in such way that getFromId grabs correct 3D axis
var gdMock = { _fullLayout: {} };
gdMock._fullLayout[axName] = sceneLayout[axName];
return Axes.coercePosition(annOut, gdMock, coerce, axLetter, axLetter, 0.5);
}
var visible = coerce('visible');
if(!visible) return;
handleAnnotationCommonDefaults(annIn, annOut, opts.fullLayout, coerce);
coercePosition('x');
coercePosition('y');
coercePosition('z');
// if you have one coordinate you should all three
Lib.noneOrAll(annIn, annOut, ['x', 'y', 'z']);
// hard-set here for completeness
annOut.xref = 'x';
annOut.yref = 'y';
annOut.zref = 'z';
coerce('xanchor');
coerce('yanchor');
coerce('xshift');
coerce('yshift');
if(annOut.showarrow) {
annOut.axref = 'pixel';
annOut.ayref = 'pixel';
// TODO maybe default values should be bigger than the 2D case?
coerce('ax', -10);
coerce('ay', -30);
// if you have one part of arrow length you should have both
Lib.noneOrAll(annIn, annOut, ['ax', 'ay']);
}
}
;