<!-- @license Copyright (c) 2015 The Polymer Project Authors. All rights reserved. This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE The complete set of authors may be found at http://polymer.github.io/AUTHORS The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS --> <script> function findElementInList(container, selector) { var i = 0; var children = container._children; var ms = Polymer.DomApi.matchesSelector; for (; i < children.length; i++) { if (children[i].nodeType === Node.ELEMENT_NODE && ms.call(children[i], selector)) { return children[i]; } } return null; } function buildItem(index) { return { index: index }; } function buildDataSet(size) { var data = []; while (data.length < size) { data.push(buildItem(data.length)); } return data; } function simulateScroll(config, fn) { var list = config.list; var target = config.target; var delay = config.delay || 1; var contribution = config.contribution || 10; function scroll(dir, prevVal) { if ((dir > 0 && list.scrollTop >= target) || (dir < 0 && list.scrollTop <= target) || list.scrollTop === prevVal ){ list.scrollTop = target; setTimeout(fn.bind(null, list.scrollTop), 100); return; } prevVal = list.scrollTop; list.scrollTop = list.scrollTop + dir; setTimeout(scroll.bind(null, dir, prevVal), delay); } if (list.scrollTop < target) { scroll(Math.abs(contribution), -1); } else if (list.scrollTop > target) { scroll(-Math.abs(contribution), -1); } } function getFirstItemFromList(list) { var listRect = list.getBoundingClientRect(); return document.elementFromPoint(listRect.left + 1, listRect.top + 1); } function getLastItemFromList(list) { var listRect = list.getBoundingClientRect(); return document.elementFromPoint(listRect.left + 1, listRect.top + listRect.height - 1); } function isFullOfItems(list) { var listRect = list.getBoundingClientRect(); var listHeight = listRect.height - 1; var item, y = listRect.top + 1; // IE 10 & 11 doesn't render propertly :( var badPixels = 0; while (y < listHeight) { item = document.elementFromPoint(listRect.left + 1, y); if (item.parentNode && !item.parentNode._templateInstance) { badPixels++; } if (badPixels > 3) { return false; } y += 2; } return true; } </script>