@@ -129,8 +129,7 @@ angular.module('ui.scroll', [])
129
129
result
130
130
131
131
132
-
133
- Viewport = (element , controllers ) ->
132
+ Viewport = (buffer , element , controllers ) ->
134
133
135
134
viewport = if controllers[0 ] and controllers[0 ].viewport then controllers[0 ].viewport else angular .element (window )
136
135
viewport .css ({' overflow-y' : ' auto' , ' display' : ' block' })
@@ -164,6 +163,59 @@ angular.module('ui.scroll', [])
164
163
165
164
viewport .insertElementAnimated = (e , sibling ) -> insertElementAnimated (e, sibling || topPadding)
166
165
166
+ viewport .shouldLoadBottom = ->
167
+ ! buffer .eof && viewport .bottomDataPos () < viewport .bottomVisiblePos () + bufferPadding ()
168
+
169
+ viewport .clipBottom = ->
170
+ # clip the invisible items off the bottom
171
+ bottomHeight = 0
172
+ overage = 0
173
+
174
+ for i in [buffer .length - 1 .. 0 ]
175
+ item = buffer[i]
176
+ itemTop = item .element .offset ().top
177
+ newRow = rowTop isnt itemTop
178
+ rowTop = itemTop
179
+ itemHeight = item .element .outerHeight (true ) if newRow
180
+ if (viewport .bottomDataPos () - bottomHeight - itemHeight > viewport .bottomVisiblePos () + bufferPadding ())
181
+ bottomHeight += itemHeight if newRow
182
+ overage++
183
+ buffer .eof = false
184
+ else
185
+ break if newRow
186
+ overage++
187
+
188
+ if overage > 0
189
+ viewport .bottomPadding (viewport .bottomPadding () + bottomHeight)
190
+ buffer .remove (buffer .length - overage, buffer .length )
191
+ next -= overage
192
+
193
+ viewport .shouldLoadTop = ->
194
+ ! buffer .bof && (viewport .topDataPos () > viewport .topVisiblePos () - bufferPadding ())
195
+
196
+ viewport .clipTop = ->
197
+ # clip the invisible items off the top
198
+ topHeight = 0
199
+ overage = 0
200
+ for item in buffer
201
+ itemTop = item .element .offset ().top
202
+ newRow = rowTop isnt itemTop
203
+ rowTop = itemTop
204
+ itemHeight = item .element .outerHeight (true ) if newRow
205
+ if (viewport .topDataPos () + topHeight + itemHeight < viewport .topVisiblePos () - bufferPadding ())
206
+ topHeight += itemHeight if newRow
207
+ overage++
208
+ buffer .bof = false
209
+ else
210
+ break if newRow
211
+ overage++
212
+ if overage > 0
213
+ viewport .topPadding (viewport .topPadding () + topHeight)
214
+ buffer .remove (0 , overage)
215
+ first += overage
216
+
217
+
218
+
167
219
viewport
168
220
169
221
@@ -198,7 +250,6 @@ angular.module('ui.scroll', [])
198
250
199
251
# initial settings
200
252
201
- builder = null
202
253
ridActual = 0 # current data revision id
203
254
first = 1
204
255
next = 1
@@ -207,7 +258,7 @@ angular.module('ui.scroll', [])
207
258
eof = false
208
259
bof = false
209
260
210
- viewport = new Viewport element, controllers
261
+ viewport = new Viewport (buffer, element, controllers)
211
262
212
263
# Padding element builder
213
264
#
@@ -225,8 +276,6 @@ angular.module('ui.scroll', [])
225
276
226
277
viewportScope = viewport .scope () || $rootScope
227
278
228
- # v = new Viewport element, controllers
229
-
230
279
topVisible = (item ) ->
231
280
adapter .topVisible = item .scope [itemName]
232
281
adapter .topVisibleElement = item .element
0 commit comments