From 7422f4378e2b30850eeea82b9076bd0f0d83f45e Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 10 Dec 2014 18:40:39 -0700 Subject: [PATCH] Add property filters to TextEditor::getDecorations methods This makes it much easier to write tests that inspect the state of decorations. --- spec/display-buffer-spec.coffee | 6 ++++++ src/display-buffer.coffee | 23 +++++++++++++--------- src/text-editor.coffee | 35 +++++++++++++++++++++++---------- 3 files changed, 45 insertions(+), 19 deletions(-) diff --git a/spec/display-buffer-spec.coffee b/spec/display-buffer-spec.coffee index 5f04a3df9..e20504e48 100644 --- a/spec/display-buffer-spec.coffee +++ b/spec/display-buffer-spec.coffee @@ -1085,6 +1085,12 @@ describe "DisplayBuffer", -> expect(oldProperties).toEqual decorationProperties expect(newProperties).toEqual type: 'gutter', class: 'two', id: decoration.id + describe "::getDecorations(properties)", -> + it "returns decorations matching the given optional properties", -> + expect(displayBuffer.getDecorations()).toEqual [decoration] + expect(displayBuffer.getDecorations(class: 'two').length).toEqual 0 + expect(displayBuffer.getDecorations(class: 'one').length).toEqual 1 + describe "::setScrollTop", -> beforeEach -> displayBuffer.manageScrollPosition = true diff --git a/src/display-buffer.coffee b/src/display-buffer.coffee index 2fec5c60a..edda951fb 100644 --- a/src/display-buffer.coffee +++ b/src/display-buffer.coffee @@ -883,23 +883,28 @@ class DisplayBuffer extends Model decorationForId: (id) -> @decorationsById[id] - getDecorations: -> + getDecorations: (propertyFilter) -> allDecorations = [] for markerId, decorations of @decorationsByMarkerId allDecorations = allDecorations.concat(decorations) if decorations? + if propertyFilter? + allDecorations = allDecorations.filter (decoration) -> + for key, value of propertyFilter + return false unless decoration.properties[key] is value + true allDecorations - getLineDecorations: -> - @getDecorations().filter (decoration) -> decoration.isType('line') + getLineDecorations: (propertyFilter) -> + @getDecorations(propertyFilter).filter (decoration) -> decoration.isType('line') - getGutterDecorations: -> - @getDecorations().filter (decoration) -> decoration.isType('gutter') + getGutterDecorations: (propertyFilter) -> + @getDecorations(propertyFilter).filter (decoration) -> decoration.isType('gutter') - getHighlightDecorations: -> - @getDecorations().filter (decoration) -> decoration.isType('highlight') + getHighlightDecorations: (propertyFilter) -> + @getDecorations(propertyFilter).filter (decoration) -> decoration.isType('highlight') - getOverlayDecorations: -> - @getDecorations().filter (decoration) -> decoration.isType('overlay') + getOverlayDecorations: (propertyFilter) -> + @getDecorations(propertyFilter).filter (decoration) -> decoration.isType('overlay') decorationsForScreenRowRange: (startScreenRow, endScreenRow) -> decorationsByMarkerId = {} diff --git a/src/text-editor.coffee b/src/text-editor.coffee index c210f3eef..29f50fd0f 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -1310,33 +1310,48 @@ class TextEditor extends Model # Extended: Get all decorations. # + # * `propertyFilter` (optional) An {Object} containing key value pairs that + # the returned decorations' properties must match. + # # Returns an {Array} of {Decoration}s. - getDecorations: -> - @displayBuffer.getDecorations() + getDecorations: (propertyFilter) -> + @displayBuffer.getDecorations(propertyFilter) # Extended: Get all decorations of type 'line'. # + # * `propertyFilter` (optional) An {Object} containing key value pairs that + # the returned decorations' properties must match. + # # Returns an {Array} of {Decoration}s. - getLineDecorations: -> - @displayBuffer.getLineDecorations() + getLineDecorations: (propertyFilter) -> + @displayBuffer.getLineDecorations(propertyFilter) # Extended: Get all decorations of type 'gutter'. # + # * `propertyFilter` (optional) An {Object} containing key value pairs that + # the returned decorations' properties must match. + # # Returns an {Array} of {Decoration}s. - getGutterDecorations: -> - @displayBuffer.getGutterDecorations() + getGutterDecorations: (propertyFilter) -> + @displayBuffer.getGutterDecorations(propertyFilter) # Extended: Get all decorations of type 'highlight'. # + # * `propertyFilter` (optional) An {Object} containing key value pairs that + # the returned decorations' properties must match. + # # Returns an {Array} of {Decoration}s. - getHighlightDecorations: -> - @displayBuffer.getHighlightDecorations() + getHighlightDecorations: (propertyFilter) -> + @displayBuffer.getHighlightDecorations(propertyFilter) # Extended: Get all decorations of type 'overlay'. # + # * `propertyFilter` (optional) An {Object} containing key value pairs that + # the returned decorations' properties must match. + # # Returns an {Array} of {Decoration}s. - getOverlayDecorations: -> - @displayBuffer.getOverlayDecorations() + getOverlayDecorations: (propertyFilter) -> + @displayBuffer.getOverlayDecorations(propertyFilter) decorationForId: (id) -> @displayBuffer.decorationForId(id)