Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit 4be3497

Browse files
author
Antonio Scandurra
committed
Introduce MarkerLayer.prototype.getLastMarker()
1 parent 890862f commit 4be3497

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

spec/marker-layer-spec.coffee

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,26 @@ describe "MarkerLayer", ->
7575
expect(createEventCount).toBe 1
7676
expect(updateEventCount).toBe 2
7777

78+
describe "::getLastMarker()", ->
79+
it "returns the last (in terms of time) non-destroyed marker added to the layer", ->
80+
marker1 = layer1.markRange([[0, 0], [0, 3]])
81+
marker2 = layer1.markRange([[0, 2], [0, 6]])
82+
marker3 = layer1.markRange([[0, 8], [0, 10]])
83+
marker4 = layer1.markRange([[1, 0], [1, 10]])
84+
expect(layer1.getLastMarker()).toBe(marker4)
85+
86+
marker4.destroy()
87+
expect(layer1.getLastMarker()).toBe(marker3)
88+
89+
marker1.destroy()
90+
expect(layer1.getLastMarker()).toBe(marker3)
91+
92+
marker3.destroy()
93+
expect(layer1.getLastMarker()).toBe(marker2)
94+
95+
marker2.destroy()
96+
expect(layer1.getLastMarker()).toBeFalsy()
97+
7898
describe "when destroyInvalidatedMarkers is enabled for the layer", ->
7999
it "destroys markers when they are invalidated via a splice", ->
80100
layer3 = buffer.addMarkerLayer(destroyInvalidatedMarkers: true)

src/display-marker-layer.coffee

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,12 @@ class DisplayMarkerLayer
236236
getMarkers: ->
237237
@bufferMarkerLayer.getMarkers().map ({id}) => @getMarker(id)
238238

239+
# Public: Get the last (in terms of time) non-destroyed marker added to this layer.
240+
#
241+
# Returns a {DisplayMarker}.
242+
getLastMarker: ->
243+
@getMarker(@bufferMarkerLayer.getLastMarker()?.id)
244+
239245
# Public: Get the number of markers in the marker layer.
240246
#
241247
# Returns a {Number}.

src/marker-layer.coffee

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ class MarkerLayer
8181
getMarker: (id) ->
8282
@markersById.get(id)
8383

84+
# Public: Get the last (in terms of time) non-destroyed marker added to this layer.
85+
#
86+
# Returns a {Marker}.
87+
getLastMarker: ->
88+
@getMarker(@markers[@markers.length - 1])
89+
8490
# Public: Get all existing markers on the marker layer.
8591
#
8692
# Returns an {Array} of {Marker}s.
@@ -334,6 +340,8 @@ class MarkerLayer
334340
destroyMarker: (id) ->
335341
if @markersById.has(id)
336342
@markersById.delete(id)
343+
index = @indexForMarkerId(id)
344+
@markers.splice(index, 1) if index isnt -1
337345
@markersIdsWithChangeSubscriptions.delete(id)
338346
@index.delete(id)
339347
@destroyedMarkers.add(id)
@@ -382,8 +390,22 @@ class MarkerLayer
382390
@index.insert(id, range.start, range.end)
383391
marker = new Marker(id, this, range, params)
384392
@markersById.set(id, marker)
393+
@markers.push(id)
385394
marker
386395

396+
indexForMarkerId: (id) ->
397+
low = 0
398+
high = @markers.length - 1
399+
while low <= high
400+
index = low + ((high - low) >> 1)
401+
if id < @markers[index]
402+
high = index - 1
403+
else if id is @markers[index]
404+
return index
405+
else
406+
low = index + 1
407+
-1
408+
387409
setDisableDidUpdateEvent: (@didUpdateEventDisabled) ->
388410

389411
emitDidUpdateEvent: ->

0 commit comments

Comments
 (0)