From 39ab95d2c0dca4c5251bfcc344a42d587963767c Mon Sep 17 00:00:00 2001
From: Ricky Reusser <rsreusser@gmail.com>
Date: Thu, 22 Sep 2016 18:26:26 -0400
Subject: [PATCH 01/11] Add button type to updatemenus

---
 src/components/updatemenus/attributes.js |  31 ++++
 src/components/updatemenus/constants.js  |   6 +-
 src/components/updatemenus/defaults.js   |   3 +
 src/components/updatemenus/draw.js       | 183 ++++++++++++++++++-----
 4 files changed, 181 insertions(+), 42 deletions(-)

diff --git a/src/components/updatemenus/attributes.js b/src/components/updatemenus/attributes.js
index 715f35ddd30..eff6237c4d4 100644
--- a/src/components/updatemenus/attributes.js
+++ b/src/components/updatemenus/attributes.js
@@ -57,6 +57,37 @@ module.exports = {
         ].join(' ')
     },
 
+    openreverse: {
+        valType: 'boolean',
+        role: 'info',
+        dflt: false,
+        description: [
+            'For dropdown menus, opens the menu in the reverse direction'
+        ]
+    },
+
+    type: {
+        valType: 'enumerated',
+        values: ['dropdown', 'buttons'],
+        dflt: 'dropdown',
+        role: 'info',
+        description: [
+            'Determines whether the buttons are accessible via a dropdown menu',
+            'or whether the buttons are stacked horizontally or vertically'
+        ].join(' ')
+    },
+
+    orientation: {
+        valType: 'enumerated',
+        values: ['h', 'v'],
+        dflt: 'v',
+        role: 'info',
+        description: [
+            'Determines whether the menu and buttons are laid out vertically',
+            'or horizontally'
+        ]
+    },
+
     active: {
         valType: 'integer',
         role: 'info',
diff --git a/src/components/updatemenus/constants.js b/src/components/updatemenus/constants.js
index d9bfa1a9a11..488b7fb77ec 100644
--- a/src/components/updatemenus/constants.js
+++ b/src/components/updatemenus/constants.js
@@ -21,7 +21,8 @@ module.exports = {
     headerGroupClassName: 'updatemenu-header-group',
     headerClassName: 'updatemenu-header',
     headerArrowClassName: 'updatemenu-header-arrow',
-    buttonGroupClassName: 'updatemenu-button-group',
+    dropdownButtonGroupClassName: 'updatemenu-button-group',
+    dropdownButtonClassName: 'updatemenu-dropdown-button',
     buttonClassName: 'updatemenu-button',
     itemRectClassName: 'updatemenu-item-rect',
     itemTextClassName: 'updatemenu-item-text',
@@ -41,7 +42,8 @@ module.exports = {
     minHeight: 30,
 
     // padding around item text
-    textPadX: 40,
+    textPadX: 24,
+    arrowPadX: 16,
 
     // font size to height scale
     fontSizeToHeight: 1.3,
diff --git a/src/components/updatemenus/defaults.js b/src/components/updatemenus/defaults.js
index 5574d5f5040..33bcdea656c 100644
--- a/src/components/updatemenus/defaults.js
+++ b/src/components/updatemenus/defaults.js
@@ -49,6 +49,9 @@ function menuDefaults(menuIn, menuOut, layoutOut) {
     if(!visible) return;
 
     coerce('active');
+    coerce('orientation');
+    coerce('type');
+    coerce('openreverse');
 
     coerce('x');
     coerce('y');
diff --git a/src/components/updatemenus/draw.js b/src/components/updatemenus/draw.js
index cbab8c534b6..3044ff9c36c 100644
--- a/src/components/updatemenus/draw.js
+++ b/src/components/updatemenus/draw.js
@@ -43,12 +43,12 @@ module.exports = function draw(gd) {
      *         <g item header />
      *         <text item header-arrow />
      *     <g header-group />
-     *         <g item header />
+     *
      *         <text item header-arrow />
      *     ...
      *
      *     <g button-group />
-     *         <g item button />
+     *
      *         <g item button />
      *         ...
      */
@@ -77,12 +77,12 @@ module.exports = function draw(gd) {
     headerGroups.enter().append('g')
         .classed(constants.headerGroupClassName, true);
 
-    // draw button container
-    var gButton = menus.selectAll('g.' + constants.buttonGroupClassName)
+    // draw dropdown button container
+    var gButton = menus.selectAll('g.' + constants.dropdownButtonGroupClassName)
         .data([0]);
 
     gButton.enter().append('g')
-        .classed(constants.buttonGroupClassName, true)
+        .classed(constants.dropdownButtonGroupClassName, true)
         .style('pointer-events', 'all');
 
     // whenever we add new menu, attach 'state' variable to node
@@ -114,12 +114,18 @@ module.exports = function draw(gd) {
     // draw headers!
     headerGroups.each(function(menuOpts) {
         var gHeader = d3.select(this);
-        drawHeader(gd, gHeader, gButton, menuOpts);
 
-        // update buttons if they are dropped
-        if(areMenuButtonsDropped(gButton, menuOpts)) {
-            drawButtons(gd, gHeader, gButton, menuOpts);
+        if(menuOpts.type === 'dropdown') {
+            drawHeader(gd, gHeader, gButton, menuOpts);
+
+            // update buttons if they are dropped
+            if(areMenuButtonsDropped(gButton, menuOpts)) {
+                drawButtons(gd, gHeader, gButton, menuOpts);
+            }
+        } else {
+            drawButtons(gd, gHeader, null, menuOpts);
         }
+
     });
 };
 
@@ -163,11 +169,15 @@ function drawHeader(gd, gHeader, gButton, menuOpts) {
 
     var active = menuOpts.active,
         headerOpts = menuOpts.buttons[active] || constants.blankHeaderOpts,
-        posOpts = { y: 0, yPad: 0 };
+        posOpts = { y: 0, yPad: 0, x: 0, xPad: 0, index: 0 },
+        positionOverrides = {
+            width: menuOpts.headerWidth,
+            height: menuOpts.headerHeight
+        };
 
     header
         .call(drawItem, menuOpts, headerOpts)
-        .call(setItemPosition, menuOpts, posOpts);
+        .call(setItemPosition, menuOpts, posOpts, positionOverrides);
 
     // draw drop arrow at the right edge
     var arrow = gHeader.selectAll('text.' + constants.headerArrowClassName)
@@ -181,8 +191,8 @@ function drawHeader(gd, gHeader, gButton, menuOpts) {
         .text('▼');
 
     arrow.attr({
-        x: menuOpts.width - constants.arrowOffsetX,
-        y: menuOpts.height1 / 2 + constants.textOffsetY
+        x: menuOpts.headerWidth - constants.arrowOffsetX,
+        y: menuOpts.headerHeight / 2 + constants.textOffsetY
     });
 
     header.on('click', function() {
@@ -211,27 +221,63 @@ function drawHeader(gd, gHeader, gButton, menuOpts) {
 }
 
 function drawButtons(gd, gHeader, gButton, menuOpts) {
-    var buttonData = gButton.attr(constants.menuIndexAttrName) !== '-1' ?
+    if(!gButton) {
+        gButton = gHeader;
+        gButton.attr('pointer-events', 'all');
+    }
+
+    var buttonData = (gButton.attr(constants.menuIndexAttrName) !== '-1' || menuOpts.type === 'buttons') ?
         menuOpts.buttons :
         [];
 
-    var buttons = gButton.selectAll('g.' + constants.buttonClassName)
+    var klass = menuOpts.type === 'dropdown' ? constants.dropdownButtonClassName : constants.buttonClassName;
+
+    var buttons = gButton.selectAll('g.' + klass)
         .data(buttonData);
 
-    buttons.enter().append('g')
-        .classed(constants.buttonClassName, true)
-        .attr('opacity', '0')
-        .transition()
-        .attr('opacity', '1');
+    var enter = buttons.enter().append('g')
+        .classed(klass, true);
+
+    var exit = buttons.exit();
+
+    if(menuOpts.type === 'dropdown') {
+        enter.attr('opacity', '0')
+            .transition()
+            .attr('opacity', '1');
+
+        exit.transition()
+            .attr('opacity', '0')
+            .remove();
+    } else {
+        exit.remove();
+    }
+
 
-    buttons.exit()
-        .transition()
-        .attr('opacity', '0')
-        .remove();
+    var x0 = 0;
+    var y0 = 0;
+
+    if(menuOpts.type === 'dropdown') {
+        if(menuOpts.orientation === 'v') {
+            y0 = menuOpts.headerHeight + constants.gapButtonHeader;
+        } else {
+            x0 = menuOpts.headerWidth + constants.gapButtonHeader;
+        }
+    }
+
+    if(menuOpts.type === 'dropdown' && menuOpts.openreverse) {
+        if(menuOpts.orientation === 'v') {
+            y0 = -2 * constants.gapButtonHeader - constants.gapButton - menuOpts.totalHeight;
+        } else {
+            x0 = -2 * constants.gapButtonHeader - constants.gapButton - menuOpts.totalWidth;
+        }
+    }
 
     var posOpts = {
-        y: menuOpts.height1 + constants.gapButtonHeader,
-        yPad: constants.gapButton
+        x: x0,
+        y: y0,
+        yPad: constants.gapButton,
+        xPad: constants.gapButton,
+        index: 0,
     };
 
     buttons.each(function(buttonOpts, buttonIndex) {
@@ -247,7 +293,11 @@ function drawButtons(gd, gHeader, gButton, menuOpts) {
 
             // fold up buttons and redraw header
             gButton.attr(constants.menuIndexAttrName, '-1');
-            drawHeader(gd, gHeader, gButton, menuOpts);
+
+            if(menuOpts.type === 'dropdown') {
+                drawHeader(gd, gHeader, gButton, menuOpts);
+            }
+
             drawButtons(gd, gHeader, gButton, menuOpts);
 
             // call button method
@@ -332,20 +382,27 @@ function styleOnMouseOut(item, menuOpts) {
 
 // find item dimensions (this mutates menuOpts)
 function findDimenstions(gd, menuOpts) {
+    var i;
+
     menuOpts.width = 0;
+    menuOpts.width1 = 0;
     menuOpts.height = 0;
     menuOpts.height1 = 0;
+    menuOpts.heights = [];
+    menuOpts.widths = [];
+    menuOpts.totalWidth = 0;
+    menuOpts.totalHeight = 0;
     menuOpts.lx = 0;
     menuOpts.ly = 0;
 
-    var fakeButtons = gd._tester.selectAll('g.' + constants.buttonClassName)
+    var fakeButtons = gd._tester.selectAll('g.' + constants.dropdownButtonClassName)
         .data(menuOpts.buttons);
 
     fakeButtons.enter().append('g')
-        .classed(constants.buttonClassName, true);
+        .classed(constants.dropdownButtonClassName, true);
 
     // loop over fake buttons to find width / height
-    fakeButtons.each(function(buttonOpts) {
+    fakeButtons.each(function(buttonOpts, i) {
         var button = d3.select(this);
 
         button.call(drawItem, menuOpts, buttonOpts);
@@ -362,11 +419,49 @@ function findDimenstions(gd, menuOpts) {
             tLines = tspans[0].length || 1,
             hEff = Math.max(tHeight * tLines, constants.minHeight) + constants.textOffsetY;
 
-        menuOpts.width = Math.max(menuOpts.width, wEff);
+        // Store per-item sizes since a row of horizontal buttons, for example,
+        // don't all need to be the same width:
+        menuOpts.widths[i] = wEff;
+        menuOpts.heights[i] = hEff;
+
+        if(menuOpts.orientation === 'v' | menuOpts.type === 'dropdown') {
+            menuOpts.width = Math.max(menuOpts.width, wEff);
+        } else {
+            menuOpts.width += wEff;
+        }
+        // Height and width of individual element:
         menuOpts.height1 = Math.max(menuOpts.height1, hEff);
-        menuOpts.height += menuOpts.height1;
+        menuOpts.width1 = Math.max(menuOpts.width1, wEff);
+
+        if(menuOpts.orientation === 'v') {
+            menuOpts.totalWidth = Math.max(menuOpts.totalWidth, wEff);
+            menuOpts.totalHeight += hEff;
+        } else {
+            menuOpts.totalWidth += wEff;
+            menuOpts.totalHeight += Math.max(menuOpts.totalWidth, hEff);
+        }
     });
 
+    menuOpts.headerWidth = menuOpts.width1 + constants.arrowPadX;
+    menuOpts.headerHeight = menuOpts.height1;
+
+    if(menuOpts.orientation === 'v') {
+        menuOpts.width = menuOpts.width1;
+
+        if(menuOpts.type === 'dropdown') {
+            menuOpts.width1 += constants.arrowPadX;
+        }
+
+        for(i = 0; i < menuOpts.heights; i++) {
+            menuOpts.height += menuOpts.heights[i];
+        }
+    } else {
+        menuOpts.height = menuOpts.height1;
+        for(i = 0; i < menuOpts.heights; i++) {
+            menuOpts.width += menuOpts.width[i];
+        }
+    }
+
     fakeButtons.remove();
 
     var graphSize = gd._fullLayout._size;
@@ -409,19 +504,21 @@ function findDimenstions(gd, menuOpts) {
 }
 
 // set item positions (mutates posOpts)
-function setItemPosition(item, menuOpts, posOpts) {
+function setItemPosition(item, menuOpts, posOpts, overrideOpts) {
+    overrideOpts = overrideOpts || {};
     var rect = item.select('.' + constants.itemRectClassName),
         text = item.select('.' + constants.itemTextClassName),
         tspans = text.selectAll('tspan'),
-        borderWidth = menuOpts.borderwidth;
+        borderWidth = menuOpts.borderwidth,
+        index = posOpts.index;
 
-    Lib.setTranslate(item, borderWidth, borderWidth + posOpts.y);
+    Lib.setTranslate(item, borderWidth + posOpts.x, borderWidth + posOpts.y);
 
     rect.attr({
         x: 0,
         y: 0,
-        width: menuOpts.width,
-        height: menuOpts.height1
+        width: overrideOpts.width || (menuOpts.orientation === 'v' ? menuOpts.width1 : menuOpts.widths[index]),
+        height: overrideOpts.height || (menuOpts.orientation === 'v' ? menuOpts.heights[index] : menuOpts.height1)
     });
 
     var tHeight = menuOpts.font.size * constants.fontSizeToHeight,
@@ -430,17 +527,23 @@ function setItemPosition(item, menuOpts, posOpts) {
 
     var textAttrs = {
         x: constants.textOffsetX,
-        y: menuOpts.height1 / 2 - spanOffset + constants.textOffsetY
+        y: menuOpts.heights[index] / 2 - spanOffset + constants.textOffsetY
     };
 
     text.attr(textAttrs);
     tspans.attr(textAttrs);
 
-    posOpts.y += menuOpts.height1 + posOpts.yPad;
+    if(menuOpts.orientation === 'v') {
+        posOpts.y += menuOpts.heights[index] + posOpts.yPad;
+    } else {
+        posOpts.x += menuOpts.widths[index] + posOpts.xPad;
+    }
+
+    posOpts.index++;
 }
 
 function removeAllButtons(gButton) {
-    gButton.selectAll('g.' + constants.buttonClassName).remove();
+    gButton.selectAll('g.' + constants.dropdownButtonClassName).remove();
 }
 
 function clearPushMargins(gd) {

From ddc15fc261397a36bbc4d0e5e397f9bbb9193ca3 Mon Sep 17 00:00:00 2001
From: Ricky Reusser <rsreusser@gmail.com>
Date: Fri, 23 Sep 2016 00:22:26 -0400
Subject: [PATCH 02/11] Fix a couple updatemenus anchor cases

---
 src/components/updatemenus/draw.js | 59 +++++++++++++-----------------
 1 file changed, 26 insertions(+), 33 deletions(-)

diff --git a/src/components/updatemenus/draw.js b/src/components/updatemenus/draw.js
index 3044ff9c36c..43af5688436 100644
--- a/src/components/updatemenus/draw.js
+++ b/src/components/updatemenus/draw.js
@@ -266,9 +266,9 @@ function drawButtons(gd, gHeader, gButton, menuOpts) {
 
     if(menuOpts.type === 'dropdown' && menuOpts.openreverse) {
         if(menuOpts.orientation === 'v') {
-            y0 = -2 * constants.gapButtonHeader - constants.gapButton - menuOpts.totalHeight;
+            y0 = -2 * constants.gapButtonHeader - constants.gapButton - menuOpts.openHeight;
         } else {
-            x0 = -2 * constants.gapButtonHeader - constants.gapButton - menuOpts.totalWidth;
+            x0 = -2 * constants.gapButtonHeader - constants.gapButton - menuOpts.openWidth;
         }
     }
 
@@ -384,14 +384,14 @@ function styleOnMouseOut(item, menuOpts) {
 function findDimenstions(gd, menuOpts) {
     var i;
 
-    menuOpts.width = 0;
     menuOpts.width1 = 0;
-    menuOpts.height = 0;
     menuOpts.height1 = 0;
     menuOpts.heights = [];
     menuOpts.widths = [];
     menuOpts.totalWidth = 0;
     menuOpts.totalHeight = 0;
+    menuOpts.openWidth = 0;
+    menuOpts.openHeight = 0;
     menuOpts.lx = 0;
     menuOpts.ly = 0;
 
@@ -424,41 +424,32 @@ function findDimenstions(gd, menuOpts) {
         menuOpts.widths[i] = wEff;
         menuOpts.heights[i] = hEff;
 
-        if(menuOpts.orientation === 'v' | menuOpts.type === 'dropdown') {
-            menuOpts.width = Math.max(menuOpts.width, wEff);
-        } else {
-            menuOpts.width += wEff;
-        }
         // Height and width of individual element:
         menuOpts.height1 = Math.max(menuOpts.height1, hEff);
         menuOpts.width1 = Math.max(menuOpts.width1, wEff);
 
         if(menuOpts.orientation === 'v') {
             menuOpts.totalWidth = Math.max(menuOpts.totalWidth, wEff);
+            menuOpts.openWidth = menuOpts.totalWidth;
             menuOpts.totalHeight += hEff;
+            menuOpts.openHeight += hEff;
         } else {
             menuOpts.totalWidth += wEff;
-            menuOpts.totalHeight += Math.max(menuOpts.totalWidth, hEff);
+            menuOpts.openWidth += wEff;
+            menuOpts.totalHeight = Math.max(menuOpts.totalHeight, hEff);
+            menuOpts.openHeight = menuOpts.totalHeight;
         }
     });
 
     menuOpts.headerWidth = menuOpts.width1 + constants.arrowPadX;
     menuOpts.headerHeight = menuOpts.height1;
 
-    if(menuOpts.orientation === 'v') {
-        menuOpts.width = menuOpts.width1;
-
-        if(menuOpts.type === 'dropdown') {
+    if(menuOpts.type === 'dropdown') {
+        if(menuOpts.orientation === 'v') {
             menuOpts.width1 += constants.arrowPadX;
-        }
-
-        for(i = 0; i < menuOpts.heights; i++) {
-            menuOpts.height += menuOpts.heights[i];
-        }
-    } else {
-        menuOpts.height = menuOpts.height1;
-        for(i = 0; i < menuOpts.heights; i++) {
-            menuOpts.width += menuOpts.width[i];
+            menuOpts.totalHeight = menuOpts.height1;
+        } else {
+            menuOpts.totalWidth = menuOpts.width1;
         }
     }
 
@@ -470,37 +461,39 @@ function findDimenstions(gd, menuOpts) {
 
     var xanchor = 'left';
     if(anchorUtils.isRightAnchor(menuOpts)) {
-        menuOpts.lx -= menuOpts.width;
+        menuOpts.lx -= menuOpts.totalWidth;
         xanchor = 'right';
     }
     if(anchorUtils.isCenterAnchor(menuOpts)) {
-        menuOpts.lx -= menuOpts.width / 2;
+        menuOpts.lx -= menuOpts.totalWidth / 2;
         xanchor = 'center';
     }
 
     var yanchor = 'top';
     if(anchorUtils.isBottomAnchor(menuOpts)) {
-        menuOpts.ly -= menuOpts.height;
+        menuOpts.ly -= menuOpts.totalHeight;
         yanchor = 'bottom';
     }
     if(anchorUtils.isMiddleAnchor(menuOpts)) {
-        menuOpts.ly -= menuOpts.height / 2;
+        menuOpts.ly -= menuOpts.totalHeight / 2;
         yanchor = 'middle';
     }
 
-    menuOpts.width = Math.ceil(menuOpts.width);
-    menuOpts.height = Math.ceil(menuOpts.height);
+    menuOpts.totalWidth = Math.ceil(menuOpts.totalWidth);
+    menuOpts.totalHeight = Math.ceil(menuOpts.totalHeight);
     menuOpts.lx = Math.round(menuOpts.lx);
     menuOpts.ly = Math.round(menuOpts.ly);
 
     Plots.autoMargin(gd, constants.autoMarginIdRoot + menuOpts._index, {
         x: menuOpts.x,
         y: menuOpts.y,
-        l: menuOpts.width * ({right: 1, center: 0.5}[xanchor] || 0),
-        r: menuOpts.width * ({left: 1, center: 0.5}[xanchor] || 0),
-        b: menuOpts.height * ({top: 1, middle: 0.5}[yanchor] || 0),
-        t: menuOpts.height * ({bottom: 1, middle: 0.5}[yanchor] || 0)
+        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)
     });
+
+    console.log('menuOpts:', menuOpts);
 }
 
 // set item positions (mutates posOpts)

From 9ee47b1715feb5a9235da221cb18eca9a48def39 Mon Sep 17 00:00:00 2001
From: Ricky Reusser <rsreusser@gmail.com>
Date: Fri, 23 Sep 2016 00:43:35 -0400
Subject: [PATCH 03/11] Fix minor gapbutton issues

---
 src/components/updatemenus/draw.js | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/components/updatemenus/draw.js b/src/components/updatemenus/draw.js
index 43af5688436..0498950e070 100644
--- a/src/components/updatemenus/draw.js
+++ b/src/components/updatemenus/draw.js
@@ -431,16 +431,23 @@ function findDimenstions(gd, menuOpts) {
         if(menuOpts.orientation === 'v') {
             menuOpts.totalWidth = Math.max(menuOpts.totalWidth, wEff);
             menuOpts.openWidth = menuOpts.totalWidth;
-            menuOpts.totalHeight += hEff;
-            menuOpts.openHeight += hEff;
+            menuOpts.totalHeight += hEff + constants.gapButton;
+            menuOpts.openHeight += hEff + constants.gapButton;
         } else {
-            menuOpts.totalWidth += wEff;
-            menuOpts.openWidth += wEff;
+            menuOpts.totalWidth += wEff + constants.gapButton;
+            menuOpts.openWidth += wEff + constants.gapButton;
             menuOpts.totalHeight = Math.max(menuOpts.totalHeight, hEff);
             menuOpts.openHeight = menuOpts.totalHeight;
         }
     });
 
+    if(menuOpts.orientation === 'v') {
+        menuOpts.totalHeight -= constants.gapButton;
+    } else {
+        menuOpts.totalWidth -= constants.gapButton;
+    }
+
+
     menuOpts.headerWidth = menuOpts.width1 + constants.arrowPadX;
     menuOpts.headerHeight = menuOpts.height1;
 

From 28fff11691a95367268ffb2f5c5b5a8f4bf13029 Mon Sep 17 00:00:00 2001
From: Ricky Reusser <rsreusser@gmail.com>
Date: Fri, 23 Sep 2016 00:48:22 -0400
Subject: [PATCH 04/11] Fix lint errors and another pixel fix for updatemenus

---
 src/components/updatemenus/draw.js | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/src/components/updatemenus/draw.js b/src/components/updatemenus/draw.js
index 0498950e070..52c472498c1 100644
--- a/src/components/updatemenus/draw.js
+++ b/src/components/updatemenus/draw.js
@@ -266,9 +266,9 @@ function drawButtons(gd, gHeader, gButton, menuOpts) {
 
     if(menuOpts.type === 'dropdown' && menuOpts.openreverse) {
         if(menuOpts.orientation === 'v') {
-            y0 = -2 * constants.gapButtonHeader - constants.gapButton - menuOpts.openHeight;
+            y0 = -constants.gapButtonHeader + constants.gapButton - menuOpts.openHeight;
         } else {
-            x0 = -2 * constants.gapButtonHeader - constants.gapButton - menuOpts.openWidth;
+            x0 = -constants.gapButtonHeader + constants.gapButton - menuOpts.openWidth;
         }
     }
 
@@ -382,8 +382,6 @@ function styleOnMouseOut(item, menuOpts) {
 
 // find item dimensions (this mutates menuOpts)
 function findDimenstions(gd, menuOpts) {
-    var i;
-
     menuOpts.width1 = 0;
     menuOpts.height1 = 0;
     menuOpts.heights = [];
@@ -499,8 +497,6 @@ function findDimenstions(gd, menuOpts) {
         b: menuOpts.totalHeight * ({top: 1, middle: 0.5}[yanchor] || 0),
         t: menuOpts.totalHeight * ({bottom: 1, middle: 0.5}[yanchor] || 0)
     });
-
-    console.log('menuOpts:', menuOpts);
 }
 
 // set item positions (mutates posOpts)

From fb6adc323fcea40556566f274e4ad610411ea1fd Mon Sep 17 00:00:00 2001
From: Ricky Reusser <rsreusser@gmail.com>
Date: Fri, 23 Sep 2016 01:02:58 -0400
Subject: [PATCH 05/11] Add showactive attribute to buttons

---
 src/components/updatemenus/attributes.js | 7 +++++++
 src/components/updatemenus/defaults.js   | 1 +
 src/components/updatemenus/draw.js       | 5 ++++-
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/components/updatemenus/attributes.js b/src/components/updatemenus/attributes.js
index eff6237c4d4..5460335ddba 100644
--- a/src/components/updatemenus/attributes.js
+++ b/src/components/updatemenus/attributes.js
@@ -99,6 +99,13 @@ module.exports = {
         ].join(' ')
     },
 
+    showactive: {
+        valType: 'boolean',
+        role: 'info',
+        dflt: true,
+        description: 'Highlights active dropdown item or active button if true.'
+    },
+
     buttons: buttonsAttrs,
 
     x: {
diff --git a/src/components/updatemenus/defaults.js b/src/components/updatemenus/defaults.js
index 33bcdea656c..a0a87890887 100644
--- a/src/components/updatemenus/defaults.js
+++ b/src/components/updatemenus/defaults.js
@@ -52,6 +52,7 @@ function menuDefaults(menuIn, menuOut, layoutOut) {
     coerce('orientation');
     coerce('type');
     coerce('openreverse');
+    coerce('showactive');
 
     coerce('x');
     coerce('y');
diff --git a/src/components/updatemenus/draw.js b/src/components/updatemenus/draw.js
index 52c472498c1..5a160b2d8cf 100644
--- a/src/components/updatemenus/draw.js
+++ b/src/components/updatemenus/draw.js
@@ -363,7 +363,7 @@ function styleButtons(buttons, menuOpts) {
     buttons.each(function(buttonOpts, i) {
         var button = d3.select(this);
 
-        if(i === active) {
+        if(i === active && menuOpts.showactive) {
             button.select('rect.' + constants.itemRectClassName)
                 .call(Color.fill, constants.activeColor);
         }
@@ -417,6 +417,9 @@ function findDimenstions(gd, menuOpts) {
             tLines = tspans[0].length || 1,
             hEff = Math.max(tHeight * tLines, constants.minHeight) + constants.textOffsetY;
 
+        hEff = Math.ceil(hEff);
+        wEff = Math.ceil(wEff);
+
         // Store per-item sizes since a row of horizontal buttons, for example,
         // don't all need to be the same width:
         menuOpts.widths[i] = wEff;

From 65d71d3dd75a3f2995be060c8465e046f57c7010 Mon Sep 17 00:00:00 2001
From: Ricky Reusser <rsreusser@gmail.com>
Date: Fri, 23 Sep 2016 10:04:04 -0400
Subject: [PATCH 06/11] Account for arrow padding in updatemenus

---
 src/components/updatemenus/draw.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/components/updatemenus/draw.js b/src/components/updatemenus/draw.js
index 5a160b2d8cf..0d287d0f2b2 100644
--- a/src/components/updatemenus/draw.js
+++ b/src/components/updatemenus/draw.js
@@ -459,6 +459,7 @@ function findDimenstions(gd, menuOpts) {
         } else {
             menuOpts.totalWidth = menuOpts.width1;
         }
+        menuOpts.totalWidth += constants.arrowPadX;
     }
 
     fakeButtons.remove();

From 7f1d35cc35026853e8ac176b3c285f0f2577b44e Mon Sep 17 00:00:00 2001
From: Ricky Reusser <rsreusser@gmail.com>
Date: Fri, 23 Sep 2016 13:44:38 -0400
Subject: [PATCH 07/11] Fix updatemenus descriptions and mocks

---
 src/components/updatemenus/attributes.js      |   4 +-
 test/image/baselines/updatemenus.png          | Bin 28969 -> 28970 bytes
 .../baselines/updatemenus_positioning.png     | Bin 0 -> 37495 bytes
 test/image/mocks/updatemenus_positioning.json | 204 ++++++++++++++++++
 4 files changed, 206 insertions(+), 2 deletions(-)
 create mode 100644 test/image/baselines/updatemenus_positioning.png
 create mode 100644 test/image/mocks/updatemenus_positioning.json

diff --git a/src/components/updatemenus/attributes.js b/src/components/updatemenus/attributes.js
index 5460335ddba..db70273840f 100644
--- a/src/components/updatemenus/attributes.js
+++ b/src/components/updatemenus/attributes.js
@@ -63,7 +63,7 @@ module.exports = {
         dflt: false,
         description: [
             'For dropdown menus, opens the menu in the reverse direction'
-        ]
+        ].join(' ')
     },
 
     type: {
@@ -85,7 +85,7 @@ module.exports = {
         description: [
             'Determines whether the menu and buttons are laid out vertically',
             'or horizontally'
-        ]
+        ].join(' ')
     },
 
     active: {
diff --git a/test/image/baselines/updatemenus.png b/test/image/baselines/updatemenus.png
index 1dc3c383b2c5f9b32ecc2d27d73fc592a97e278e..81809e1739de07c723c9e5a829b53942f8dc7279 100644
GIT binary patch
delta 19759
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
XvsU)XET_~d3_#%N>gTe~DWM4ftubf|

delta 19821
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

diff --git a/test/image/baselines/updatemenus_positioning.png b/test/image/baselines/updatemenus_positioning.png
new file mode 100644
index 0000000000000000000000000000000000000000..4931a807f68b3623331d27dda9a2f65fedba1256
GIT binary patch
literal 37495
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

literal 0
HcmV?d00001

diff --git a/test/image/mocks/updatemenus_positioning.json b/test/image/mocks/updatemenus_positioning.json
new file mode 100644
index 00000000000..ad91de0179e
--- /dev/null
+++ b/test/image/mocks/updatemenus_positioning.json
@@ -0,0 +1,204 @@
+{
+  "data": [
+    {
+      "y": [
+        0.8894873976401985,
+        0.014899350293371638,
+        0.6973412552835649,
+        0.4322110719369108,
+        0.6435204579331169,
+        0.7913368293479852,
+        0.45608188941724737,
+        0.8773020090286707,
+        0.7857950507320299,
+        0.1565801184767599
+      ],
+      "line": {
+        "shape": "spline",
+        "color": "blue"
+      },
+      "name": "Data set 0"
+    }
+  ],
+  "layout": {
+    "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"]}
+        ],
+        "x": 0.3,
+        "y": 1.0,
+        "yanchor": "top",
+        "xanchor": "left"
+      },
+      {
+        "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"]}
+        ],
+        "x": 0.3,
+        "y": 0.66,
+        "yanchor": "top",
+        "xanchor": "left",
+        "orientation": "h"
+      },
+      {
+        "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"]}
+        ],
+        "x": 0.3,
+        "y": 0.33,
+        "yanchor": "top",
+        "xanchor": "left",
+        "orientation": "h",
+        "openreverse": true
+      },
+      {
+        "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"]}
+        ],
+        "x": 0.3,
+        "y": 0.0,
+        "yanchor": "top",
+        "xanchor": "left",
+        "orientation": "v",
+        "openreverse": true
+      },
+      {
+        "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"]}
+        ],
+        "type": "buttons",
+        "x": -0.12,
+        "y": 1.0,
+        "yanchor": "top",
+        "xanchor": "left",
+        "showactive": false
+      },
+      {
+        "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"]}
+        ],
+        "type": "buttons",
+        "x": -0.12,
+        "y": 1.01,
+        "yanchor": "bottom",
+        "xanchor": "left",
+        "orientation": "h",
+        "showactive": false
+      },
+      {
+        "buttons": [
+          {"label": "red", "method": "restyle", "args": ["marker.color", "red"]},
+          {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]}
+        ],
+        "type": "buttons",
+        "x": 1,
+        "y": 0.03,
+        "yanchor": "bottom",
+        "xanchor": "right"
+      },
+      {
+        "buttons": [
+          {"label": "red", "method": "restyle", "args": ["marker.color", "red"]},
+          {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]}
+        ],
+        "type": "buttons",
+        "x": 1,
+        "y": 0.02,
+        "yanchor": "top",
+        "xanchor": "right",
+        "orientation": "h"
+      },
+      {
+        "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"]}
+        ],
+        "x": 0.6,
+        "y": 0.9,
+        "yanchor": "top",
+        "xanchor": "right"
+      },
+      {
+        "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"]}
+        ],
+        "x": 0.6,
+        "y": 0.9,
+        "yanchor": "bottom",
+        "xanchor": "left"
+      },
+      {
+        "buttons": [
+          {"label": "red", "method": "restyle", "args": ["marker.color", "red"]},
+          {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]}
+        ],
+        "x": 0.6,
+        "y": 0.4,
+        "type": "buttons",
+        "yanchor": "top",
+        "xanchor": "right"
+      },
+      {
+        "buttons": [
+          {"label": "red", "method": "restyle", "args": ["marker.color", "red"]},
+          {"label": "blue", "method": "restyle", "args": ["marker.color", "blue"]}
+        ],
+        "type": "buttons",
+        "x": 0.6,
+        "y": 0.4,
+        "yanchor": "bottom",
+        "xanchor": "left"
+      }
+    ],
+    "xaxis": {
+      "range": [
+        -0.5484683986041102,
+        9.54846839860411
+      ],
+      "autorange": true
+    },
+    "yaxis": {
+      "type": "linear",
+      "range": [
+        0.14689768330153566,
+        0.9369323077136202
+      ],
+      "autorange": true
+    },
+    "height": 450,
+    "width": 1100,
+    "autosize": true
+  }
+}

From 9a17f69abede6b138cd9b4b1d1be8bbc9430a0fd Mon Sep 17 00:00:00 2001
From: Ricky Reusser <rsreusser@gmail.com>
Date: Fri, 23 Sep 2016 14:14:08 -0400
Subject: [PATCH 08/11] Fix updatemenus tests

---
 test/jasmine/tests/updatemenus_test.js | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/test/jasmine/tests/updatemenus_test.js b/test/jasmine/tests/updatemenus_test.js
index 36fe6366325..c96ad2fab69 100644
--- a/test/jasmine/tests/updatemenus_test.js
+++ b/test/jasmine/tests/updatemenus_test.js
@@ -339,7 +339,7 @@ describe('update menus interactions', function() {
 
             return Plotly.relayout(gd, 'updatemenus[1].buttons[1].label', 'a looooooooooooong<br>label');
         }).then(function() {
-            assertItemDims(selectHeader(1), 179, 34.2);
+            assertItemDims(selectHeader(1), 179, 35);
 
             return click(selectHeader(1));
         }).then(function() {
@@ -381,21 +381,21 @@ describe('update menus interactions', function() {
         assertNodeCount('.' + constants.containerClassName, 1);
         assertNodeCount('.' + constants.headerClassName, expectedMenus.length);
 
-        var gButton = d3.select('.' + constants.buttonGroupClassName),
+        var gButton = d3.select('.' + constants.dropdownButtonGroupClassName),
             actualActiveIndex = +gButton.attr(constants.menuIndexAttrName),
             hasActive = false;
 
         expectedMenus.forEach(function(expected, i) {
             if(expected) {
                 expect(actualActiveIndex).toEqual(i);
-                assertNodeCount('.' + constants.buttonClassName, expected);
+                assertNodeCount('.' + constants.dropdownButtonClassName, expected);
                 hasActive = true;
             }
         });
 
         if(!hasActive) {
             expect(actualActiveIndex).toEqual(-1);
-            assertNodeCount('.' + constants.buttonClassName, 0);
+            assertNodeCount('.' + constants.dropdownButtonClassName, 0);
         }
     }
 
@@ -448,7 +448,7 @@ describe('update menus interactions', function() {
     }
 
     function selectButton(buttonIndex) {
-        var buttons = d3.selectAll('.' + constants.buttonClassName),
+        var buttons = d3.selectAll('.' + constants.dropdownButtonClassName),
             button = d3.select(buttons[0][buttonIndex]);
         return button;
     }

From 68ca4da9edeef7b83a7458ffd5c35eb5555868f3 Mon Sep 17 00:00:00 2001
From: Ricky Reusser <rsreusser@gmail.com>
Date: Fri, 23 Sep 2016 14:45:56 -0400
Subject: [PATCH 09/11] Add button dropdown tests

---
 src/components/updatemenus/constants.js |  2 +-
 test/jasmine/tests/updatemenus_test.js  | 85 +++++++++++++++++++++++++
 2 files changed, 86 insertions(+), 1 deletion(-)

diff --git a/src/components/updatemenus/constants.js b/src/components/updatemenus/constants.js
index 488b7fb77ec..8b6cea3439b 100644
--- a/src/components/updatemenus/constants.js
+++ b/src/components/updatemenus/constants.js
@@ -21,7 +21,7 @@ module.exports = {
     headerGroupClassName: 'updatemenu-header-group',
     headerClassName: 'updatemenu-header',
     headerArrowClassName: 'updatemenu-header-arrow',
-    dropdownButtonGroupClassName: 'updatemenu-button-group',
+    dropdownButtonGroupClassName: 'updatemenu-dropdown-button-group',
     dropdownButtonClassName: 'updatemenu-dropdown-button',
     buttonClassName: 'updatemenu-button',
     itemRectClassName: 'updatemenu-item-rect',
diff --git a/test/jasmine/tests/updatemenus_test.js b/test/jasmine/tests/updatemenus_test.js
index c96ad2fab69..666a5820a93 100644
--- a/test/jasmine/tests/updatemenus_test.js
+++ b/test/jasmine/tests/updatemenus_test.js
@@ -147,6 +147,91 @@ describe('update menus defaults', function() {
         expect(layoutOut.updatemenus[0].bgcolor).toEqual('blue');
         expect(layoutOut.updatemenus[1].bgcolor).toEqual('red');
     });
+
+    it('should default \'type\' to \'dropdown\'', function() {
+        layoutIn.updatemenus = [{
+            buttons: [{method: 'relayout', args: ['title', 'Hello World']}]
+        }];
+
+        supply(layoutIn, layoutOut);
+
+        expect(layoutOut.updatemenus[0].type).toEqual('dropdown');
+    });
+
+    it('should default \'orientation\' to \'v\'', function() {
+        layoutIn.updatemenus = [{
+            buttons: [{method: 'relayout', args: ['title', 'Hello World']}]
+        }];
+
+        supply(layoutIn, layoutOut);
+
+        expect(layoutOut.updatemenus[0].orientation).toEqual('v');
+    });
+
+    it('should default \'showactive\' to true', function() {
+        layoutIn.updatemenus = [{
+            buttons: [{method: 'relayout', args: ['title', 'Hello World']}]
+        }];
+
+        supply(layoutIn, layoutOut);
+
+        expect(layoutOut.updatemenus[0].showactive).toEqual(true);
+    });
+
+    it('should default \'openreverse\' to false', function() {
+        layoutIn.updatemenus = [{
+            buttons: [{method: 'relayout', args: ['title', 'Hello World']}]
+        }];
+
+        supply(layoutIn, layoutOut);
+
+        expect(layoutOut.updatemenus[0].openreverse).toEqual(false);
+    });
+});
+
+describe('update menus buttons', function() {
+    var mock = require('@mocks/updatemenus_positioning.json');
+    var gd;
+    var allMenus, buttonMenus, dropdownMenus;
+
+    beforeEach(function(done) {
+        gd = createGraphDiv();
+
+        // move update menu #2 to click on them separately
+        var mockCopy = Lib.extendDeep({}, mock);
+        mockCopy.layout.updatemenus[1].x = 1;
+
+        allMenus = mockCopy.layout.updatemenus;
+        buttonMenus = allMenus.filter(function(opts) {return opts.type === 'buttons';});
+        dropdownMenus = allMenus.filter(function(opts) {return opts.type !== 'buttons';});
+
+        Plotly.plot(gd, mockCopy.data, mockCopy.layout).then(done);
+    });
+
+    afterEach(function() {
+        Plotly.purge(gd);
+        destroyGraphDiv();
+    });
+
+    it('creates button menus', function(done) {
+        assertNodeCount('.' + constants.containerClassName, 1);
+
+        // 12 menus, but button menus don't have headers, so there are only six headers:
+        assertNodeCount('.' + constants.headerClassName, dropdownMenus.length);
+
+        // Count the *total* number of buttons we expect for this mock:
+        var buttonCount = 0;
+        buttonMenus.forEach(function(menu) {buttonCount += menu.buttons.length;});
+
+        assertNodeCount('.' + constants.buttonClassName, buttonCount);
+
+        done();
+
+    });
+
+    function assertNodeCount(query, cnt) {
+        expect(d3.selectAll(query).size()).toEqual(cnt);
+    }
 });
 
 describe('update menus interactions', function() {

From f8fba325f57e8f5d73b0c93739726ce246d3e016 Mon Sep 17 00:00:00 2001
From: Ricky Reusser <rsreusser@gmail.com>
Date: Fri, 23 Sep 2016 17:58:15 -0400
Subject: [PATCH 10/11] Change updatemenus orientation/openreverse to simply
 'direction'

---
 src/components/updatemenus/attributes.js      | 21 ++++--------
 src/components/updatemenus/defaults.js        |  3 +-
 src/components/updatemenus/draw.js            | 32 +++++++++++--------
 test/image/mocks/updatemenus_positioning.json | 12 +++----
 test/jasmine/tests/updatemenus_test.js        | 14 ++------
 5 files changed, 34 insertions(+), 48 deletions(-)

diff --git a/src/components/updatemenus/attributes.js b/src/components/updatemenus/attributes.js
index db70273840f..eb3a55a766b 100644
--- a/src/components/updatemenus/attributes.js
+++ b/src/components/updatemenus/attributes.js
@@ -57,15 +57,6 @@ module.exports = {
         ].join(' ')
     },
 
-    openreverse: {
-        valType: 'boolean',
-        role: 'info',
-        dflt: false,
-        description: [
-            'For dropdown menus, opens the menu in the reverse direction'
-        ].join(' ')
-    },
-
     type: {
         valType: 'enumerated',
         values: ['dropdown', 'buttons'],
@@ -77,14 +68,16 @@ module.exports = {
         ].join(' ')
     },
 
-    orientation: {
+    direction: {
         valType: 'enumerated',
-        values: ['h', 'v'],
-        dflt: 'v',
+        values: ['left', 'right', 'up', 'down'],
+        dflt: 'down',
         role: 'info',
         description: [
-            'Determines whether the menu and buttons are laid out vertically',
-            'or horizontally'
+            'Determines the direction in which the buttons are laid out, whether',
+            'in a dropdown menu or a row/column of buttons. For `left` and `up`,',
+            'the buttons will still appear in left-to-right or top-to-bottom order',
+            'respectively.'
         ].join(' ')
     },
 
diff --git a/src/components/updatemenus/defaults.js b/src/components/updatemenus/defaults.js
index a0a87890887..39f662c9003 100644
--- a/src/components/updatemenus/defaults.js
+++ b/src/components/updatemenus/defaults.js
@@ -49,9 +49,8 @@ function menuDefaults(menuIn, menuOut, layoutOut) {
     if(!visible) return;
 
     coerce('active');
-    coerce('orientation');
+    coerce('direction');
     coerce('type');
-    coerce('openreverse');
     coerce('showactive');
 
     coerce('x');
diff --git a/src/components/updatemenus/draw.js b/src/components/updatemenus/draw.js
index 0d287d0f2b2..87d1af69748 100644
--- a/src/components/updatemenus/draw.js
+++ b/src/components/updatemenus/draw.js
@@ -256,20 +256,22 @@ function drawButtons(gd, gHeader, gButton, menuOpts) {
     var x0 = 0;
     var y0 = 0;
 
+    var isVertical = ['up', 'down'].indexOf(menuOpts.direction) !== -1;
+
     if(menuOpts.type === 'dropdown') {
-        if(menuOpts.orientation === 'v') {
+        if(isVertical) {
             y0 = menuOpts.headerHeight + constants.gapButtonHeader;
         } else {
             x0 = menuOpts.headerWidth + constants.gapButtonHeader;
         }
     }
 
-    if(menuOpts.type === 'dropdown' && menuOpts.openreverse) {
-        if(menuOpts.orientation === 'v') {
-            y0 = -constants.gapButtonHeader + constants.gapButton - menuOpts.openHeight;
-        } else {
-            x0 = -constants.gapButtonHeader + constants.gapButton - menuOpts.openWidth;
-        }
+    if(menuOpts.type === 'dropdown' && menuOpts.direction === 'up') {
+        y0 = -constants.gapButtonHeader + constants.gapButton - menuOpts.openHeight;
+    }
+
+    if(menuOpts.type === 'dropdown' && menuOpts.direction === 'left') {
+        x0 = -constants.gapButtonHeader + constants.gapButton - menuOpts.openWidth;
     }
 
     var posOpts = {
@@ -399,6 +401,8 @@ function findDimenstions(gd, menuOpts) {
     fakeButtons.enter().append('g')
         .classed(constants.dropdownButtonClassName, true);
 
+    var isVertical = ['up', 'down'].indexOf(menuOpts.direction) !== -1;
+
     // loop over fake buttons to find width / height
     fakeButtons.each(function(buttonOpts, i) {
         var button = d3.select(this);
@@ -429,7 +433,7 @@ function findDimenstions(gd, menuOpts) {
         menuOpts.height1 = Math.max(menuOpts.height1, hEff);
         menuOpts.width1 = Math.max(menuOpts.width1, wEff);
 
-        if(menuOpts.orientation === 'v') {
+        if(isVertical) {
             menuOpts.totalWidth = Math.max(menuOpts.totalWidth, wEff);
             menuOpts.openWidth = menuOpts.totalWidth;
             menuOpts.totalHeight += hEff + constants.gapButton;
@@ -442,7 +446,7 @@ function findDimenstions(gd, menuOpts) {
         }
     });
 
-    if(menuOpts.orientation === 'v') {
+    if(isVertical) {
         menuOpts.totalHeight -= constants.gapButton;
     } else {
         menuOpts.totalWidth -= constants.gapButton;
@@ -453,7 +457,7 @@ function findDimenstions(gd, menuOpts) {
     menuOpts.headerHeight = menuOpts.height1;
 
     if(menuOpts.type === 'dropdown') {
-        if(menuOpts.orientation === 'v') {
+        if(isVertical) {
             menuOpts.width1 += constants.arrowPadX;
             menuOpts.totalHeight = menuOpts.height1;
         } else {
@@ -514,11 +518,13 @@ function setItemPosition(item, menuOpts, posOpts, overrideOpts) {
 
     Lib.setTranslate(item, borderWidth + posOpts.x, borderWidth + posOpts.y);
 
+    var isVertical = ['up', 'down'].indexOf(menuOpts.direction) !== -1;
+
     rect.attr({
         x: 0,
         y: 0,
-        width: overrideOpts.width || (menuOpts.orientation === 'v' ? menuOpts.width1 : menuOpts.widths[index]),
-        height: overrideOpts.height || (menuOpts.orientation === 'v' ? menuOpts.heights[index] : menuOpts.height1)
+        width: overrideOpts.width || (isVertical ? menuOpts.width1 : menuOpts.widths[index]),
+        height: overrideOpts.height || (isVertical ? menuOpts.heights[index] : menuOpts.height1)
     });
 
     var tHeight = menuOpts.font.size * constants.fontSizeToHeight,
@@ -533,7 +539,7 @@ function setItemPosition(item, menuOpts, posOpts, overrideOpts) {
     text.attr(textAttrs);
     tspans.attr(textAttrs);
 
-    if(menuOpts.orientation === 'v') {
+    if(isVertical) {
         posOpts.y += menuOpts.heights[index] + posOpts.yPad;
     } else {
         posOpts.x += menuOpts.widths[index] + posOpts.xPad;
diff --git a/test/image/mocks/updatemenus_positioning.json b/test/image/mocks/updatemenus_positioning.json
index ad91de0179e..ecff0b0c906 100644
--- a/test/image/mocks/updatemenus_positioning.json
+++ b/test/image/mocks/updatemenus_positioning.json
@@ -47,7 +47,7 @@
         "y": 0.66,
         "yanchor": "top",
         "xanchor": "left",
-        "orientation": "h"
+        "direction": "right"
       },
       {
         "buttons": [
@@ -61,8 +61,7 @@
         "y": 0.33,
         "yanchor": "top",
         "xanchor": "left",
-        "orientation": "h",
-        "openreverse": true
+        "direction": "left"
       },
       {
         "buttons": [
@@ -76,8 +75,7 @@
         "y": 0.0,
         "yanchor": "top",
         "xanchor": "left",
-        "orientation": "v",
-        "openreverse": true
+        "direction": "up"
       },
       {
         "buttons": [
@@ -107,7 +105,7 @@
         "y": 1.01,
         "yanchor": "bottom",
         "xanchor": "left",
-        "orientation": "h",
+        "direction": "right",
         "showactive": false
       },
       {
@@ -131,7 +129,7 @@
         "y": 0.02,
         "yanchor": "top",
         "xanchor": "right",
-        "orientation": "h"
+        "direction": "right"
       },
       {
         "buttons": [
diff --git a/test/jasmine/tests/updatemenus_test.js b/test/jasmine/tests/updatemenus_test.js
index 666a5820a93..e155bf27eff 100644
--- a/test/jasmine/tests/updatemenus_test.js
+++ b/test/jasmine/tests/updatemenus_test.js
@@ -158,14 +158,14 @@ describe('update menus defaults', function() {
         expect(layoutOut.updatemenus[0].type).toEqual('dropdown');
     });
 
-    it('should default \'orientation\' to \'v\'', function() {
+    it('should default \'direction\' to \'down\'', function() {
         layoutIn.updatemenus = [{
             buttons: [{method: 'relayout', args: ['title', 'Hello World']}]
         }];
 
         supply(layoutIn, layoutOut);
 
-        expect(layoutOut.updatemenus[0].orientation).toEqual('v');
+        expect(layoutOut.updatemenus[0].direction).toEqual('down');
     });
 
     it('should default \'showactive\' to true', function() {
@@ -177,16 +177,6 @@ describe('update menus defaults', function() {
 
         expect(layoutOut.updatemenus[0].showactive).toEqual(true);
     });
-
-    it('should default \'openreverse\' to false', function() {
-        layoutIn.updatemenus = [{
-            buttons: [{method: 'relayout', args: ['title', 'Hello World']}]
-        }];
-
-        supply(layoutIn, layoutOut);
-
-        expect(layoutOut.updatemenus[0].openreverse).toEqual(false);
-    });
 });
 
 describe('update menus buttons', function() {

From 570a448a0dd6f3f4ae9a13ff3e596911e73464b2 Mon Sep 17 00:00:00 2001
From: Ricky Reusser <rsreusser@gmail.com>
Date: Fri, 23 Sep 2016 18:14:38 -0400
Subject: [PATCH 11/11] Unmangle updatemenus comments

---
 src/components/updatemenus/draw.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/components/updatemenus/draw.js b/src/components/updatemenus/draw.js
index 87d1af69748..8acf51820ca 100644
--- a/src/components/updatemenus/draw.js
+++ b/src/components/updatemenus/draw.js
@@ -43,12 +43,12 @@ module.exports = function draw(gd) {
      *         <g item header />
      *         <text item header-arrow />
      *     <g header-group />
-     *
+     *         <g item header />
      *         <text item header-arrow />
      *     ...
      *
      *     <g button-group />
-     *
+     *         <g item button />
      *         <g item button />
      *         ...
      */