From c0686b6592ed859221d0207c62601907517c64d1 Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 20 Mar 2014 14:46:34 +0000 Subject: [PATCH 1/5] 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; From 9fa80ad757c89a7f8611173d6b59b044dcd98bca Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 20 Mar 2014 15:12:39 +0000 Subject: [PATCH 2/5] Load diff for selected doc --- .../track-changes/ChangeListView.coffee | 2 +- .../track-changes/TrackChangesManager.coffee | 40 ++++++++++++++++--- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/services/web/public/coffee/track-changes/ChangeListView.coffee b/services/web/public/coffee/track-changes/ChangeListView.coffee index 901df7e817..bdcc8d2da7 100644 --- a/services/web/public/coffee/track-changes/ChangeListView.coffee +++ b/services/web/public/coffee/track-changes/ChangeListView.coffee @@ -112,7 +112,7 @@ define [ view.setHoverUnselected() triggerChangeDiff: () -> - @trigger "change_diff", @collection.models[@selectedFromIndex], @collection.models[@selectedToIndex] + @trigger "change_diff", @selectedFromIndex, @selectedToIndex listShorterThanContainer: -> @$el.height() > @$(".change-list").height() diff --git a/services/web/public/coffee/track-changes/TrackChangesManager.coffee b/services/web/public/coffee/track-changes/TrackChangesManager.coffee index b63c9ecdd5..b87a94115f 100644 --- a/services/web/public/coffee/track-changes/TrackChangesManager.coffee +++ b/services/web/public/coffee/track-changes/TrackChangesManager.coffee @@ -49,8 +49,8 @@ define [ @changeListView.loadUntilFull (error) => @autoSelectDiff() - @changeListView.on "change_diff", (fromModel, toModel) => - @showDiff(fromModel, toModel) + @changeListView.on "change_diff", (fromIndex, toIndex) => + @showDiff(fromIndex, toIndex) @changeListView.on "restore", (change) => @restore(change) @@ -84,12 +84,20 @@ define [ @showDiff(fromChange, toChange) @changeListView.setSelectionRange(fromIndex, 0) - showDiff: (fromModel, toModel) -> + showDiff: (fromIndex, toIndex) -> + doc_id = @doc_id + + {from, to} = @_findDocVersionsRangeInSelection(doc_id, fromIndex, toIndex) + + if !from? or !to? + console.log "No diff, should probably just show latest version" + return + @diff = new Diff({ project_id: @project_id - doc_id: @doc_id - from: fromModel.get("fromVersion") - to: toModel.get("toVersion") + doc_id: doc_id + from: from + to: to }) if @diffView? @@ -100,6 +108,26 @@ define [ ) @diff.fetch() + _findDocVersionsRangeInSelection: (doc_id, fromIndex, toIndex) -> + from = null + to = null + + for change in @changes.models.slice(toIndex, fromIndex + 1) + console.log "considering change" + for doc in change.get("docs") + console.log "considering doc", doc.id, doc_id + if doc.id == doc_id + if from? and to? + from = Math.min(from, doc.fromV) + to = Math.max(to, doc.toV) + else + from = doc.fromV + to = doc.toV + break + console.log "Done", from, to + + return {from, to} + showEl: -> @ide.editor.hide() @$el.show() From b99eaecf826c37ff4794c1233377b1322eb21c52 Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 20 Mar 2014 15:30:04 +0000 Subject: [PATCH 3/5] Load history view using mainAreaManager --- .../web/public/coffee/editor/Editor.coffee | 7 ------ .../track-changes/TrackChangesManager.coffee | 22 ++++--------------- 2 files changed, 4 insertions(+), 25 deletions(-) diff --git a/services/web/public/coffee/editor/Editor.coffee b/services/web/public/coffee/editor/Editor.coffee index c7eb19d9d8..c74a85522d 100644 --- a/services/web/public/coffee/editor/Editor.coffee +++ b/services/web/public/coffee/editor/Editor.coffee @@ -351,10 +351,3 @@ define [ getCurrentDocId: () -> @current_doc_id - - show: () -> - $("#editor").show() - - hide: () -> - $("#editor").hide() - diff --git a/services/web/public/coffee/track-changes/TrackChangesManager.coffee b/services/web/public/coffee/track-changes/TrackChangesManager.coffee index b87a94115f..22f87f6cca 100644 --- a/services/web/public/coffee/track-changes/TrackChangesManager.coffee +++ b/services/web/public/coffee/track-changes/TrackChangesManager.coffee @@ -13,11 +13,9 @@ define [ constructor: (@ide) -> @project_id = window.userSettings.project_id @$el = $(@template) - $("#editorWrapper").append(@$el) - @hideEl() - - @ide.editor.on "change:doc", () => - @hideEl() + @ide.mainAreaManager.addArea + identifier: "trackChanges" + element: @$el @ide.editor.on "resize", () => @diffView?.resize() @@ -58,10 +56,9 @@ define [ if @diffView? @diffView.destroy() - @showEl() + @ide.mainAreaManager.change "trackChanges" hide: () -> - @hideEl() @ide.fileTreeManager.openDoc(@doc_id) autoSelectDiff: () -> @@ -113,9 +110,7 @@ define [ to = null for change in @changes.models.slice(toIndex, fromIndex + 1) - console.log "considering change" for doc in change.get("docs") - console.log "considering doc", doc.id, doc_id if doc.id == doc_id if from? and to? from = Math.min(from, doc.fromV) @@ -124,18 +119,9 @@ define [ from = doc.fromV to = doc.toV break - console.log "Done", from, to return {from, to} - showEl: -> - @ide.editor.hide() - @$el.show() - - hideEl: () -> - @ide.editor.show() - @$el.hide() - restore: (change) -> name = @ide.fileTreeManager.getNameOfEntityId(@doc_id) date = moment(change.get("start_ts")).format("Do MMM YYYY, h:mm:ss a") From 237f7386503434bd1a23c4c5b3caeb90cdf4c295 Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 20 Mar 2014 16:30:37 +0000 Subject: [PATCH 4/5] Allow changing between files while in diff view mode --- .../web/public/coffee/editor/Editor.coffee | 13 ++++ .../coffee/file-tree/FileTreeManager.coffee | 5 +- .../coffee/file-view/FileViewManager.coffee | 15 +++++ services/web/public/coffee/ide.coffee | 2 +- .../track-changes/ChangeListView.coffee | 16 ++--- .../track-changes/TrackChangesManager.coffee | 61 ++++++++++++++++--- .../public/stylesheets/less/trackchanges.less | 8 +-- 7 files changed, 94 insertions(+), 26 deletions(-) diff --git a/services/web/public/coffee/editor/Editor.coffee b/services/web/public/coffee/editor/Editor.coffee index c74a85522d..f05f7ed222 100644 --- a/services/web/public/coffee/editor/Editor.coffee +++ b/services/web/public/coffee/editor/Editor.coffee @@ -35,6 +35,8 @@ define [ identifier: "editor" element: @editorPanel @initializeEditor() + @bindToFileTreeEvents() + @enable() @loadingIndicator = $(@templates.loadingIndicator) @editorPanel.find("#editor").append(@loadingIndicator) @leftPanel = @editorPanel.find("#leftEditorPanel") @@ -42,6 +44,11 @@ define [ @initSplitView() @switchToFlatView() + bindToFileTreeEvents: () -> + @ide.fileTreeManager.on "open:doc", (doc_id, options = {}) => + if @enabled + @openDoc doc_id, options + initSplitView: () -> splitter = @editorPanel.find("#editorSplitter") options = @@ -351,3 +358,9 @@ define [ getCurrentDocId: () -> @current_doc_id + + enable: () -> + @enabled = true + + disable: () -> + @enabled = false diff --git a/services/web/public/coffee/file-tree/FileTreeManager.coffee b/services/web/public/coffee/file-tree/FileTreeManager.coffee index cdde12d21e..2dad0e329e 100644 --- a/services/web/public/coffee/file-tree/FileTreeManager.coffee +++ b/services/web/public/coffee/file-tree/FileTreeManager.coffee @@ -76,7 +76,7 @@ define [ openDoc: (doc, line) -> doc_id = doc.id or doc - @ide.editor.openDoc(doc_id, line: line) + @trigger "open:doc", doc_id, line: line @selectEntity(doc_id) $.localStorage "doc.open_id.#{@project_id}", doc_id @@ -86,8 +86,7 @@ define [ @openDoc(doc_id, line) openFile: (file) -> - @ide.mainAreaManager.change('file') - @ide.fileViewManager.showFile(file) + @trigger "open:file", file @selectEntity(file.id) openFolder: (folder) -> diff --git a/services/web/public/coffee/file-view/FileViewManager.coffee b/services/web/public/coffee/file-view/FileViewManager.coffee index 35af265735..4f414493b9 100644 --- a/services/web/public/coffee/file-view/FileViewManager.coffee +++ b/services/web/public/coffee/file-view/FileViewManager.coffee @@ -13,5 +13,20 @@ define [ @ide.layoutManager.on "resize", () => @view.onResize() @view.onResize() + @bindToFileTreeEvents() + @enable() + + bindToFileTreeEvents: () -> + @ide.fileTreeManager.on "open:file", (file) => + if @enabled + @showFile(file) + showFile: (file) -> + @ide.mainAreaManager.change('file') @view.setModel(file) + + enable: () -> + @enabled = true + + disable: () -> + @enabled = false diff --git a/services/web/public/coffee/ide.coffee b/services/web/public/coffee/ide.coffee index 5b6eb591a7..2a09dbe4ff 100644 --- a/services/web/public/coffee/ide.coffee +++ b/services/web/public/coffee/ide.coffee @@ -106,12 +106,12 @@ define [ @sideBarView = new SideBarManager(@, $("#sections")) selectElement = @sideBarView.selectElement mainAreaManager = @mainAreaManager = new MainAreaManager(@, $("#content")) + @fileTreeManager = new FileTreeManager(@) @editor = new Editor(@) @pdfManager = new PdfManager(@) if @userSettings.autoComplete @autoCompleteManager = new AutoCompleteManager(@) @spellingManager = new SpellingManager(@) - @fileTreeManager = new FileTreeManager(@) @fileUploadManager = new FileUploadManager(@) @searchManager = new SearchManager(@) @cursorManager = new CursorManager(@) diff --git a/services/web/public/coffee/track-changes/ChangeListView.coffee b/services/web/public/coffee/track-changes/ChangeListView.coffee index bdcc8d2da7..348b5fbe9b 100644 --- a/services/web/public/coffee/track-changes/ChangeListView.coffee +++ b/services/web/public/coffee/track-changes/ChangeListView.coffee @@ -243,20 +243,20 @@ define [ @$(".change-selector-to").prop("checked", checked) setSelected: (first, last) -> - @$el.addClass("selected") + @$el.addClass("selected-change") if first - @$el.addClass("selected-to") + @$el.addClass("selected-change-to") else - @$el.removeClass("selected-to") + @$el.removeClass("selected-change-to") if last - @$el.addClass("selected-from") + @$el.addClass("selected-change-from") else - @$el.removeClass("selected-from") + @$el.removeClass("selected-change-from") setUnselected: () -> - @$el.removeClass("selected-to") - @$el.removeClass("selected-from") - @$el.removeClass("selected") + @$el.removeClass("selected-change-to") + @$el.removeClass("selected-change-from") + @$el.removeClass("selected-change") setHoverSelected: (first, last) -> @$el.addClass("hover-selected") diff --git a/services/web/public/coffee/track-changes/TrackChangesManager.coffee b/services/web/public/coffee/track-changes/TrackChangesManager.coffee index 22f87f6cca..4c12a2b4ec 100644 --- a/services/web/public/coffee/track-changes/TrackChangesManager.coffee +++ b/services/web/public/coffee/track-changes/TrackChangesManager.coffee @@ -24,6 +24,16 @@ define [ e.preventDefault @hide() + @bindToFileTreeEvents() + + @disable() + + bindToFileTreeEvents: () -> + @ide.fileTreeManager.on "open:doc", (doc_id) => + if @enabled + @doc_id = doc_id + @updateDiff() + @ide.fileTreeManager.on "contextmenu:beforeshow", (entity, entries) => if entity instanceof Doc entries.push { @@ -31,12 +41,11 @@ define [ }, { text: "History" onClick: () => - @show(entity.id) + @doc_id = entity.id + @show() } - show: (@doc_id) -> - @ide.fileTreeManager.selectEntity(@doc_id) - + show: () -> @changes = new ChangeList([], project_id: @project_id, ide: @ide) @changeListView = new ChangeListView( @@ -48,7 +57,7 @@ define [ @autoSelectDiff() @changeListView.on "change_diff", (fromIndex, toIndex) => - @showDiff(fromIndex, toIndex) + @selectDocAndUpdateDiff(fromIndex, toIndex) @changeListView.on "restore", (change) => @restore(change) @@ -57,9 +66,16 @@ define [ @diffView.destroy() @ide.mainAreaManager.change "trackChanges" + @ide.editor.disable() + @ide.fileViewManager.disable() + @enable() hide: () -> + @ide.editor.enable() + @ide.fileViewManager.enable() + @disable() @ide.fileTreeManager.openDoc(@doc_id) + @ide.mainAreaManager.change "editor" autoSelectDiff: () -> if @changes.models.length == 0 @@ -78,13 +94,29 @@ define [ toChange = @changes.models[0] fromChange = @changes.models[fromIndex] - @showDiff(fromChange, toChange) @changeListView.setSelectionRange(fromIndex, 0) + @updateDiff() - showDiff: (fromIndex, toIndex) -> - doc_id = @doc_id + selectDocAndUpdateDiff: (fromIndex, toIndex) -> + doc_ids = [] + for change in @changes.models.slice(toIndex, fromIndex + 1) + for doc in change.get("docs") or [] + doc_ids.push doc.id if doc.id not in doc_ids - {from, to} = @_findDocVersionsRangeInSelection(doc_id, fromIndex, toIndex) + if !@doc_id? or @doc_id not in doc_ids + @doc_id = doc_ids[0] + + @updateDiff() + + updateDiff: () -> + fromIndex = @changeListView.selectedFromIndex + toIndex = @changeListView.selectedToIndex + + if !toIndex? or !fromIndex? + console.log "No selection - what should we do!?" + return + + {from, to} = @_findDocVersionsRangeInSelection(@doc_id, fromIndex, toIndex) if !from? or !to? console.log "No diff, should probably just show latest version" @@ -92,7 +124,7 @@ define [ @diff = new Diff({ project_id: @project_id - doc_id: doc_id + doc_id: @doc_id from: from to: to }) @@ -105,6 +137,9 @@ define [ ) @diff.fetch() + @ide.fileTreeManager.selectEntity(@doc_id) + + _findDocVersionsRangeInSelection: (doc_id, fromIndex, toIndex) -> from = null to = null @@ -155,4 +190,10 @@ define [ callback(error) } + enable: () -> + @enabled = true + + disable: () -> + @enabled = false + return TrackChangesManager diff --git a/services/web/public/stylesheets/less/trackchanges.less b/services/web/public/stylesheets/less/trackchanges.less index 13bd4525ee..a7d0455f2c 100644 --- a/services/web/public/stylesheets/less/trackchanges.less +++ b/services/web/public/stylesheets/less/trackchanges.less @@ -160,7 +160,7 @@ li.loading-changes, li.empty-message { padding: 6px; } - li.selected { + li.selected-change { background-color: #eaeaea; .change-selectors { .range { @@ -168,7 +168,7 @@ } } } - li.selected-to { + li.selected-change-to { .change-selectors { .range { top: 10px; @@ -178,7 +178,7 @@ } } } - li.selected-from { + li.selected-change-from { .change-selectors { .range { bottom: 37px; @@ -230,7 +230,7 @@ } } } - li.selected-from.hover-selected-from { + li.selected-change-from.hover-selected-from { .change-selectors { .range { bottom: 37px; From 70da673bed08b0444c9dea4e8f6a01cbe1ac0d0d Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 20 Mar 2014 16:45:39 +0000 Subject: [PATCH 5/5] Move track changes activation into old history place --- services/web/public/coffee/ide.coffee | 3 ++- .../web/public/coffee/ide/TabManager.coffee | 22 +++++++++++++++---- .../track-changes/TrackChangesManager.coffee | 19 +++++++--------- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/services/web/public/coffee/ide.coffee b/services/web/public/coffee/ide.coffee index 2a09dbe4ff..a844fb2a5b 100644 --- a/services/web/public/coffee/ide.coffee +++ b/services/web/public/coffee/ide.coffee @@ -119,6 +119,8 @@ define [ @analyticsManager = new AnalyticsManager(@) if @userSettings.trackChanges @trackChangesManager = new TrackChangesManager(@) + else + @historyManager = new HistoryManager(@) @setLoadingMessage("Connecting") firstConnect = true @@ -186,7 +188,6 @@ define [ _.extend(Ide::, Backbone.Events) window.ide = ide = new Ide() - ide.historyManager = new HistoryManager ide ide.projectMembersManager = new ProjectMembersManager ide ide.settingsManager = new SettingsManager ide ide.helpManager = new HelpManager ide diff --git a/services/web/public/coffee/ide/TabManager.coffee b/services/web/public/coffee/ide/TabManager.coffee index a5b3748a5e..bd82376a38 100644 --- a/services/web/public/coffee/ide/TabManager.coffee +++ b/services/web/public/coffee/ide/TabManager.coffee @@ -12,26 +12,39 @@ define [ @state = "closed" $("#toolbar").on "mouseenter", () => @onMouseOver() $("#toolbar").on "mouseleave", (e) => @onMouseOut(e) + @tabs = [] addTab: (options) -> + @tabs.push options + tabEl = $(Mustache.to_html @templates.tab, options) tabEl.find("a").attr("href", "#" + options.id) - contentEl = $(Mustache.to_html @templates.content, options) - contentEl.append(options.content) + + if options.content? + contentEl = $(Mustache.to_html @templates.content, options) + contentEl.append(options.content) + $("#tab-content").append(contentEl) if options.active tabEl.addClass("active") - contentEl.addClass("active") + contentEl?.addClass("active") if options.after? tabEl.insertAfter($("##{options.after}-tab-li")) else $("#tabs").append(tabEl) - $("#tab-content").append(contentEl) + $("body").scrollTop(0) tabEl.on "shown", () => $("body").scrollTop(0) + options.onShown() if options.onShown? + for other_tab in @tabs + if other_tab.id != options.id and other_tab.active and other_tab.onHidden? + other_tab.onHidden() + other_tab.active = false + options.active = true + if options.lock @lockOpen() else @@ -40,6 +53,7 @@ define [ if options.contract @contract() + lockOpen: () -> @locked_open = true $("#toolbar").css({ diff --git a/services/web/public/coffee/track-changes/TrackChangesManager.coffee b/services/web/public/coffee/track-changes/TrackChangesManager.coffee index 4c12a2b4ec..52a4f2a4fa 100644 --- a/services/web/public/coffee/track-changes/TrackChangesManager.coffee +++ b/services/web/public/coffee/track-changes/TrackChangesManager.coffee @@ -17,6 +17,14 @@ define [ identifier: "trackChanges" element: @$el + @ide.tabManager.addTab + id: "history" + name: "History" + after: "code" + contract: true + onShown: () => @show() + onHidden: () => @hide() + @ide.editor.on "resize", () => @diffView?.resize() @@ -34,17 +42,6 @@ define [ @doc_id = doc_id @updateDiff() - @ide.fileTreeManager.on "contextmenu:beforeshow", (entity, entries) => - if entity instanceof Doc - entries.push { - divider: true - }, { - text: "History" - onClick: () => - @doc_id = entity.id - @show() - } - show: () -> @changes = new ChangeList([], project_id: @project_id, ide: @ide)