diff --git a/bower.json b/bower.json index be56544..6af5a1f 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "aurelia-ui-virtualization", - "version": "1.0.0-beta.5", + "version": "1.0.0-beta.6", "description": "A plugin that provides a virtualized repeater and other virtualization services.", "keywords": [ "aurelia", diff --git a/dist/amd/aurelia-ui-virtualization.js b/dist/amd/aurelia-ui-virtualization.js index 8c2bb05..fc4b7c2 100644 --- a/dist/amd/aurelia-ui-virtualization.js +++ b/dist/amd/aurelia-ui-virtualization.js @@ -68,6 +68,16 @@ define(['exports', 'aurelia-binding', 'aurelia-templating', 'aurelia-templating- var Math$floor = Math.floor; var $isNaN = isNaN; + var getScrollContainer = function (element) { + var current = element.parentNode; + while (current !== null && current !== document) { + if (hasOverflowScroll(current)) { + return current; + } + current = current.parentNode; + } + return document.documentElement; + }; var getElementDistanceToTopOfDocument = function (element) { var box = element.getBoundingClientRect(); var documentElement = document.documentElement; @@ -77,8 +87,8 @@ define(['exports', 'aurelia-binding', 'aurelia-templating', 'aurelia-templating- return Math$round(top); }; var hasOverflowScroll = function (element) { - var style = element.style; - return style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'; + var style = window.getComputedStyle(element); + return style && (style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'); }; var getStyleValues = function (element) { var styles = []; @@ -453,7 +463,7 @@ define(['exports', 'aurelia-binding', 'aurelia-templating', 'aurelia-templating- function DefaultTemplateStrategy() { } DefaultTemplateStrategy.prototype.getScrollContainer = function (element) { - return element.parentNode; + return getScrollContainer(element); }; DefaultTemplateStrategy.prototype.moveViewFirst = function (view, topBuffer) { insertBeforeNode(view, aureliaPal.DOM.nextElementSibling(topBuffer)); diff --git a/dist/commonjs/aurelia-ui-virtualization.js b/dist/commonjs/aurelia-ui-virtualization.js index 279830c..b9d3a91 100644 --- a/dist/commonjs/aurelia-ui-virtualization.js +++ b/dist/commonjs/aurelia-ui-virtualization.js @@ -76,6 +76,16 @@ var Math$round = Math.round; var Math$floor = Math.floor; var $isNaN = isNaN; +var getScrollContainer = function (element) { + var current = element.parentNode; + while (current !== null && current !== document) { + if (hasOverflowScroll(current)) { + return current; + } + current = current.parentNode; + } + return document.documentElement; +}; var getElementDistanceToTopOfDocument = function (element) { var box = element.getBoundingClientRect(); var documentElement = document.documentElement; @@ -85,8 +95,8 @@ var getElementDistanceToTopOfDocument = function (element) { return Math$round(top); }; var hasOverflowScroll = function (element) { - var style = element.style; - return style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'; + var style = window.getComputedStyle(element); + return style && (style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'); }; var getStyleValues = function (element) { var styles = []; @@ -461,7 +471,7 @@ var DefaultTemplateStrategy = (function () { function DefaultTemplateStrategy() { } DefaultTemplateStrategy.prototype.getScrollContainer = function (element) { - return element.parentNode; + return getScrollContainer(element); }; DefaultTemplateStrategy.prototype.moveViewFirst = function (view, topBuffer) { insertBeforeNode(view, aureliaPal.DOM.nextElementSibling(topBuffer)); diff --git a/dist/es2015/aurelia-ui-virtualization.js b/dist/es2015/aurelia-ui-virtualization.js index 9e398ed..a00ae85 100644 --- a/dist/es2015/aurelia-ui-virtualization.js +++ b/dist/es2015/aurelia-ui-virtualization.js @@ -43,6 +43,16 @@ const Math$round = Math.round; const Math$floor = Math.floor; const $isNaN = isNaN; +const getScrollContainer = (element) => { + let current = element.parentNode; + while (current !== null && current !== document) { + if (hasOverflowScroll(current)) { + return current; + } + current = current.parentNode; + } + return document.documentElement; +}; const getElementDistanceToTopOfDocument = (element) => { let box = element.getBoundingClientRect(); let documentElement = document.documentElement; @@ -52,8 +62,8 @@ const getElementDistanceToTopOfDocument = (element) => { return Math$round(top); }; const hasOverflowScroll = (element) => { - let style = element.style; - return style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'; + const style = window.getComputedStyle(element); + return style && (style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'); }; const getStyleValues = (element, ...styles) => { let currentStyle = window.getComputedStyle(element); @@ -410,7 +420,7 @@ class VirtualRepeatStrategyLocator { class DefaultTemplateStrategy { getScrollContainer(element) { - return element.parentNode; + return getScrollContainer(element); } moveViewFirst(view, topBuffer) { insertBeforeNode(view, DOM.nextElementSibling(topBuffer)); diff --git a/dist/es2017/aurelia-ui-virtualization.js b/dist/es2017/aurelia-ui-virtualization.js index 9e398ed..a00ae85 100644 --- a/dist/es2017/aurelia-ui-virtualization.js +++ b/dist/es2017/aurelia-ui-virtualization.js @@ -43,6 +43,16 @@ const Math$round = Math.round; const Math$floor = Math.floor; const $isNaN = isNaN; +const getScrollContainer = (element) => { + let current = element.parentNode; + while (current !== null && current !== document) { + if (hasOverflowScroll(current)) { + return current; + } + current = current.parentNode; + } + return document.documentElement; +}; const getElementDistanceToTopOfDocument = (element) => { let box = element.getBoundingClientRect(); let documentElement = document.documentElement; @@ -52,8 +62,8 @@ const getElementDistanceToTopOfDocument = (element) => { return Math$round(top); }; const hasOverflowScroll = (element) => { - let style = element.style; - return style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'; + const style = window.getComputedStyle(element); + return style && (style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'); }; const getStyleValues = (element, ...styles) => { let currentStyle = window.getComputedStyle(element); @@ -410,7 +420,7 @@ class VirtualRepeatStrategyLocator { class DefaultTemplateStrategy { getScrollContainer(element) { - return element.parentNode; + return getScrollContainer(element); } moveViewFirst(view, topBuffer) { insertBeforeNode(view, DOM.nextElementSibling(topBuffer)); diff --git a/dist/native-modules/aurelia-ui-virtualization.js b/dist/native-modules/aurelia-ui-virtualization.js index 7c81298..95e594a 100644 --- a/dist/native-modules/aurelia-ui-virtualization.js +++ b/dist/native-modules/aurelia-ui-virtualization.js @@ -72,6 +72,16 @@ var Math$round = Math.round; var Math$floor = Math.floor; var $isNaN = isNaN; +var getScrollContainer = function (element) { + var current = element.parentNode; + while (current !== null && current !== document) { + if (hasOverflowScroll(current)) { + return current; + } + current = current.parentNode; + } + return document.documentElement; +}; var getElementDistanceToTopOfDocument = function (element) { var box = element.getBoundingClientRect(); var documentElement = document.documentElement; @@ -81,8 +91,8 @@ var getElementDistanceToTopOfDocument = function (element) { return Math$round(top); }; var hasOverflowScroll = function (element) { - var style = element.style; - return style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'; + var style = window.getComputedStyle(element); + return style && (style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'); }; var getStyleValues = function (element) { var styles = []; @@ -457,7 +467,7 @@ var DefaultTemplateStrategy = (function () { function DefaultTemplateStrategy() { } DefaultTemplateStrategy.prototype.getScrollContainer = function (element) { - return element.parentNode; + return getScrollContainer(element); }; DefaultTemplateStrategy.prototype.moveViewFirst = function (view, topBuffer) { insertBeforeNode(view, DOM.nextElementSibling(topBuffer)); diff --git a/dist/system/aurelia-ui-virtualization.js b/dist/system/aurelia-ui-virtualization.js index b88e619..952984d 100644 --- a/dist/system/aurelia-ui-virtualization.js +++ b/dist/system/aurelia-ui-virtualization.js @@ -100,6 +100,16 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-templating-re var Math$floor = Math.floor; var $isNaN = isNaN; + var getScrollContainer = function (element) { + var current = element.parentNode; + while (current !== null && current !== document) { + if (hasOverflowScroll(current)) { + return current; + } + current = current.parentNode; + } + return document.documentElement; + }; var getElementDistanceToTopOfDocument = function (element) { var box = element.getBoundingClientRect(); var documentElement = document.documentElement; @@ -109,8 +119,8 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-templating-re return Math$round(top); }; var hasOverflowScroll = function (element) { - var style = element.style; - return style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'; + var style = window.getComputedStyle(element); + return style && (style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'); }; var getStyleValues = function (element) { var styles = []; @@ -485,7 +495,7 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-templating-re function DefaultTemplateStrategy() { } DefaultTemplateStrategy.prototype.getScrollContainer = function (element) { - return element.parentNode; + return getScrollContainer(element); }; DefaultTemplateStrategy.prototype.moveViewFirst = function (view, topBuffer) { insertBeforeNode(view, DOM.nextElementSibling(topBuffer)); diff --git a/dist/umd-es2015/aurelia-ui-virtualization.js b/dist/umd-es2015/aurelia-ui-virtualization.js index 5abf1b6..97a79a7 100644 --- a/dist/umd-es2015/aurelia-ui-virtualization.js +++ b/dist/umd-es2015/aurelia-ui-virtualization.js @@ -43,6 +43,16 @@ const Math$floor = Math.floor; const $isNaN = isNaN; + const getScrollContainer = (element) => { + let current = element.parentNode; + while (current !== null && current !== document) { + if (hasOverflowScroll(current)) { + return current; + } + current = current.parentNode; + } + return document.documentElement; + }; const getElementDistanceToTopOfDocument = (element) => { let box = element.getBoundingClientRect(); let documentElement = document.documentElement; @@ -52,8 +62,8 @@ return Math$round(top); }; const hasOverflowScroll = (element) => { - let style = element.style; - return style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'; + const style = window.getComputedStyle(element); + return style && (style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'); }; const getStyleValues = (element, ...styles) => { let currentStyle = window.getComputedStyle(element); @@ -410,7 +420,7 @@ class DefaultTemplateStrategy { getScrollContainer(element) { - return element.parentNode; + return getScrollContainer(element); } moveViewFirst(view, topBuffer) { insertBeforeNode(view, aureliaPal.DOM.nextElementSibling(topBuffer)); diff --git a/dist/umd/aurelia-ui-virtualization.js b/dist/umd/aurelia-ui-virtualization.js index bdd18f2..b12bad5 100644 --- a/dist/umd/aurelia-ui-virtualization.js +++ b/dist/umd/aurelia-ui-virtualization.js @@ -72,6 +72,16 @@ var Math$floor = Math.floor; var $isNaN = isNaN; + var getScrollContainer = function (element) { + var current = element.parentNode; + while (current !== null && current !== document) { + if (hasOverflowScroll(current)) { + return current; + } + current = current.parentNode; + } + return document.documentElement; + }; var getElementDistanceToTopOfDocument = function (element) { var box = element.getBoundingClientRect(); var documentElement = document.documentElement; @@ -81,8 +91,8 @@ return Math$round(top); }; var hasOverflowScroll = function (element) { - var style = element.style; - return style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'; + var style = window.getComputedStyle(element); + return style && (style.overflowY === 'scroll' || style.overflow === 'scroll' || style.overflowY === 'auto' || style.overflow === 'auto'); }; var getStyleValues = function (element) { var styles = []; @@ -457,7 +467,7 @@ function DefaultTemplateStrategy() { } DefaultTemplateStrategy.prototype.getScrollContainer = function (element) { - return element.parentNode; + return getScrollContainer(element); }; DefaultTemplateStrategy.prototype.moveViewFirst = function (view, topBuffer) { insertBeforeNode(view, aureliaPal.DOM.nextElementSibling(topBuffer)); diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md index 46bd798..9f9d19e 100644 --- a/doc/CHANGELOG.md +++ b/doc/CHANGELOG.md @@ -1,3 +1,17 @@ +# [1.0.0-beta.6](https://github.com/aurelia/ui-virtualization/compare/1.0.0-beta.5...1.0.0-beta.6) (2019-03-28) + + +### Bug Fixes + +* **utilities-dom:** use window.getComputedStyle for hasOverflowScroll ([4b015d2](https://github.com/aurelia/ui-virtualization/commit/4b015d2)) + + +### Features + +* **template-strategy-default:** walk up the DOM tree and determine what element will be scroller for virtual repeat ([6ebf907](https://github.com/aurelia/ui-virtualization/commit/6ebf907)) + + + # [1.0.0-beta.5](https://github.com/aurelia/ui-virtualization/compare/1.0.0-beta.4...1.0.0-beta.5) (2019-03-27) diff --git a/package.json b/package.json index 5c7db14..b2de0c9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aurelia-ui-virtualization", - "version": "1.0.0-beta.5", + "version": "1.0.0-beta.6", "description": "A plugin that provides a virtualized repeater and other virtualization services.", "keywords": [ "aurelia",