From c0686b6592ed859221d0207c62601907517c64d1 Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 20 Mar 2014 14:46:34 +0000 Subject: [PATCH] Load entire project history into change list view --- services/web/app/coffee/router.coffee | 2 +- services/web/app/views/templates.jade | 3 ++- .../coffee/track-changes/ChangeListView.coffee | 13 ++++++++++--- .../track-changes/TrackChangesManager.coffee | 2 +- .../coffee/track-changes/models/Change.coffee | 12 ++++++++++-- .../track-changes/models/ChangeList.coffee | 18 +++++++++++++----- .../public/stylesheets/less/trackchanges.less | 9 ++++++++- 7 files changed, 45 insertions(+), 14 deletions(-) diff --git a/services/web/app/coffee/router.coffee b/services/web/app/coffee/router.coffee index a4f0837bc1..958f3d19d9 100644 --- a/services/web/app/coffee/router.coffee +++ b/services/web/app/coffee/router.coffee @@ -124,7 +124,7 @@ module.exports = class Router app.get '/Project/:Project_id/version', SecutiryManager.requestCanAccessProject, versioningController.listVersions app.get '/Project/:Project_id/version/:Version_id', SecutiryManager.requestCanAccessProject, versioningController.getVersion - app.get "/project/:Project_id/doc/:doc_id/updates", SecutiryManager.requestCanAccessProject, TrackChangesController.proxyToTrackChangesApi + app.get "/project/:Project_id/updates", SecutiryManager.requestCanAccessProject, TrackChangesController.proxyToTrackChangesApi app.get "/project/:Project_id/doc/:doc_id/diff", SecutiryManager.requestCanAccessProject, TrackChangesController.proxyToTrackChangesApi app.post "/project/:Project_id/doc/:doc_id/version/:version_id/restore", SecutiryManager.requestCanAccessProject, TrackChangesController.proxyToTrackChangesApi diff --git a/services/web/app/views/templates.jade b/services/web/app/views/templates.jade index 4ab4640e1f..1971a6c8c2 100644 --- a/services/web/app/views/templates.jade +++ b/services/web/app/views/templates.jade @@ -443,7 +443,8 @@ input(type="radio",name="toVersion").change-selector-to div(class='change-description') - div(class='change-date') {{date}} + div.changed-docs {{docs}} + div.change-date {{date}} div {{{users}}} div(class='restore') diff --git a/services/web/public/coffee/track-changes/ChangeListView.coffee b/services/web/public/coffee/track-changes/ChangeListView.coffee index 11487a2e83..901df7e817 100644 --- a/services/web/public/coffee/track-changes/ChangeListView.coffee +++ b/services/web/public/coffee/track-changes/ChangeListView.coffee @@ -131,12 +131,12 @@ define [ callback(error) success: (collection, response) => @hideLoading() - if response.updates.length == @collection.batchSize - @loadUntilFull(callback) - else + if @collection.isAtEnd() @atEndOfCollection = true @showEmptyMessageIfCollectionEmpty() callback() + else + @loadUntilFull(callback) else callback() if callback? @@ -189,9 +189,16 @@ define [ hue: user.hue() name: user.name() } + docNames = [] + for doc in @model.get("docs") + if doc.entity? + docNames.push doc.entity.get("name") + else + docNames.push "deleted" data = { date: moment(parseInt(@model.get("end_ts"), 10)).calendar() users: userHtml.join("") + docs: docNames.join(", ") } @$el.html Mustache.to_html(@templates.item, data) diff --git a/services/web/public/coffee/track-changes/TrackChangesManager.coffee b/services/web/public/coffee/track-changes/TrackChangesManager.coffee index 24079e6832..b63c9ecdd5 100644 --- a/services/web/public/coffee/track-changes/TrackChangesManager.coffee +++ b/services/web/public/coffee/track-changes/TrackChangesManager.coffee @@ -39,7 +39,7 @@ define [ show: (@doc_id) -> @ide.fileTreeManager.selectEntity(@doc_id) - @changes = new ChangeList([], doc_id: @doc_id, project_id: @project_id) + @changes = new ChangeList([], project_id: @project_id, ide: @ide) @changeListView = new ChangeListView( collection : @changes, diff --git a/services/web/public/coffee/track-changes/models/Change.coffee b/services/web/public/coffee/track-changes/models/Change.coffee index bd1913e67f..7e2d10315f 100644 --- a/services/web/public/coffee/track-changes/models/Change.coffee +++ b/services/web/public/coffee/track-changes/models/Change.coffee @@ -7,12 +7,20 @@ define [ model = { start_ts: change.meta.start_ts end_ts: change.meta.end_ts - fromVersion: change.fromV - toVersion: change.toV } model.users = [] for user in change.meta.users or [] model.users.push User.findOrBuild(user.id, user) if model.users.length == 0 model.users.push User.getAnonymousUser() + model.docs = [] + for doc_id, data of change.docs + model.docs.push + id: doc_id + fromV: data.fromV + toV: data.toV + # TODO: We should not use a global reference here, but + # it's hard to get @ide into Backbone at this point. + entity: ide.fileTreeManager.getEntity(doc_id) + return model \ No newline at end of file diff --git a/services/web/public/coffee/track-changes/models/ChangeList.coffee b/services/web/public/coffee/track-changes/models/ChangeList.coffee index 17902223d2..82fd84fef7 100644 --- a/services/web/public/coffee/track-changes/models/ChangeList.coffee +++ b/services/web/public/coffee/track-changes/models/ChangeList.coffee @@ -4,21 +4,29 @@ define [ ], (Change)-> ChangeList = Backbone.Collection.extend model: Change - batchSize: 25 + batchSize: 10 initialize: (models, @options) -> + @ide = @options.ide + @atEnd = false url: () -> - url = "/project/#{@options.project_id}/doc/#{@options.doc_id}/updates?limit=#{@batchSize}" - if @models.length > 0 - last = @models[@models.length - 1] - url += "&to=#{last.get("fromVersion") - 1}" + url = "/project/#{@options.project_id}/updates?min_count=#{@batchSize}" + if @nextBeforeTimestamp? + url += "&before=#{@nextBeforeTimestamp}" return url + isAtEnd: () -> @atEnd + parse: (json) -> + @nextBeforeTimestamp = json.nextBeforeTimestamp + @atEnd = !@nextBeforeTimestamp return json.updates fetchNextBatch: (options = {}) -> + if @isAtEnd() + options.success?(@) + return options.add = true @fetch options diff --git a/services/web/public/stylesheets/less/trackchanges.less b/services/web/public/stylesheets/less/trackchanges.less index 4c1afa70a5..13bd4525ee 100644 --- a/services/web/public/stylesheets/less/trackchanges.less +++ b/services/web/public/stylesheets/less/trackchanges.less @@ -126,10 +126,14 @@ min-height: 38px; } .change-name { - font-size: 0.9em; + font-size: 11px; color: #666; text-transform: capitalize; } + .change-date { + margin-top: 2px; + font-size: 12px; + } .color-square { display: inline-block; height: 10px; @@ -137,6 +141,9 @@ margin-right: 4px; margin-bottom: -1px; } + .changed-docs { + font-weight: bold; + } .restore { a { display: block;