Skip to content

Commit

Permalink
[skip] Added Neat.Renderer.InfiniteReveal (48m)
Browse files Browse the repository at this point in the history
  • Loading branch information
Bob Lail and Matthew Kobs authored and boblail committed Mar 16, 2016
1 parent 2fa677c commit b6deb8d
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 0 deletions.
2 changes: 2 additions & 0 deletions vendor/assets/javascripts/neat.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
//= require ./neat/lib/observer
//= require ./neat/lib/paginated_list
//= require ./neat/lib/jquery_extensions
//= require ./neat/lib/scroll_handler
//= require ./neat/renderer/basic
//= require ./neat/renderer/paginated
//= require ./neat/renderer/infinite_reveal
//= require ./neat/collection_editor
//= require ./neat/model_editor

Expand Down
33 changes: 33 additions & 0 deletions vendor/assets/javascripts/neat/lib/scroll_handler.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
class @Neat.ScrollHandler
_.extend @prototype, Backbone.Events

constructor: (options={})->
@$viewPort = $(options.viewPort ? window)
@$document = $(document)
@$viewPort.scroll _.bind(@_windowWasScrolled, @)

_viewportHeight: ->
@$viewPort.height()

_documentHeight: ->
if $.isWindow @$viewPort[0]
@$document.height()
else
@$viewPort[0].scrollHeight

_windowWasScrolled: ->
viewportHeight = @_viewportHeight()
documentHeight = @_documentHeight()

scrollTop = @$viewPort.scrollTop()
scrollMax = documentHeight - viewportHeight
progress = scrollTop / scrollMax
distanceFromBottom = scrollTop - scrollMax

return if scrollMax <= 0

@trigger "scroll",
scrollTop: scrollTop
scrollMax: scrollMax
progress: progress
distanceFromBottom: distanceFromBottom
37 changes: 37 additions & 0 deletions vendor/assets/javascripts/neat/renderer/infinite_reveal.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
class window.Neat.Renderer.InfiniteReveal extends window.Neat.Renderer.Basic

constructor: (@view, @collection, @options) ->
super
@scrollHandler = new Neat.ScrollHandler()
@scrollHandler.on "scroll", _.bind(@_windowHasBeenScrolled, @)

@sensitivity = @options.sensitivity ? 5
@pageSize = @options.pageSize ? 50



_render: ->
@_setMaxItems @pageSize
super

_visibleModels: ->
@collection.models[0...@maxItems]

_loadMore: ->
Neat.logger.log "[Neat.Renderer.InfiniteReveal] loading..."
@_setMaxItems @maxItems + @pageSize
@_renderVisibleModels()

_thereIsMore: ->
@collection.length > @maxItems



_setMaxItems: (value) ->
@maxItems = Math.min value, @collection.length

_windowHasBeenScrolled: (e) ->
return unless @_thereIsMore()
return unless Math.abs(e.distanceFromBottom) <= @sensitivity
return unless @view.$el.is(':visible')
@_loadMore()

0 comments on commit b6deb8d

Please sign in to comment.