Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions lib/bookmarks.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -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: ->
Expand All @@ -25,6 +27,8 @@ class Bookmarks

deactivate: ->
@decorationLayer.destroy()
@decorationLayerLine.destroy()
@decorationLayerHighlight.destroy()
@disposables.dispose()

serialize: ->
Expand Down
53 changes: 47 additions & 6 deletions spec/bookmarks-view-spec.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -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 ->
Expand Down Expand Up @@ -114,43 +115,83 @@ 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

atom.commands.dispatch editorElement, 'bookmarks:toggle-bookmark'
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", ->
Expand Down