diff --git a/lib/bookmarks.coffee b/lib/bookmarks.coffee index 20e359b..232721c 100644 --- a/lib/bookmarks.coffee +++ b/lib/bookmarks.coffee @@ -17,6 +17,8 @@ class Bookmarks markerLayerOptions = if @editor.displayLayer? then {persistent: true} else {maintainHistory: true} @markerLayer ?= @editor.addMarkerLayer(markerLayerOptions) @decorationLayer = @editor.decorateMarkerLayer(@markerLayer, {type: 'line-number', class: 'bookmarked'}) + @decorationLayerLine = @editor.decorateMarkerLayer(@markerLayer, {type: 'line', class: 'bookmarked'}) + @decorationLayerHighlight = @editor.decorateMarkerLayer(@markerLayer, {type: 'highlight', class: 'bookmarked'}) @disposables.add @editor.onDidDestroy(@destroy.bind(this)) destroy: -> @@ -25,6 +27,8 @@ class Bookmarks deactivate: -> @decorationLayer.destroy() + @decorationLayerLine.destroy() + @decorationLayerHighlight.destroy() @disposables.dispose() serialize: -> diff --git a/spec/bookmarks-view-spec.coffee b/spec/bookmarks-view-spec.coffee index abab6e3..2056e29 100644 --- a/spec/bookmarks-view-spec.coffee +++ b/spec/bookmarks-view-spec.coffee @@ -7,6 +7,7 @@ describe "Bookmarks package", -> bookmarkedRangesForEditor = (editor) -> values(editor.decorationsStateForScreenRowRange(0, editor.getLastScreenRow())) .filter (decoration) -> decoration.properties.class is 'bookmarked' + .filter (decoration) -> decoration.properties.type is 'line-number' .map (decoration) -> decoration.screenRange beforeEach -> @@ -114,7 +115,7 @@ describe "Bookmarks package", -> atom.commands.dispatch editorElement, 'bookmarks:toggle-bookmark' expect(bookmarkedRangesForEditor(editor).length).toBe 0 - it "toggles proper classes on proper gutter row", -> + it "toggles proper classes on proper gutter, line row and highlight on point bookmark", -> editor.setCursorBufferPosition([3, 10]) expect(editorElement.shadowRoot.querySelectorAll('.bookmarked').length).toBe 0 @@ -122,35 +123,75 @@ describe "Bookmarks package", -> lines = [] waitsFor -> - lines = editorElement.shadowRoot.querySelectorAll('.bookmarked') + lines = editorElement.shadowRoot.querySelectorAll('.line-number.bookmarked') lines.length is 1 runs -> + expect(editorElement.shadowRoot.querySelectorAll('.highlight.bookmarked').length).toBe 0 + expect(editorElement.shadowRoot.querySelectorAll('.line.bookmarked').length).toBe 1 + expect(editorElement.shadowRoot.querySelectorAll('.line-number.bookmarked').length).toBe 1 expect(lines[0]).toHaveData("buffer-row", 3) atom.commands.dispatch editorElement, 'bookmarks:toggle-bookmark' waitsFor -> - editorElement.shadowRoot.querySelectorAll('.bookmarked').length is 0 + editorElement.shadowRoot.querySelectorAll('.line-number.bookmarked').length is 0 + + runs -> + expect(editorElement.shadowRoot.querySelectorAll('.highlight.bookmarked').length).toBe 0 + expect(editorElement.shadowRoot.querySelectorAll('.line.bookmarked').length).toBe 0 + expect(editorElement.shadowRoot.querySelectorAll('.line-number.bookmarked').length).toBe 0 + + it "toggles proper classes on proper gutter, line row and highlight on range bookmark", -> + editor.setSelectedBufferRanges([[[3, 5], [3, 10]]]) + expect(editorElement.shadowRoot.querySelectorAll('.bookmarked').length).toBe 0 + + atom.commands.dispatch editorElement, 'bookmarks:toggle-bookmark' + lines = [] + + waitsFor -> + lines = editorElement.shadowRoot.querySelectorAll('.line-number.bookmarked') + lines.length is 1 + + runs -> + expect(editorElement.shadowRoot.querySelectorAll('.highlight.bookmarked').length).toBe 1 + expect(editorElement.shadowRoot.querySelectorAll('.line.bookmarked').length).toBe 1 + expect(editorElement.shadowRoot.querySelectorAll('.line-number.bookmarked').length).toBe 1 + expect(lines[0]).toHaveData("buffer-row", 3) + atom.commands.dispatch editorElement, 'bookmarks:toggle-bookmark' + + waitsFor -> + editorElement.shadowRoot.querySelectorAll('.line-number.bookmarked').length is 0 + + runs -> + expect(editorElement.shadowRoot.querySelectorAll('.highlight.bookmarked').length).toBe 0 + expect(editorElement.shadowRoot.querySelectorAll('.line.bookmarked').length).toBe 0 + expect(editorElement.shadowRoot.querySelectorAll('.line-number.bookmarked').length).toBe 0 it "clears all bookmarks", -> editor.setCursorBufferPosition([3, 10]) atom.commands.dispatch editorElement, 'bookmarks:toggle-bookmark' waitsFor -> - editorElement.shadowRoot.querySelectorAll('.bookmarked').length is 1 + editorElement.shadowRoot.querySelectorAll('.line.bookmarked').length is 1 + waitsFor -> + editorElement.shadowRoot.querySelectorAll('.line-number.bookmarked').length is 1 runs -> editor.setCursorBufferPosition([5, 0]) atom.commands.dispatch editorElement, 'bookmarks:toggle-bookmark' waitsFor -> - editorElement.shadowRoot.querySelectorAll('.bookmarked').length is 2 + editorElement.shadowRoot.querySelectorAll('.line.bookmarked').length is 2 + waitsFor -> + editorElement.shadowRoot.querySelectorAll('.line-number.bookmarked').length is 2 runs -> atom.commands.dispatch editorElement, 'bookmarks:clear-bookmarks' waitsFor -> - editorElement.shadowRoot.querySelectorAll('.bookmarked').length is 0 + editorElement.shadowRoot.querySelectorAll('.line.bookmarked').length is 0 + waitsFor -> + editorElement.shadowRoot.querySelectorAll('.line-number.bookmarked').length is 0 describe "when a bookmark is invalidated", -> it "creates a marker when toggled", ->