Skip to content

Commit ea0133a

Browse files
chore(all): prepare release 0.4.1
1 parent 4eb9ca0 commit ea0133a

22 files changed

+102
-34
lines changed

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "aurelia-ui-virtualization",
3-
"version": "0.4.0",
3+
"version": "0.4.1",
44
"description": "A plugin that provides a virtualized repeater and other virtualization services.",
55
"keywords": [
66
"aurelia",

dist/amd/array-virtual-repeat-strategy.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ define(['exports', 'aurelia-templating-resources/array-repeat-strategy', 'aureli
6666
var viewsLength = repeat.viewCount();
6767
var first = repeat._getIndexOfFirstView();
6868

69-
while (viewsLength > repeat._viewsLength) {
69+
while (viewsLength > itemsLength) {
7070
viewsLength--;
7171
repeat.removeView(viewsLength, true);
7272
}

dist/amd/aurelia-ui-virtualization.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ declare module 'aurelia-ui-virtualization' {
4444
export function rebindAndMoveView(repeat: VirtualRepeat, view: View, index: number, moveToBottom: boolean): void;
4545
export function getStyleValue(element: any, style: any): any;
4646
export function getElementDistanceToBottomViewPort(element: any): any;
47+
export function getElementDistanceToTopViewPort(element: any): any;
4748

4849
/**
4950
* A strategy for repeating a template over an array.

dist/amd/utilities.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ define(['exports', 'aurelia-templating-resources/repeat-utilities'], function (e
1010
exports.rebindAndMoveView = rebindAndMoveView;
1111
exports.getStyleValue = getStyleValue;
1212
exports.getElementDistanceToBottomViewPort = getElementDistanceToBottomViewPort;
13+
exports.getElementDistanceToTopViewPort = getElementDistanceToTopViewPort;
1314
function calcOuterHeight(element) {
1415
var height = void 0;
1516
height = element.getBoundingClientRect().height;
@@ -70,4 +71,8 @@ define(['exports', 'aurelia-templating-resources/repeat-utilities'], function (e
7071
function getElementDistanceToBottomViewPort(element) {
7172
return document.documentElement.clientHeight - element.getBoundingClientRect().bottom;
7273
}
74+
75+
function getElementDistanceToTopViewPort(element) {
76+
return element.getBoundingClientRect().top;
77+
}
7378
});

dist/amd/virtual-repeat.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ define(['exports', 'aurelia-dependency-injection', 'aurelia-binding', 'aurelia-t
137137
this.scrollListener = function () {
138138
return _this2._onScroll();
139139
};
140+
this.distanceToTop = (0, _utilities.getElementDistanceToTopViewPort)(this.topBuffer.nextElementSibling);
140141
var containerStyle = this.scrollContainer.style;
141142
if (containerStyle.overflowY === 'scroll' || containerStyle.overflow === 'scroll' || containerStyle.overflowY === 'auto' || containerStyle.overflow === 'auto') {
142143
this._fixedHeightContainer = true;
@@ -173,6 +174,7 @@ define(['exports', 'aurelia-dependency-injection', 'aurelia-binding', 'aurelia-t
173174
this.isLastIndex = false;
174175
this.scrollContainer = null;
175176
this.scrollContainerHeight = null;
177+
this.distanceToTop = null;
176178
this.removeAllViews(true);
177179
if (this.scrollHandler) {
178180
this.scrollHandler.dispose();
@@ -188,7 +190,7 @@ define(['exports', 'aurelia-dependency-injection', 'aurelia-binding', 'aurelia-t
188190
}
189191
var items = this.items;
190192
this.strategy = this.strategyLocator.getStrategy(items);
191-
if (items.length > 0) {
193+
if (items.length > 0 && this.viewCount() === 0) {
192194
this.strategy.createFirstItem(this);
193195
}
194196
this._calcInitialHeights(items.length);
@@ -250,7 +252,7 @@ define(['exports', 'aurelia-dependency-injection', 'aurelia-binding', 'aurelia-t
250252
return;
251253
}
252254
var itemHeight = this.itemHeight;
253-
var scrollTop = this._fixedHeightContainer ? this.scrollContainer.scrollTop : pageYOffset - this.topBuffer.offsetTop;
255+
var scrollTop = this._fixedHeightContainer ? this.scrollContainer.scrollTop : pageYOffset - this.distanceToTop;
254256
this._first = Math.floor(scrollTop / itemHeight);
255257
this._first = this._first < 0 ? 0 : this._first;
256258
if (this._first > this.items.length - this.elementsInView) {
@@ -352,17 +354,19 @@ define(['exports', 'aurelia-dependency-injection', 'aurelia-binding', 'aurelia-t
352354
var items = this.items;
353355
var index = this._scrollingDown ? this._getIndexOfLastView() + 1 : this._getIndexOfFirstView() - 1;
354356
var i = 0;
357+
var viewToMoveLimit = length - childrenLength * 2;
355358
while (i < length && !isAtFirstOrLastIndex()) {
356359
var view = this.view(viewIndex);
357360
var nextIndex = getNextIndex(index, i);
358361
this.isLastIndex = nextIndex >= items.length - 1;
359362
this._isAtTop = nextIndex <= 0;
360363
if (!(isAtFirstOrLastIndex() && childrenLength >= items.length)) {
361-
(0, _utilities.rebindAndMoveView)(this, view, nextIndex, this._scrollingDown);
364+
if (i > viewToMoveLimit) {
365+
(0, _utilities.rebindAndMoveView)(this, view, nextIndex, this._scrollingDown);
366+
}
362367
i++;
363368
}
364369
}
365-
366370
return length - (length - i);
367371
};
368372

dist/aurelia-ui-virtualization.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ declare module 'aurelia-ui-virtualization' {
4444
export function rebindAndMoveView(repeat: VirtualRepeat, view: View, index: number, moveToBottom: boolean): void;
4545
export function getStyleValue(element: any, style: any): any;
4646
export function getElementDistanceToBottomViewPort(element: any): any;
47+
export function getElementDistanceToTopViewPort(element: any): any;
4748

4849
/**
4950
* A strategy for repeating a template over an array.

dist/aurelia-ui-virtualization.js

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ export function getElementDistanceToBottomViewPort(element) {
7272
return document.documentElement.clientHeight - element.getBoundingClientRect().bottom;
7373
}
7474

75+
export function getElementDistanceToTopViewPort(element) {
76+
return element.getBoundingClientRect().top;
77+
}
78+
7579
/**
7680
* A strategy for repeating a template over an array.
7781
*/
@@ -102,7 +106,7 @@ export class ArrayVirtualRepeatStrategy extends ArrayRepeatStrategy {
102106
let viewsLength = repeat.viewCount();
103107
let first = repeat._getIndexOfFirstView();
104108
// remove unneeded views.
105-
while (viewsLength > repeat._viewsLength) {
109+
while (viewsLength > itemsLength) {
106110
viewsLength--;
107111
repeat.removeView(viewsLength, true);
108112
}
@@ -448,6 +452,7 @@ export class VirtualRepeat extends AbstractRepeater {
448452
this.bottomBuffer = this.viewStrategy.createBottomBufferElement(element);
449453
this.itemsChanged();
450454
this.scrollListener = () => this._onScroll();
455+
this.distanceToTop = getElementDistanceToTopViewPort(this.topBuffer.nextElementSibling);
451456
let containerStyle = this.scrollContainer.style;
452457
if (containerStyle.overflowY === 'scroll' || containerStyle.overflow === 'scroll' || containerStyle.overflowY === 'auto' || containerStyle.overflow === 'auto') {
453458
this._fixedHeightContainer = true;
@@ -484,6 +489,7 @@ export class VirtualRepeat extends AbstractRepeater {
484489
this.isLastIndex = false;
485490
this.scrollContainer = null;
486491
this.scrollContainerHeight = null;
492+
this.distanceToTop = null;
487493
this.removeAllViews(true);
488494
if (this.scrollHandler) {
489495
this.scrollHandler.dispose();
@@ -499,7 +505,7 @@ export class VirtualRepeat extends AbstractRepeater {
499505
}
500506
let items = this.items;
501507
this.strategy = this.strategyLocator.getStrategy(items);
502-
if (items.length > 0) {
508+
if (items.length > 0 && this.viewCount() === 0) {
503509
this.strategy.createFirstItem(this);
504510
}
505511
this._calcInitialHeights(items.length);
@@ -559,7 +565,7 @@ export class VirtualRepeat extends AbstractRepeater {
559565
return;
560566
}
561567
let itemHeight = this.itemHeight;
562-
let scrollTop = this._fixedHeightContainer ? this.scrollContainer.scrollTop : pageYOffset - this.topBuffer.offsetTop;
568+
let scrollTop = this._fixedHeightContainer ? this.scrollContainer.scrollTop : pageYOffset - this.distanceToTop;
563569
this._first = Math.floor(scrollTop / itemHeight);
564570
this._first = this._first < 0 ? 0 : this._first;
565571
if (this._first > this.items.length - this.elementsInView) {
@@ -653,17 +659,19 @@ export class VirtualRepeat extends AbstractRepeater {
653659
let items = this.items;
654660
let index = this._scrollingDown ? this._getIndexOfLastView() + 1 : this._getIndexOfFirstView() - 1;
655661
let i = 0;
662+
let viewToMoveLimit = length - (childrenLength * 2);
656663
while (i < length && !isAtFirstOrLastIndex()) {
657664
let view = this.view(viewIndex);
658665
let nextIndex = getNextIndex(index, i);
659666
this.isLastIndex = nextIndex >= items.length - 1;
660667
this._isAtTop = nextIndex <= 0;
661668
if (!(isAtFirstOrLastIndex() && childrenLength >= items.length)) {
662-
rebindAndMoveView(this, view, nextIndex, this._scrollingDown);
669+
if (i > viewToMoveLimit) {
670+
rebindAndMoveView(this, view, nextIndex, this._scrollingDown);
671+
}
663672
i++;
664673
}
665674
}
666-
667675
return length - (length - i);
668676
}
669677

dist/commonjs/array-virtual-repeat-strategy.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ var ArrayVirtualRepeatStrategy = exports.ArrayVirtualRepeatStrategy = function (
4747
var viewsLength = repeat.viewCount();
4848
var first = repeat._getIndexOfFirstView();
4949

50-
while (viewsLength > repeat._viewsLength) {
50+
while (viewsLength > itemsLength) {
5151
viewsLength--;
5252
repeat.removeView(viewsLength, true);
5353
}

dist/commonjs/aurelia-ui-virtualization.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ declare module 'aurelia-ui-virtualization' {
4444
export function rebindAndMoveView(repeat: VirtualRepeat, view: View, index: number, moveToBottom: boolean): void;
4545
export function getStyleValue(element: any, style: any): any;
4646
export function getElementDistanceToBottomViewPort(element: any): any;
47+
export function getElementDistanceToTopViewPort(element: any): any;
4748

4849
/**
4950
* A strategy for repeating a template over an array.

dist/commonjs/utilities.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ exports.updateVirtualOverrideContexts = updateVirtualOverrideContexts;
99
exports.rebindAndMoveView = rebindAndMoveView;
1010
exports.getStyleValue = getStyleValue;
1111
exports.getElementDistanceToBottomViewPort = getElementDistanceToBottomViewPort;
12+
exports.getElementDistanceToTopViewPort = getElementDistanceToTopViewPort;
1213

1314
var _repeatUtilities = require('aurelia-templating-resources/repeat-utilities');
1415

@@ -71,4 +72,8 @@ function getStyleValue(element, style) {
7172

7273
function getElementDistanceToBottomViewPort(element) {
7374
return document.documentElement.clientHeight - element.getBoundingClientRect().bottom;
75+
}
76+
77+
function getElementDistanceToTopViewPort(element) {
78+
return element.getBoundingClientRect().top;
7479
}

0 commit comments

Comments
 (0)