diff --git a/assets/scripts/app/views/log.coffee b/assets/scripts/app/views/log.coffee index ac68ee1b..927fa88a 100644 --- a/assets/scripts/app/views/log.coffee +++ b/assets/scripts/app/views/log.coffee @@ -48,8 +48,8 @@ Travis.reopen console.log 'log view: create engine' if Log.DEBUG @scroll = new Log.Scroll @engine = Log.create(limit: Log.LIMIT, listeners: [@scroll]) - @lineSelector = new Travis.LinesSelector(@$().find('#log'), @scroll) @logFolder = new Travis.LogFolder(@$().find('#log')) + @lineSelector = new Travis.LinesSelector(@$().find('#log'), @scroll, @logFolder) @observeParts() observeParts: -> diff --git a/assets/scripts/lib/travis/lines_selector.coffee b/assets/scripts/lib/travis/lines_selector.coffee index ba4242cb..1f81002c 100644 --- a/assets/scripts/lib/travis/lines_selector.coffee +++ b/assets/scripts/lib/travis/lines_selector.coffee @@ -10,10 +10,12 @@ class Travis.LinesSelector element: null scroll: null location: null + view: null last_selected_line: null - constructor: (@element, @scroll, location) -> + constructor: (@element, @scroll, @folder, location) -> @location = location || @Location + Ember.run.scheduleOnce 'afterRender', this, -> @last_selected_line = @getSelectedLines()?.first @highlightLines() @@ -38,6 +40,13 @@ class Travis.LinesSelector if lines = @getSelectedLines() @element.find('p:visible').slice(lines.first - 1, lines.last).addClass('highlight') @scroll.tryScroll() + @unfoldLines() + + unfoldLines: -> + if lines = @getSelectedLines() + for index, l of lines + line = @element.find('p:visible').slice(l - 1, l) + @folder.unfold line setHashValueWithLine: (line, multiple) -> line_number = @getLineNumberFromElement(line) diff --git a/assets/scripts/lib/travis/log_folder.coffee b/assets/scripts/lib/travis/log_folder.coffee index 42506d3e..1d1bb1be 100644 --- a/assets/scripts/lib/travis/log_folder.coffee +++ b/assets/scripts/lib/travis/log_folder.coffee @@ -1,8 +1,24 @@ class Travis.LogFolder constructor: (@element) -> @element.on 'click', '.fold', (event) => - target = $(event.target).closest('.fold') - target.toggleClass('open') + folder = @getFolderFromLine $(event.target) + @toggle folder event.preventDefault() false + + fold: (line) -> + folder = @getFolderFromLine(line) + if folder.hasClass('open') + @toggle(folder) + + unfold: (line) -> + folder = @getFolderFromLine(line) + unless folder.hasClass('open') + @toggle(folder) + + toggle: (folder) -> + folder.toggleClass('open') + + getFolderFromLine: (line) -> + line.parent('.fold') diff --git a/assets/scripts/spec/unit/line_selector_spec.coffee b/assets/scripts/spec/unit/line_selector_spec.coffee index 04e882cf..93a5a7c3 100644 --- a/assets/scripts/spec/unit/line_selector_spec.coffee +++ b/assets/scripts/spec/unit/line_selector_spec.coffee @@ -7,6 +7,7 @@ fakeLocation = { fakeScroll = tryScroll: sinon.spy() +fakeFolder = {} element = jQuery('
fourth line