From a1c2e1bb66b81f7eee41f23480b5f6286068e97a Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 19 Jan 2015 11:57:16 -0700 Subject: [PATCH] =?UTF-8?q?Update=20TextEditorPresenter=20when=20the=20edi?= =?UTF-8?q?tor=E2=80=99s=20content=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/text-editor-presenter-spec.coffee | 27 ++++++++++++++++++++++++++ src/text-editor-presenter.coffee | 10 ++++++++++ 2 files changed, 37 insertions(+) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 545eedcd3..c6f1e8feb 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -197,3 +197,30 @@ describe "TextEditorPresenter", -> } expect(presenter.state.lines[line5.id]).toBeUndefined() + + describe "when the editor's content changes", -> + it "updates the lines state accordingly", -> + presenter = new TextEditorPresenter(model: editor, clientHeight: 25, scrollTop: 10, lineHeight: 10, lineOverdrawMargin: 0) + + buffer.insert([2, 0], "hello\nworld\n") + + line1 = editor.tokenizedLineForScreenRow(1) + expectValues presenter.state.lines[line1.id], { + screenRow: 1 + tokens: line1.tokens + top: 10 * 1 + } + + line2 = editor.tokenizedLineForScreenRow(2) + expectValues presenter.state.lines[line2.id], { + screenRow: 2 + tokens: line2.tokens + top: 10 * 2 + } + + line3 = editor.tokenizedLineForScreenRow(3) + expectValues presenter.state.lines[line3.id], { + screenRow: 3 + tokens: line3.tokens + top: 10 * 3 + } diff --git a/src/text-editor-presenter.coffee b/src/text-editor-presenter.coffee index c3f213033..0e1ce662e 100644 --- a/src/text-editor-presenter.coffee +++ b/src/text-editor-presenter.coffee @@ -1,9 +1,19 @@ +{CompositeDisposable} = require 'event-kit' + module.exports = class TextEditorPresenter constructor: ({@model, @clientHeight, @scrollTop, @lineHeight, @lineOverdrawMargin}) -> + @disposables = new CompositeDisposable @state = {} + @subscribeToModel() @buildLinesState() + destroy: -> + @disposables.dispose() + + subscribeToModel: -> + @disposables.add @model.onDidChange(@updateLinesState.bind(this)) + buildLinesState: -> @state.lines = {} @updateLinesState()