11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Polymer('core-dropdown',{
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    publish: {
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * True if the menu is open.
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       *
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @attribute opened
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @type boolean
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @default false
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       */
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      opened: false,
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * A label for the control. The label is displayed if no item is selected.
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       *
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @attribute label
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @type string
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @default 'Select an item'
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       */
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      label: 'Select an item',
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * The currently selected element. By default this is the index of the item element.
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * If you want a specific attribute value of the element to be used instead of the
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * index, set `valueattr` to that attribute name.
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       *
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @attribute selected
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @type Object
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @default null
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       */
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      selected: null,
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * Specifies the attribute to be used for "selected" attribute.
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       *
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @attribute valueattr
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @type string
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @default 'name'
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       */
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      valueattr: 'name',
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * Specifies the CSS class to be used to add to the selected element.
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       *
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @attribute selectedClass
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @type string
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @default 'core-selected'
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       */
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      selectedClass: 'core-selected',
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * Specifies the property to be used to set on the selected element
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * to indicate its active state.
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       *
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @attribute selectedProperty
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @type string
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @default ''
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       */
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      selectedProperty: '',
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * Specifies the attribute to set on the selected element to indicate
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * its active state.
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       *
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @attribute selectedAttribute
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @type string
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @default 'active'
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       */
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      selectedAttribute: 'selected',
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * The currently selected element.
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       *
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @attribute selectedItem
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @type Object
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @default null
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       */
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      selectedItem: null,
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * Horizontally align the overlay with the control.
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @attribute halign
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @type "left"|"right"
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @default "left"
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       */
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      halign: {value: 'left', reflect: true},
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      /**
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * Vertically align the dropdown menu with the control.
931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @attribute valign
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @type "top"|"bottom"
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       * @default "bottom"
961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       */
971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      valign: {value: 'bottom', reflect: true}
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    },
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    toggle: function() {
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      this.opened = !this.opened;
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    },
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    openAction: function(e) {
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if (e.detail) {
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        var rect = this.$.control.getBoundingClientRect();
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (this.valign === 'top') {
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          this.$.menu.style.top = 'auto';
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          this.$.menu.style.bottom = rect.height + 'px';
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          this.$.menu.style.maxHeight = (window.innerHeight - (window.innerHeight - rect.top) - 12) + 'px';
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        } else {
1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          this.$.menu.style.top = rect.height + 'px';
1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          this.$.menu.style.bottom = 'auto';
1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          this.$.menu.style.maxHeight = (window.innerHeight - rect.height - rect.top - 12) + 'px';
1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        }
1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        this.$.menu.style.minWidth = rect.width + 'px';
1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      }
1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    },
1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    selectAction: function() {
1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      this.opened = false;
1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  });
1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
126