Index: pkg/polymer/lib/elements/polymer-ui-menu-button/polymer-ui-menu-button.html |
diff --git a/pkg/polymer/lib/elements/polymer-ui-menu-button/polymer-ui-menu-button.html b/pkg/polymer/lib/elements/polymer-ui-menu-button/polymer-ui-menu-button.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ec4ac1e79ab93e19fd61ac5035439c5276caef6b |
--- /dev/null |
+++ b/pkg/polymer/lib/elements/polymer-ui-menu-button/polymer-ui-menu-button.html |
@@ -0,0 +1,151 @@ |
+<!-- |
+Copyright 2013 The Polymer Authors. All rights reserved. |
+Use of this source code is governed by a BSD-style |
+license that can be found in the LICENSE file. |
+--> |
+<!-- |
+/** |
+ * @module Polymer Elements |
+ */ |
+/** |
+ * polymer-ui-menu-button is a polymer-ui-icon-button with a drop down menu |
+ * that allows the user to select an option. The drop down menu is styled with |
+ * an arrow pointing to the button, and can be positioned to the top or the |
+ * bottom of the button with the valign property. The valign property aligns |
+ * the menu to the left or right edge of the button. |
+ * |
+ * Example: |
+ * |
+ * <polymer-ui-menu-button selected="0"> |
+ * <polymer-ui-menu-item icon="settings" label="Settings"></polymer-ui-menu-item> |
+ * <polymer-ui-menu-item icon="dialog" label="Dialog"></polymer-ui-menu-item> |
+ * <polymer-ui-menu-item icon="search" label="Search"></polymer-ui-menu-item> |
+ * </polymer-ui-menu-button> |
+ * |
+ * @class polymer-ui-menu-button |
+ */ |
+--> |
+<link rel="import" href="../polymer/polymer.html"> |
+<link rel="import" href="../polymer-anchor-point/polymer-anchor-point.html"> |
+<link rel="import" href="../polymer-media-query/polymer-media-query.html"> |
+<link rel="import" href="../polymer-overlay/polymer-overlay.html"> |
+<link rel="import" href="../polymer-ui-icon-button/polymer-ui-icon-button.html"> |
+<link rel="import" href="../polymer-ui-menu/polymer-ui-menu.html"> |
+<link rel="import" href="../polymer-ui-arrow/polymer-ui-arrow.html"> |
+ |
+<polymer-element name="polymer-ui-menu-button" attributes="src icon opened responsive halign valign selected selectedItem selectedClass valueattr multi parallax"> |
+ <template> |
+ <link rel="stylesheet" href="polymer-ui-menu-button.css"> |
+ <polymer-ui-icon-button id="button" on-tap="{{toggle}}" src="{{src}}" icon="{{icon}}" active="{{opened}}" anchor-point="{{valign}}"></polymer-ui-icon-button> |
+ <div id="overlay" halign="{{halign}}" valign="{{valign}}"> |
+ <div id="overlayBackdrop" pseudo="x-backdrop" overlay-toggle></div> |
+ <div id="overlayMenu"> |
+ <polymer-ui-menu id="menu" selected="{{selected}}" selectedItem="{{selectedItem}}" selectedClass="{{selectedClass}}" valueattr="{{valueattr}}" multi="{{multi}}" on-polymer-select="{{closeAction}}"> |
+ <content select="*"></content> |
+ </polymer-ui-menu> |
+ </div> |
+ <polymer-ui-arrow id="arrow" size="9" direction="{{valign == 'top' ? 'down' : 'up'}}" anchor-point="center center"></polymer-ui-arrow> |
+ </div> |
+ <polymer-media-query query="{{mediaQuery}}" on-polymer-mediachange="{{mediaChangeAction}}"></polymer-media-query> |
+ <polymer-anchor-point id="arrowPositionHelper" target="{{$.arrow}}" anchor="{{$.button}}"></polymer-anchor-point> |
+ <polymer-overlay target="{{$.overlay}}" opened="{{opened}}"></polymer-overlay> |
+ </template> |
+ <script> |
+ Polymer('polymer-ui-menu-button', { |
+ /** |
+ * The icon to display. |
+ * @attribute icon |
+ * @type string |
+ */ |
+ icon: 'dots', |
+ src: '', |
+ /** |
+ * The index of the selected menu item. |
+ * @attribute selected |
+ * @type number |
+ */ |
+ selected: '', |
+ /** |
+ * Set to true to open the menu. |
+ * @attribute opened |
+ * @type boolean |
+ */ |
+ opened: false, |
+ /** |
+ * Horizontally align the overlay with the button. Accepted values are |
+ * ["left", "center", "right"]. |
+ * @attribute halign |
+ * @type string |
+ */ |
+ halign: 'center', |
+ /** |
+ * Display the overlay on top or below the button. Accepted values are |
+ * ["top", "bottom"]. |
+ * @attribute valign |
+ * @type string |
+ */ |
+ valign: 'bottom', |
+ multi: false, |
+ parallax: false, |
+ mediaQuery: 'max-width: 800px', |
+ ready: function() { |
+ this.boundParallaxAction = this.parallaxAction.bind(this); |
+ }, |
+ openedChanged: function() { |
+ this.async(function() { |
+ this.$.arrowPositionHelper.apply(); |
+ this.tilt = null; |
+ if (this.parallax) { |
+ window.addEventListener('deviceorientation', |
+ this.boundParallaxAction, false); |
+ } else { |
+ window.removeEventListener('deviceorientation', |
+ this.boundParallaxAction, false); |
+ } |
+ }); |
+ }, |
+ parallaxAction: function(e) { |
+ var tiltLR = Math.round(e.gamma); |
+ var tiltTB = Math.round(e.beta); |
+ if (!this.tilt) { |
+ this.tilt = { |
+ lr: tiltLR, |
+ tb: tiltTB |
+ }; |
+ } else { |
+ var transX = ((tiltLR - this.tilt.lr) % 90) / 90 * 8; |
+ var transY = ((tiltTB - this.tilt.tb) % 90) / 90 * 13; |
+ this.$.overlayMenu.style['-webkit-transform'] = 'translate3d(' + |
+ transX + 'px,' + transY + 'px,0)'; |
+ this.$.arrow.style['-webkit-transform'] = 'translate3d(' + |
+ transX + 'px,' + transY + 'px,0)'; |
+ } |
+ }, |
+ mediaChangeAction: function(e) { |
+ if (e.detail.matches) { |
+ this.classList.add('fullwidth'); |
+ } else { |
+ this.classList.remove('fullwidth'); |
+ } |
+ }, |
+ closeAction: function() { |
+ this.opened = false; |
+ }, |
+ /** |
+ * Toggle the opened state of the dropdown. |
+ * @method toggle |
+ */ |
+ toggle: function() { |
+ this.opened = !this.opened; |
+ }, |
+ /** |
+ * The selected menu item. |
+ * @property selection |
+ * @type Node |
+ */ |
+ get selection() { |
+ return this.$.menu.selection; |
+ } |
+ }); |
+ </script> |
+</polymer-element> |