From 05ac5863c1b135df2c5f456f0fd30cd6ff50b2de Mon Sep 17 00:00:00 2001 From: Ricky Reusser Date: Wed, 28 Sep 2016 17:19:41 -0400 Subject: [PATCH 1/2] Improve padding logic for updatemenus --- src/components/updatemenus/attributes.js | 5 + src/components/updatemenus/defaults.js | 5 + src/components/updatemenus/draw.js | 29 +-- src/plots/pad_attributes.js | 36 ++++ .../baselines/updatemenus_positioning.png | Bin 37495 -> 38220 bytes test/image/mocks/updatemenus_positioning.json | 203 +++++++++++++----- 6 files changed, 216 insertions(+), 62 deletions(-) create mode 100644 src/plots/pad_attributes.js diff --git a/src/components/updatemenus/attributes.js b/src/components/updatemenus/attributes.js index eb3a55a766b..5efac53243b 100644 --- a/src/components/updatemenus/attributes.js +++ b/src/components/updatemenus/attributes.js @@ -11,6 +11,7 @@ var fontAttrs = require('../../plots/font_attributes'); var colorAttrs = require('../color/attributes'); var extendFlat = require('../../lib/extend').extendFlat; +var padAttrs = require('../../plots/pad_attributes'); var buttonsAttrs = { _isLinkedToArray: true, @@ -140,6 +141,10 @@ module.exports = { ].join(' ') }, + pad: extendFlat({}, padAttrs, { + description: 'Sets the padding around the buttons or dropdown menu.' + }), + font: extendFlat({}, fontAttrs, { description: 'Sets the font of the update menu button text.' }), diff --git a/src/components/updatemenus/defaults.js b/src/components/updatemenus/defaults.js index 39f662c9003..f97fdd34297 100644 --- a/src/components/updatemenus/defaults.js +++ b/src/components/updatemenus/defaults.js @@ -60,6 +60,11 @@ function menuDefaults(menuIn, menuOut, layoutOut) { coerce('xanchor'); coerce('yanchor'); + coerce('pad.t'); + coerce('pad.r'); + coerce('pad.b'); + coerce('pad.l'); + Lib.coerceFont(coerce, 'font', layoutOut.font); coerce('bgcolor', layoutOut.paper_bgcolor); diff --git a/src/components/updatemenus/draw.js b/src/components/updatemenus/draw.js index 8acf51820ca..afd4d809081 100644 --- a/src/components/updatemenus/draw.js +++ b/src/components/updatemenus/draw.js @@ -169,7 +169,7 @@ function drawHeader(gd, gHeader, gButton, menuOpts) { var active = menuOpts.active, headerOpts = menuOpts.buttons[active] || constants.blankHeaderOpts, - posOpts = { y: 0, yPad: 0, x: 0, xPad: 0, index: 0 }, + posOpts = { y: menuOpts.pad.t, yPad: 0, x: menuOpts.pad.l, xPad: 0, index: 0 }, positionOverrides = { width: menuOpts.headerWidth, height: menuOpts.headerHeight @@ -191,8 +191,8 @@ function drawHeader(gd, gHeader, gButton, menuOpts) { .text('▼'); arrow.attr({ - x: menuOpts.headerWidth - constants.arrowOffsetX, - y: menuOpts.headerHeight / 2 + constants.textOffsetY + x: menuOpts.headerWidth - constants.arrowOffsetX + menuOpts.pad.l, + y: menuOpts.headerHeight / 2 + constants.textOffsetY + menuOpts.pad.t }); header.on('click', function() { @@ -275,8 +275,8 @@ function drawButtons(gd, gHeader, gButton, menuOpts) { } var posOpts = { - x: x0, - y: y0, + x: x0 + menuOpts.pad.l, + y: y0 + menuOpts.pad.t, yPad: constants.gapButton, xPad: constants.gapButton, index: 0, @@ -468,27 +468,30 @@ function findDimenstions(gd, menuOpts) { fakeButtons.remove(); + var paddedWidth = menuOpts.totalWidth + menuOpts.pad.l + menuOpts.pad.r; + var paddedHeight = menuOpts.totalHeight + menuOpts.pad.t + menuOpts.pad.b; + var graphSize = gd._fullLayout._size; menuOpts.lx = graphSize.l + graphSize.w * menuOpts.x; menuOpts.ly = graphSize.t + graphSize.h * (1 - menuOpts.y); var xanchor = 'left'; if(anchorUtils.isRightAnchor(menuOpts)) { - menuOpts.lx -= menuOpts.totalWidth; + menuOpts.lx -= paddedWidth; xanchor = 'right'; } if(anchorUtils.isCenterAnchor(menuOpts)) { - menuOpts.lx -= menuOpts.totalWidth / 2; + menuOpts.lx -= paddedWidth / 2; xanchor = 'center'; } var yanchor = 'top'; if(anchorUtils.isBottomAnchor(menuOpts)) { - menuOpts.ly -= menuOpts.totalHeight; + menuOpts.ly -= paddedHeight; yanchor = 'bottom'; } if(anchorUtils.isMiddleAnchor(menuOpts)) { - menuOpts.ly -= menuOpts.totalHeight / 2; + menuOpts.ly -= paddedHeight / 2; yanchor = 'middle'; } @@ -500,10 +503,10 @@ function findDimenstions(gd, menuOpts) { Plots.autoMargin(gd, constants.autoMarginIdRoot + menuOpts._index, { x: menuOpts.x, y: menuOpts.y, - l: menuOpts.totalWidth * ({right: 1, center: 0.5}[xanchor] || 0), - r: menuOpts.totalWidth * ({left: 1, center: 0.5}[xanchor] || 0), - b: menuOpts.totalHeight * ({top: 1, middle: 0.5}[yanchor] || 0), - t: menuOpts.totalHeight * ({bottom: 1, middle: 0.5}[yanchor] || 0) + l: paddedWidth * ({right: 1, center: 0.5}[xanchor] || 0), + r: paddedWidth * ({left: 1, center: 0.5}[xanchor] || 0), + b: paddedHeight * ({top: 1, middle: 0.5}[yanchor] || 0), + t: paddedHeight * ({bottom: 1, middle: 0.5}[yanchor] || 0) }); } diff --git a/src/plots/pad_attributes.js b/src/plots/pad_attributes.js new file mode 100644 index 00000000000..bfadb4c54b0 --- /dev/null +++ b/src/plots/pad_attributes.js @@ -0,0 +1,36 @@ +/** +* Copyright 2012-2016, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +module.exports = { + t: { + valType: 'number', + dflt: 0, + role: 'style', + description: 'The amount of padding (in px) along the top of the component.' + }, + r: { + valType: 'number', + dflt: 0, + role: 'style', + description: 'The amount of padding (in px) on the right side of the component.' + }, + b: { + valType: 'number', + dflt: 0, + role: 'style', + description: 'The amount of padding (in px) along the bottom of the component.' + }, + l: { + valType: 'number', + dflt: 0, + role: 'style', + description: 'The amount of padding (in px) on the left side of the component.' + } +}; diff --git a/test/image/baselines/updatemenus_positioning.png b/test/image/baselines/updatemenus_positioning.png index 4931a807f68b3623331d27dda9a2f65fedba1256..27699ee4298344db1f20fa62fcea09968841fccb 100644 GIT binary patch literal 38220 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 Iao_iU0a#jg1^@s6 literal 37495 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 diff --git a/test/image/mocks/updatemenus_positioning.json b/test/image/mocks/updatemenus_positioning.json index ecff0b0c906..77048b4b6d3 100644 --- a/test/image/mocks/updatemenus_positioning.json +++ b/test/image/mocks/updatemenus_positioning.json @@ -24,11 +24,11 @@ "updatemenus": [ { "buttons": [ - {"label": "red", "method": "restyle", "args": ["marker.color", "red"]}, - {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]}, - {"label": "green", "method": "restyle", "args": ["marker.color", "green"]}, - {"label": "yellow", "method": "restyle", "args": ["marker.color", "yellow"]}, - {"label": "orange", "method": "restyle", "args": ["marker.color", "orange"]} + {"label": "A0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "A1", "method": "restyle", "args": ["marker.color", "blue"]}, + {"label": "A2", "method": "restyle", "args": ["marker.color", "green"]}, + {"label": "A3", "method": "restyle", "args": ["marker.color", "yellow"]}, + {"label": "A4", "method": "restyle", "args": ["marker.color", "orange"]} ], "x": 0.3, "y": 1.0, @@ -37,11 +37,11 @@ }, { "buttons": [ - {"label": "red", "method": "restyle", "args": ["marker.color", "red"]}, - {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]}, - {"label": "green", "method": "restyle", "args": ["marker.color", "green"]}, - {"label": "yellow", "method": "restyle", "args": ["marker.color", "yellow"]}, - {"label": "orange", "method": "restyle", "args": ["marker.color", "orange"]} + {"label": "B1", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "B2", "method": "restyle", "args": ["marker.color", "blue"]}, + {"label": "B3", "method": "restyle", "args": ["marker.color", "green"]}, + {"label": "B4", "method": "restyle", "args": ["marker.color", "yellow"]}, + {"label": "B5", "method": "restyle", "args": ["marker.color", "orange"]} ], "x": 0.3, "y": 0.66, @@ -51,11 +51,11 @@ }, { "buttons": [ - {"label": "red", "method": "restyle", "args": ["marker.color", "red"]}, - {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]}, - {"label": "green", "method": "restyle", "args": ["marker.color", "green"]}, - {"label": "yellow", "method": "restyle", "args": ["marker.color", "yellow"]}, - {"label": "orange", "method": "restyle", "args": ["marker.color", "orange"]} + {"label": "C0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "C1", "method": "restyle", "args": ["marker.color", "blue"]}, + {"label": "C2", "method": "restyle", "args": ["marker.color", "green"]}, + {"label": "C3", "method": "restyle", "args": ["marker.color", "yellow"]}, + {"label": "C4", "method": "restyle", "args": ["marker.color", "orange"]} ], "x": 0.3, "y": 0.33, @@ -65,25 +65,28 @@ }, { "buttons": [ - {"label": "red", "method": "restyle", "args": ["marker.color", "red"]}, - {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]}, - {"label": "green", "method": "restyle", "args": ["marker.color", "green"]}, - {"label": "yellow", "method": "restyle", "args": ["marker.color", "yellow"]}, - {"label": "orange", "method": "restyle", "args": ["marker.color", "orange"]} + {"label": "D0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "D1", "method": "restyle", "args": ["marker.color", "blue"]}, + {"label": "D2", "method": "restyle", "args": ["marker.color", "green"]}, + {"label": "D3", "method": "restyle", "args": ["marker.color", "yellow"]}, + {"label": "D4", "method": "restyle", "args": ["marker.color", "orange"]} ], "x": 0.3, "y": 0.0, "yanchor": "top", "xanchor": "left", - "direction": "up" + "direction": "up", + "pad": { + "t": 40 + } }, { "buttons": [ - {"label": "red", "method": "restyle", "args": ["marker.color", "red"]}, - {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]}, - {"label": "green", "method": "restyle", "args": ["marker.color", "green"]}, - {"label": "yellow", "method": "restyle", "args": ["marker.color", "yellow"]}, - {"label": "orange", "method": "restyle", "args": ["marker.color", "orange"]} + {"label": "E0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "E1", "method": "restyle", "args": ["marker.color", "blue"]}, + {"label": "E2longgg", "method": "restyle", "args": ["marker.color", "green"]}, + {"label": "E3", "method": "restyle", "args": ["marker.color", "yellow"]}, + {"label": "E4", "method": "restyle", "args": ["marker.color", "orange"]} ], "type": "buttons", "x": -0.12, @@ -94,11 +97,11 @@ }, { "buttons": [ - {"label": "red", "method": "restyle", "args": ["marker.color", "red"]}, - {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]}, - {"label": "green", "method": "restyle", "args": ["marker.color", "green"]}, - {"label": "yellow", "method": "restyle", "args": ["marker.color", "yellow"]}, - {"label": "orange", "method": "restyle", "args": ["marker.color", "orange"]} + {"label": "F0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "F1", "method": "restyle", "args": ["marker.color", "blue"]}, + {"label": "F2longgg", "method": "restyle", "args": ["marker.color", "green"]}, + {"label": "F3", "method": "restyle", "args": ["marker.color", "yellow"]}, + {"label": "F4", "method": "restyle", "args": ["marker.color", "orange"]} ], "type": "buttons", "x": -0.12, @@ -110,8 +113,8 @@ }, { "buttons": [ - {"label": "red", "method": "restyle", "args": ["marker.color", "red"]}, - {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]} + {"label": "G0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "G1", "method": "restyle", "args": ["marker.color", "blue"]} ], "type": "buttons", "x": 1, @@ -121,8 +124,8 @@ }, { "buttons": [ - {"label": "red", "method": "restyle", "args": ["marker.color", "red"]}, - {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]} + {"label": "H0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "H1", "method": "restyle", "args": ["marker.color", "blue"]} ], "type": "buttons", "x": 1, @@ -133,11 +136,11 @@ }, { "buttons": [ - {"label": "red", "method": "restyle", "args": ["marker.color", "red"]}, - {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]}, - {"label": "green", "method": "restyle", "args": ["marker.color", "green"]}, - {"label": "yellow", "method": "restyle", "args": ["marker.color", "yellow"]}, - {"label": "orange", "method": "restyle", "args": ["marker.color", "orange"]} + {"label": "I0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "I1", "method": "restyle", "args": ["marker.color", "blue"]}, + {"label": "I2", "method": "restyle", "args": ["marker.color", "green"]}, + {"label": "I3", "method": "restyle", "args": ["marker.color", "yellow"]}, + {"label": "I4", "method": "restyle", "args": ["marker.color", "orange"]} ], "x": 0.6, "y": 0.9, @@ -146,11 +149,11 @@ }, { "buttons": [ - {"label": "red", "method": "restyle", "args": ["marker.color", "red"]}, - {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]}, - {"label": "green", "method": "restyle", "args": ["marker.color", "green"]}, - {"label": "yellow", "method": "restyle", "args": ["marker.color", "yellow"]}, - {"label": "orange", "method": "restyle", "args": ["marker.color", "orange"]} + {"label": "J0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "J1", "method": "restyle", "args": ["marker.color", "blue"]}, + {"label": "J2", "method": "restyle", "args": ["marker.color", "green"]}, + {"label": "J3", "method": "restyle", "args": ["marker.color", "yellow"]}, + {"label": "J4", "method": "restyle", "args": ["marker.color", "orange"]} ], "x": 0.6, "y": 0.9, @@ -159,8 +162,42 @@ }, { "buttons": [ - {"label": "red", "method": "restyle", "args": ["marker.color", "red"]}, - {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]} + {"label": "N0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "N1", "method": "restyle", "args": ["marker.color", "blue"]}, + {"label": "N2", "method": "restyle", "args": ["marker.color", "green"]}, + {"label": "N3", "method": "restyle", "args": ["marker.color", "yellow"]}, + {"label": "N4", "method": "restyle", "args": ["marker.color", "orange"]} + ], + "x": 0.6, + "y": 0.9, + "yanchor": "bottom", + "xanchor": "right", + "pad": { + "b": 10, + "r": 20 + } + }, + { + "buttons": [ + {"label": "O0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "O1", "method": "restyle", "args": ["marker.color", "blue"]}, + {"label": "O2", "method": "restyle", "args": ["marker.color", "green"]}, + {"label": "O3", "method": "restyle", "args": ["marker.color", "yellow"]}, + {"label": "O4", "method": "restyle", "args": ["marker.color", "orange"]} + ], + "x": 0.6, + "y": 0.9, + "yanchor": "top", + "xanchor": "left", + "pad": { + "t": 10, + "l": 20 + } + }, + { + "buttons": [ + {"label": "K0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "K1", "method": "restyle", "args": ["marker.color", "blue"]} ], "x": 0.6, "y": 0.4, @@ -170,14 +207,82 @@ }, { "buttons": [ - {"label": "red", "method": "restyle", "args": ["marker.color", "red"]}, - {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]} + {"label": "P0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "P1", "method": "restyle", "args": ["marker.color", "blue"]} + ], + "type": "buttons", + "x": 0.6, + "y": 0.4, + "yanchor": "top", + "xanchor": "left", + "pad": { + "r": 50, + "b": 80 + } + }, + { + "buttons": [ + {"label": "Q0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "Q1", "method": "restyle", "args": ["marker.color", "blue"]} + ], + "type": "buttons", + "x": 0.6, + "y": 0.4, + "yanchor": "bottom", + "xanchor": "right", + "pad": { + "l": 50, + "t": 80 + } + }, + { + "buttons": [ + {"label": "L0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "L1", "method": "restyle", "args": ["marker.color", "blue"]} ], "type": "buttons", "x": 0.6, "y": 0.4, "yanchor": "bottom", "xanchor": "left" + }, + { + "buttons": [ + {"label": "M0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "M1", "method": "restyle", "args": ["marker.color", "blue"]}, + {"label": "M2", "method": "restyle", "args": ["marker.color", "green"]}, + {"label": "M3", "method": "restyle", "args": ["marker.color", "yellow"]}, + {"label": "M4", "method": "restyle", "args": ["marker.color", "orange"]} + ], + "x": 1.0, + "y": 0.5, + "yanchor": "middle", + "xanchor": "center", + "pad": { + "t": 80, + "r": 100, + "b": 80, + "l": 80 + } + }, + { + "buttons": [ + {"label": "R0", "method": "restyle", "args": ["marker.color", "red"]}, + {"label": "R1", "method": "restyle", "args": ["marker.color", "blue"]}, + {"label": "R2", "method": "restyle", "args": ["marker.color", "green"]}, + {"label": "R3", "method": "restyle", "args": ["marker.color", "yellow"]}, + {"label": "R4", "method": "restyle", "args": ["marker.color", "orange"]} + ], + "x": 0.9, + "y": 0.5, + "yanchor": "middle", + "xanchor": "center", + "pad": { + "t": 2, + "r": 50, + "b": 2, + "l": 40 + } } ], "xaxis": { From 46043418e883ed838dda44ebc04c69f64a282bec Mon Sep 17 00:00:00 2001 From: Ricky Reusser Date: Thu, 29 Sep 2016 08:52:44 -0400 Subject: [PATCH 2/2] Add jasmine tests for updatemenus padding --- test/jasmine/tests/updatemenus_test.js | 55 ++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/test/jasmine/tests/updatemenus_test.js b/test/jasmine/tests/updatemenus_test.js index e155bf27eff..f3e1e95a06e 100644 --- a/test/jasmine/tests/updatemenus_test.js +++ b/test/jasmine/tests/updatemenus_test.js @@ -7,6 +7,7 @@ var Lib = require('@src/lib'); var createGraphDiv = require('../assets/create_graph_div'); var destroyGraphDiv = require('../assets/destroy_graph_div'); var TRANSITION_DELAY = 100; +var fail = require('../assets/fail_test'); describe('update menus defaults', function() { 'use strict'; @@ -446,6 +447,60 @@ describe('update menus interactions', function() { }); }); + it('applies padding on all sides', function(done) { + var xy1, xy2; + var firstMenu = d3.select('.' + constants.headerGroupClassName); + var xpad = 80; + var ypad = 60; + + // Position it center-anchored and in the middle of the plot: + Plotly.relayout(gd, { + 'updatemenus[0].x': 0.2, + 'updatemenus[0].y': 0.5, + 'updatemenus[0].xanchor': 'center', + 'updatemenus[0].yanchor': 'middle', + }).then(function() { + // Convert to xy: + xy1 = firstMenu.attr('transform').match(/translate\(([^,]*),\s*([^\)]*)\)/).slice(1).map(parseFloat); + + // Set three of four paddings. This should move it. + return Plotly.relayout(gd, { + 'updatemenus[0].pad.t': ypad, + 'updatemenus[0].pad.r': xpad, + 'updatemenus[0].pad.b': ypad, + 'updatemenus[0].pad.l': xpad, + }); + }).then(function() { + xy2 = firstMenu.attr('transform').match(/translate\(([^,]*),\s*([^\)]*)\)/).slice(1).map(parseFloat); + + expect(xy1[0] - xy2[0]).toEqual(xpad); + expect(xy1[1] - xy2[1]).toEqual(ypad); + }).catch(fail).then(done); + }); + + it('appliesy padding on relayout', function(done) { + var x1, x2; + var firstMenu = d3.select('.' + constants.headerGroupClassName); + var padShift = 40; + + // Position the menu in the center of the plot horizontal so that + // we can test padding updates without worrying about margin pushing. + Plotly.relayout(gd, { + 'updatemenus[0].x': 0.5, + 'updatemenus[0].pad.r': 0, + }).then(function() { + // Extract the x-component of the translation: + x1 = parseInt(firstMenu.attr('transform').match(/translate\(([^,]*).*/)[1]); + + return Plotly.relayout(gd, 'updatemenus[0].pad.r', 40); + }).then(function() { + // Extract the x-component of the translation: + x2 = parseInt(firstMenu.attr('transform').match(/translate\(([^,]*).*/)[1]); + + expect(x1 - x2).toBeCloseTo(padShift, 1); + }).catch(fail).then(done); + }); + function assertNodeCount(query, cnt) { expect(d3.selectAll(query).size()).toEqual(cnt); }