From a5a80448cb20f198656d62eafae8afba0a77e96b Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Fri, 21 Apr 2017 13:17:13 -0600 Subject: [PATCH] Add intersectsVisibleRowRange on TextEditorElement --- spec/text-editor-element-spec.js | 20 ++++++++++++++++++++ src/text-editor-element.js | 12 ++++++++++++ 2 files changed, 32 insertions(+) diff --git a/spec/text-editor-element-spec.js b/spec/text-editor-element-spec.js index 4a6655714..afa882320 100644 --- a/spec/text-editor-element-spec.js +++ b/spec/text-editor-element-spec.js @@ -309,6 +309,26 @@ describe('TextEditorElement', () => { }) ) + describe('::intersectsVisibleRowRange(start, end)', () => { + it('returns true if the given row range intersects the visible row range', async () => { + const element = buildTextEditorElement() + const editor = element.getModel() + editor.update({autoHeight: false}) + element.getModel().setText('x\n'.repeat(20)) + element.style.height = '120px' + await element.getNextUpdatePromise() + element.setScrollTop(80) + await element.getNextUpdatePromise() + expect(element.getVisibleRowRange()).toEqual([4, 11]) + + expect(element.intersectsVisibleRowRange(0, 4)).toBe(false) + expect(element.intersectsVisibleRowRange(0, 5)).toBe(true) + expect(element.intersectsVisibleRowRange(5, 8)).toBe(true) + expect(element.intersectsVisibleRowRange(11, 12)).toBe(false) + expect(element.intersectsVisibleRowRange(12, 13)).toBe(false) + }) + }) + describe('events', () => { let element = null diff --git a/src/text-editor-element.js b/src/text-editor-element.js index 0bcb60a09..947bf3a8e 100644 --- a/src/text-editor-element.js +++ b/src/text-editor-element.js @@ -295,6 +295,18 @@ class TextEditorElement extends HTMLElement { return this.getModel().getVisibleRowRange() } + intersectsVisibleRowRange (startRow, endRow) { + return !( + endRow <= this.getFirstVisibleScreenRow() || + this.getLastVisibleScreenRow() <= startRow + ) + } + + selectionIntersectsVisibleRowRange (selection) { + const {start, end} = selection.getScreenRange() + return this.intersectsVisibleRowRange(start.row, end.row + 1) + } + setFirstVisibleScreenColumn (column) { return this.getModel().setFirstVisibleScreenColumn(column) }