From 7025be163c50a6a6a3aaecba2a52bb61c7128876 Mon Sep 17 00:00:00 2001 From: Justin Moore Date: Thu, 3 Sep 2015 19:47:21 -0500 Subject: [PATCH] Improve recycler APIs used by dropdown --- src/mm-item-recycler/mm-item-recycler.js | 10 +++++++++- src/mm-item-recycler/mm-item-recycler.scss | 8 +++++++- src/shared/behaviors/positionable-dropdown.html | 4 +--- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/mm-item-recycler/mm-item-recycler.js b/src/mm-item-recycler/mm-item-recycler.js index bed41734..878a6822 100644 --- a/src/mm-item-recycler/mm-item-recycler.js +++ b/src/mm-item-recycler/mm-item-recycler.js @@ -68,6 +68,11 @@ found here: https://github.com/Polymer/core-list value: "2d", }, _gpuAssignedOnce: String, + xScroll: { + type: String, + value: "all", + reflectToAttribute: true, + }, scope: { type: Object, value: null, @@ -677,10 +682,13 @@ found here: https://github.com/Polymer/core-list getHeightAtIndex: function () { + var recycled = null; if (this.itemHeight) { return this._recycler.getHeightAtIndex.apply(this._recycler, arguments); } else { - return null; + // especially relevant when measurements are available before mutation observer fires + recycled = Polymer.dom(this.$.middle).querySelector(".recycler-panel"); + return recycled && recycled.offsetHeight || null; } }, }); diff --git a/src/mm-item-recycler/mm-item-recycler.scss b/src/mm-item-recycler/mm-item-recycler.scss index ff58b485..8e5bc10a 100644 --- a/src/mm-item-recycler/mm-item-recycler.scss +++ b/src/mm-item-recycler/mm-item-recycler.scss @@ -9,12 +9,18 @@ :host { display: block; + overflow: auto; +} + +:host([x-scroll="none"]) #constrainer { + max-width: 100%; } #pane { width: 100%; height: 100%; - overflow: auto; + overflow-x: inherit; + overflow-y: inherit; } #constrainer { diff --git a/src/shared/behaviors/positionable-dropdown.html b/src/shared/behaviors/positionable-dropdown.html index ba2cd204..da36c940 100644 --- a/src/shared/behaviors/positionable-dropdown.html +++ b/src/shared/behaviors/positionable-dropdown.html @@ -80,9 +80,7 @@ // if it's an item-recycler, we need to have NO horizontal scrolling if (this.$.itemRecycler) { - this.$.itemRecycler.$.constrainer.style.width = panelWidth; - this.$.itemRecycler.$.pane.style.overflowY = "auto"; - this.$.itemRecycler.$.pane.style.overflowX = "hidden"; + this.$.itemRecycler.xScroll = "none"; } panelRect.toCSS(this.panel,true);