Skip to content

Commit 29c7899

Browse files
committed
proper place to adjust padding
1 parent abb59b9 commit 29c7899

File tree

1 file changed

+36
-13
lines changed

1 file changed

+36
-13
lines changed

src/ui-scroll.coffee

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ angular.module('ui.scroll', [])
7373

7474
buffer = Object.create Array.prototype
7575

76+
# starting index for initial load
77+
origin = 1
78+
7679
buffer.size = bufferSize
7780

7881
# inserts wrapped element in the buffer
@@ -113,17 +116,35 @@ angular.module('ui.scroll', [])
113116
reset = ->
114117
buffer.eof = false
115118
buffer.bof = false
116-
buffer.first = 1
117-
buffer.next = 1
119+
buffer.first = origin
120+
buffer.next = origin
121+
buffer.localMinIndex = origin
118122

119123
# clears the buffer
120124
buffer.clear = ->
121125
buffer.remove(0, buffer.length)
122126
reset()
123127

124128
reset()
125-
buffer.minIndex = -> datasource.minIndex || 1
126-
buffer.maxIndex = -> datasource.maxIndex || 1
129+
130+
buffer.minIndex = (value) ->
131+
#console.log "before ds #{datasource.minIndex} local #{buffer.localMinIndex}"
132+
if arguments.length
133+
if buffer.bof
134+
datasource.minIndex = value
135+
else
136+
datasource.minIndex = Math.min value, datasource.minIndex || Number.MAX_VALUE
137+
buffer.localMinIndex = datasource.minIndex
138+
#console.log "after ds #{datasource.minIndex} local #{buffer.localMinIndex}"
139+
else
140+
offset = buffer.localMinIndex - (datasource.minIndex || origin)
141+
buffer.localMinIndex -= offset
142+
#console.log "after ds #{datasource.minIndex} local #{buffer.localMinIndex} , #{offset}"
143+
offset: offset
144+
value: buffer.localMinIndex
145+
146+
buffer.maxIndex = -> datasource.maxIndex || origin
147+
127148
buffer
128149

129150
Padding = (template) ->
@@ -177,7 +198,7 @@ angular.module('ui.scroll', [])
177198
viewport.clipBottom = ->
178199
# clip the invisible items off the bottom
179200
overage = 0
180-
calculateAverageItemHeight()
201+
#calculateAverageItemHeight()
181202
overageBottom = viewport.outerHeight() + viewport.averageItemHeight * (buffer.size)
182203
for i in [buffer.length-1..0]
183204
item = buffer[i]
@@ -196,7 +217,7 @@ angular.module('ui.scroll', [])
196217
# clip the invisible items off the top
197218
overage = 0
198219
heightIncrement = 0
199-
calculateAverageItemHeight()
220+
#calculateAverageItemHeight()
200221
overageTop = (-1) * viewport.averageItemHeight * buffer.size
201222
for item in buffer
202223
if item.element.offset().top < overageTop
@@ -214,11 +235,15 @@ angular.module('ui.scroll', [])
214235
viewport.averageItemHeight = (buffer[buffer.length-1].element.offset().top +
215236
buffer[buffer.length-1].element.outerHeight(true) -
216237
buffer[0].element.offset().top) / buffer.length
238+
console.log "avg #{viewport.averageItemHeight}"
217239

218240
viewport.adjustPadding = () ->
219241
return if not buffer.length
220242
calculateAverageItemHeight()
221-
topPadding.height (buffer.first - buffer.minIndex()) * viewport.averageItemHeight
243+
minIndex = buffer.minIndex()
244+
#console.log "offs #{minIndex.offset}"
245+
viewport.adjustScrollTop(minIndex.offset * viewport.averageItemHeight)
246+
topPadding.height (buffer.first - minIndex.value) * viewport.averageItemHeight
222247
bottomPadding.height (buffer.maxIndex() - buffer.next + 1) * viewport.averageItemHeight
223248

224249
viewport.adjustScrollTop = (height) ->
@@ -433,13 +458,14 @@ angular.module('ui.scroll', [])
433458
# re-index the buffer
434459
item.scope.$index = buffer.first + i for item,i in buffer
435460

436-
viewport.adjustPadding()
437-
438461
# schedule another adjustBuffer after animation completion
439462
if (promises.length)
440463
$q.all(promises).then ->
464+
viewport.adjustPadding()
441465
#log "Animation completed rid #{rid}"
442466
adjustBuffer rid
467+
else
468+
viewport.adjustPadding()
443469

444470
keepFetching
445471

@@ -514,10 +540,7 @@ angular.module('ui.scroll', [])
514540
--buffer.first
515541
buffer.insert 'prepend', result[i]
516542
#log 'prepended: requested ' + bufferSize + ' received ' + result.length + ' buffer size ' + buffer.length + ' first ' + first + ' next ' + next
517-
if buffer.bof
518-
datasource.minIndex = buffer.first
519-
else
520-
datasource.minIndex = Math.min buffer.first, datasource.minIndex || Number.MAX_VALUE
543+
buffer.minIndex buffer.first
521544
adjustBufferAfterFetch rid
522545

523546

0 commit comments

Comments
 (0)