mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-28 16:33:16 +00:00
106 lines
2.4 KiB
CoffeeScript
106 lines
2.4 KiB
CoffeeScript
define [
|
|
"./util"
|
|
"history/VersionDetailView"
|
|
"libs/mustache"
|
|
"libs/backbone"
|
|
], (util, VersionDetailView)->
|
|
VersionListView = Backbone.View.extend
|
|
template: $("#versionListTemplate").html()
|
|
|
|
events:
|
|
"scroll" : "loadUntilFull"
|
|
|
|
initialize: ->
|
|
@itemViews = []
|
|
@atEndOfCollection = false
|
|
|
|
self = this
|
|
@collection.on "add", (model) ->
|
|
self.addItem model
|
|
@collection.on "reset", (collection) ->
|
|
self.addItem model for model in collection.models
|
|
|
|
@render()
|
|
@hideLoading()
|
|
|
|
render: ->
|
|
@$el.html Mustache.to_html @template
|
|
@$el.css
|
|
overflow: "scroll"
|
|
this
|
|
|
|
addItem: (model) ->
|
|
view = new VersionListItemView(model : model)
|
|
@itemViews.push view
|
|
index = @collection.indexOf(model)
|
|
elementAtIndex = @$("#version-list").children()[index]
|
|
view.$el.insertBefore(elementAtIndex)
|
|
|
|
listShorterThanContainer: ->
|
|
@$el.height() > @$("#version-list").height()
|
|
|
|
atEndOfListView: ->
|
|
@$el.scrollTop() + @$el.height() >= @$("#version-list").height() - 30
|
|
|
|
loadUntilFull: (e, callback) ->
|
|
if (@listShorterThanContainer() or @atEndOfListView()) and not @atEndOfCollection and not @loading
|
|
@showLoading()
|
|
@hideEmptyMessage()
|
|
@collection.fetchNextBatch
|
|
error: =>
|
|
@hideLoading()
|
|
@atEndOfCollection = true
|
|
@showEmptyMessageIfCollectionEmpty()
|
|
callback() if callback?
|
|
success: =>
|
|
@hideLoading()
|
|
@loadUntilFull(e, callback)
|
|
else
|
|
callback() if callback?
|
|
|
|
showEmptyMessageIfCollectionEmpty: ()->
|
|
if @collection.isEmpty()
|
|
@$(".empty-message").show()
|
|
else
|
|
@$(".empty-message").hide()
|
|
|
|
hideEmptyMessage: () ->
|
|
@$(".empty-message").hide()
|
|
|
|
showLoading: ->
|
|
@loading = true
|
|
@$(".loading").show()
|
|
|
|
hideLoading: ->
|
|
@loading = false
|
|
@$(".loading").hide()
|
|
|
|
VersionListItemView = Backbone.View.extend
|
|
tagName: "li"
|
|
|
|
events:
|
|
"click a": "showVersionDetail"
|
|
|
|
template : $("#versionListItemTemplate").html()
|
|
|
|
initialize: ->
|
|
@render()
|
|
|
|
render: ->
|
|
@$el.html Mustache.to_html(@template, @modelView())
|
|
return this
|
|
|
|
modelView: ->
|
|
modelView = @model.toJSON()
|
|
modelView.date = util.formatDate(modelView.date)
|
|
return modelView
|
|
|
|
showVersionDetail: ->
|
|
$("#versionListArea .active").removeClass "active"
|
|
@$el.addClass "active"
|
|
@model.fetch success: (model) ->
|
|
view = new VersionDetailView(model: model)
|
|
view.render()
|
|
|
|
return VersionListView
|
|
|