Skip to content
Merged
63 changes: 63 additions & 0 deletions src/components/modebar/attributes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
'use strict';

var constants = require('./constants');

module.exports = {
editType: 'modebar',

orientation: {
valType: 'enumerated',
values: ['v', 'h'],
dflt: 'h',
editType: 'modebar',
description: 'Sets the orientation of the modebar.'
},
bgcolor: {
valType: 'color',
editType: 'modebar',
description: 'Sets the background color of the modebar.'
},
color: {
valType: 'color',
editType: 'modebar',
description: 'Sets the color of the icons in the modebar.'
},
activecolor: {
valType: 'color',
editType: 'modebar',
description: 'Sets the color of the active or hovered on icons in the modebar.'
},
uirevision: {
valType: 'any',
editType: 'none',
description: [
'Controls persistence of user-driven changes related to the modebar,',
'including `hovermode`, `dragmode`, and `showspikes` at both the',
'root level and inside subplots. Defaults to `layout.uirevision`.'
].join(' ')
},
add: {
valType: 'string',
arrayOk: true,
dflt: '',
editType: 'modebar',
description: [
'Determines which predefined modebar buttons to add.',
'Please note that these buttons will only be shown if they are',
'compatible with all trace types used in a graph.',
'Similar to `config.modeBarButtonsToAdd` option.',
'This may include *' + constants.backButtons.join('*, *') + '*.'
].join(' ')
},
remove: {
valType: 'string',
arrayOk: true,
dflt: '',
editType: 'modebar',
description: [
'Determines which predefined modebar buttons to remove.',
'Similar to `config.modeBarButtonsToRemove` option.',
'This may include *' + constants.foreButtons.join('*, *') + '*.'
].join(' ')
}
};
24 changes: 24 additions & 0 deletions src/components/modebar/buttons.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ modeBarButtons.editInChartStudio = {

modeBarButtons.zoom2d = {
name: 'zoom2d',
_cat: 'zoom',
title: function(gd) { return _(gd, 'Zoom'); },
attr: 'dragmode',
val: 'zoom',
Expand All @@ -101,6 +102,7 @@ modeBarButtons.zoom2d = {

modeBarButtons.pan2d = {
name: 'pan2d',
_cat: 'pan',
title: function(gd) { return _(gd, 'Pan'); },
attr: 'dragmode',
val: 'pan',
Expand All @@ -110,6 +112,7 @@ modeBarButtons.pan2d = {

modeBarButtons.select2d = {
name: 'select2d',
_cat: 'select',
title: function(gd) { return _(gd, 'Box Select'); },
attr: 'dragmode',
val: 'select',
Expand All @@ -119,6 +122,7 @@ modeBarButtons.select2d = {

modeBarButtons.lasso2d = {
name: 'lasso2d',
_cat: 'lasso',
title: function(gd) { return _(gd, 'Lasso Select'); },
attr: 'dragmode',
val: 'lasso',
Expand Down Expand Up @@ -180,6 +184,7 @@ modeBarButtons.eraseshape = {

modeBarButtons.zoomIn2d = {
name: 'zoomIn2d',
_cat: 'zoomin',
title: function(gd) { return _(gd, 'Zoom in'); },
attr: 'zoom',
val: 'in',
Expand All @@ -189,6 +194,7 @@ modeBarButtons.zoomIn2d = {

modeBarButtons.zoomOut2d = {
name: 'zoomOut2d',
_cat: 'zoomout',
title: function(gd) { return _(gd, 'Zoom out'); },
attr: 'zoom',
val: 'out',
Expand All @@ -198,6 +204,7 @@ modeBarButtons.zoomOut2d = {

modeBarButtons.autoScale2d = {
name: 'autoScale2d',
_cat: 'autoscale',
title: function(gd) { return _(gd, 'Autoscale'); },
attr: 'zoom',
val: 'auto',
Expand All @@ -207,6 +214,7 @@ modeBarButtons.autoScale2d = {

modeBarButtons.resetScale2d = {
name: 'resetScale2d',
_cat: 'resetscale',
title: function(gd) { return _(gd, 'Reset axes'); },
attr: 'zoom',
val: 'reset',
Expand All @@ -216,6 +224,7 @@ modeBarButtons.resetScale2d = {

modeBarButtons.hoverClosestCartesian = {
name: 'hoverClosestCartesian',
_cat: 'hoverclosest',
title: function(gd) { return _(gd, 'Show closest data on hover'); },
attr: 'hovermode',
val: 'closest',
Expand All @@ -226,6 +235,7 @@ modeBarButtons.hoverClosestCartesian = {

modeBarButtons.hoverCompareCartesian = {
name: 'hoverCompareCartesian',
_cat: 'hoverCompare',
title: function(gd) { return _(gd, 'Compare data on hover'); },
attr: 'hovermode',
val: function(gd) {
Expand Down Expand Up @@ -309,6 +319,7 @@ function handleCartesian(gd, ev) {

modeBarButtons.zoom3d = {
name: 'zoom3d',
_cat: 'zoom',
title: function(gd) { return _(gd, 'Zoom'); },
attr: 'scene.dragmode',
val: 'zoom',
Expand All @@ -318,6 +329,7 @@ modeBarButtons.zoom3d = {

modeBarButtons.pan3d = {
name: 'pan3d',
_cat: 'pan',
title: function(gd) { return _(gd, 'Pan'); },
attr: 'scene.dragmode',
val: 'pan',
Expand Down Expand Up @@ -365,6 +377,7 @@ function handleDrag3d(gd, ev) {

modeBarButtons.resetCameraDefault3d = {
name: 'resetCameraDefault3d',
_cat: 'resetCameraDefault',
title: function(gd) { return _(gd, 'Reset camera to default'); },
attr: 'resetDefault',
icon: Icons.home,
Expand All @@ -373,6 +386,7 @@ modeBarButtons.resetCameraDefault3d = {

modeBarButtons.resetCameraLastSave3d = {
name: 'resetCameraLastSave3d',
_cat: 'resetCameraLastSave',
title: function(gd) { return _(gd, 'Reset camera to last save'); },
attr: 'resetLastSave',
icon: Icons.movie,
Expand Down Expand Up @@ -422,6 +436,7 @@ function handleCamera3d(gd, ev) {

modeBarButtons.hoverClosest3d = {
name: 'hoverClosest3d',
_cat: 'hoverclosest',
title: function(gd) { return _(gd, 'Toggle show closest data on hover'); },
attr: 'hovermode',
val: null,
Expand Down Expand Up @@ -476,6 +491,7 @@ function handleHover3d(gd, ev) {

modeBarButtons.zoomInGeo = {
name: 'zoomInGeo',
_cat: 'zoomin',
title: function(gd) { return _(gd, 'Zoom in'); },
attr: 'zoom',
val: 'in',
Expand All @@ -485,6 +501,7 @@ modeBarButtons.zoomInGeo = {

modeBarButtons.zoomOutGeo = {
name: 'zoomOutGeo',
_cat: 'zoomout',
title: function(gd) { return _(gd, 'Zoom out'); },
attr: 'zoom',
val: 'out',
Expand All @@ -494,6 +511,7 @@ modeBarButtons.zoomOutGeo = {

modeBarButtons.resetGeo = {
name: 'resetGeo',
_cat: 'reset',
title: function(gd) { return _(gd, 'Reset'); },
attr: 'reset',
val: null,
Expand All @@ -503,6 +521,7 @@ modeBarButtons.resetGeo = {

modeBarButtons.hoverClosestGeo = {
name: 'hoverClosestGeo',
_cat: 'hoverclosest',
title: function(gd) { return _(gd, 'Toggle show closest data on hover'); },
attr: 'hovermode',
val: null,
Expand Down Expand Up @@ -538,6 +557,7 @@ function handleGeo(gd, ev) {

modeBarButtons.hoverClosestGl2d = {
name: 'hoverClosestGl2d',
_cat: 'hoverclosest',
title: function(gd) { return _(gd, 'Toggle show closest data on hover'); },
attr: 'hovermode',
val: null,
Expand All @@ -549,6 +569,7 @@ modeBarButtons.hoverClosestGl2d = {

modeBarButtons.hoverClosestPie = {
name: 'hoverClosestPie',
_cat: 'hoverclosest',
title: function(gd) { return _(gd, 'Toggle show closest data on hover'); },
attr: 'hovermode',
val: 'closest',
Expand Down Expand Up @@ -661,6 +682,7 @@ function setSpikelineVisibility(gd) {

modeBarButtons.resetViewMapbox = {
name: 'resetViewMapbox',
_cat: 'resetView',
title: function(gd) { return _(gd, 'Reset view'); },
attr: 'reset',
icon: Icons.home,
Expand All @@ -671,6 +693,7 @@ modeBarButtons.resetViewMapbox = {

modeBarButtons.zoomInMapbox = {
name: 'zoomInMapbox',
_cat: 'zoomin',
title: function(gd) { return _(gd, 'Zoom in'); },
attr: 'zoom',
val: 'in',
Expand All @@ -680,6 +703,7 @@ modeBarButtons.zoomInMapbox = {

modeBarButtons.zoomOutMapbox = {
name: 'zoomOutMapbox',
_cat: 'zoomout',
title: function(gd) { return _(gd, 'Zoom out'); },
attr: 'zoom',
val: 'out',
Expand Down
41 changes: 41 additions & 0 deletions src/components/modebar/constants.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
'use strict';

var modeBarButtons = require('./buttons');
var buttonList = Object.keys(modeBarButtons);

var DRAW_MODES = [
'drawline',
'drawopenpath',
'drawclosedpath',
'drawcircle',
'drawrect',
'eraseshape'
];

var backButtons = [
'v1hovermode',
'hoverclosest',
'hovercompare',
'togglehover',
'togglespikelines'
].concat(DRAW_MODES);

var foreButtons = [];
var addToForeButtons = function(b) {
if(backButtons.indexOf(b._cat || b.name) !== -1) return;
// for convenience add lowercase shotname e.g. zoomin as well fullname zoomInGeo
var name = b.name;
var _cat = (b._cat || b.name).toLowerCase();
if(foreButtons.indexOf(name) === -1) foreButtons.push(name);
if(foreButtons.indexOf(_cat) === -1) foreButtons.push(_cat);
};
buttonList.forEach(function(k) {
addToForeButtons(modeBarButtons[k]);
});
foreButtons.sort();

module.exports = {
DRAW_MODES: DRAW_MODES,
backButtons: backButtons,
foreButtons: foreButtons
};
24 changes: 24 additions & 0 deletions src/components/modebar/defaults.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
'use strict';

var Lib = require('../../lib');
var Color = require('../color');
var Template = require('../../plot_api/plot_template');
var attributes = require('./attributes');

module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {
var containerIn = layoutIn.modebar || {};
var containerOut = Template.newContainer(layoutOut, 'modebar');

function coerce(attr, dflt) {
return Lib.coerce(containerIn, containerOut, attributes, attr, dflt);
}

coerce('orientation');
coerce('bgcolor', Color.addOpacity(layoutOut.paper_bgcolor, 0.5));
var defaultColor = Color.contrast(Color.rgb(layoutOut.modebar.bgcolor));
coerce('color', Color.addOpacity(defaultColor, 0.3));
coerce('activecolor', Color.addOpacity(defaultColor, 0.7));
coerce('uirevision', layoutOut.uirevision);
coerce('add');
coerce('remove');
};
10 changes: 9 additions & 1 deletion src/components/modebar/index.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
'use strict';

exports.manage = require('./manage');
module.exports = {
moduleType: 'component',
name: 'modebar',

layoutAttributes: require('./attributes'),
supplyLayoutDefaults: require('./defaults'),

manage: require('./manage')
};
Loading