From ce90cbc0ce44dfceabb47444e145246d6ee17304 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 8 Feb 2012 13:50:35 -0700 Subject: [PATCH] Extract EventEmitter mixin --- src/atom/buffer.coffee | 10 ++-------- src/atom/event-emitter.coffee | 8 ++++++++ src/atom/highlighter.coffee | 9 ++------- src/atom/line-wrapper.coffee | 7 +++++++ 4 files changed, 19 insertions(+), 15 deletions(-) create mode 100644 src/atom/event-emitter.coffee diff --git a/src/atom/buffer.coffee b/src/atom/buffer.coffee index 15bee5528..ecf6ecfa3 100644 --- a/src/atom/buffer.coffee +++ b/src/atom/buffer.coffee @@ -1,6 +1,7 @@ _ = require 'underscore' fs = require 'fs' Range = require 'range' +EventEmitter = require 'event-emitter' module.exports = class Buffer @@ -90,14 +91,6 @@ class Buffer if not @path then throw new Error("Tried to save buffer with no url") fs.write @path, @getText() - on: (eventName, handler) -> - @eventHandlers ?= {} - @eventHandlers[eventName] ?= [] - @eventHandlers[eventName].push(handler) - - trigger: (eventName, event) -> - @eventHandlers?[eventName]?.forEach (handler) -> handler(event) - modeName: -> extension = if @path then @path.split('/').pop().split('.').pop() else null switch extension @@ -109,3 +102,4 @@ class Buffer when 'css' then 'css' else 'text' +_.extend(Buffer.prototype, EventEmitter) diff --git a/src/atom/event-emitter.coffee b/src/atom/event-emitter.coffee new file mode 100644 index 000000000..07038d2ec --- /dev/null +++ b/src/atom/event-emitter.coffee @@ -0,0 +1,8 @@ +module.exports = + on: (eventName, handler) -> + @eventHandlers ?= {} + @eventHandlers[eventName] ?= [] + @eventHandlers[eventName].push(handler) + + trigger: (eventName, event) -> + @eventHandlers?[eventName]?.forEach (handler) -> handler(event) diff --git a/src/atom/highlighter.coffee b/src/atom/highlighter.coffee index 84ad5f805..51bf7105c 100644 --- a/src/atom/highlighter.coffee +++ b/src/atom/highlighter.coffee @@ -1,4 +1,5 @@ _ = require 'underscore' +EventEmitter = require 'event-emitter' module.exports = class Highlighter @@ -59,10 +60,4 @@ class Highlighter tokensForRow: (row) -> @lines[row].tokens - on: (eventName, handler) -> - @eventHandlers ?= {} - @eventHandlers[eventName] ?= [] - @eventHandlers[eventName].push(handler) - - trigger: (eventName, event) -> - @eventHandlers?[eventName]?.forEach (handler) -> handler(event) +_.extend(Highlighter.prototype, EventEmitter) diff --git a/src/atom/line-wrapper.coffee b/src/atom/line-wrapper.coffee index 6d9328fbc..46c5d367f 100644 --- a/src/atom/line-wrapper.coffee +++ b/src/atom/line-wrapper.coffee @@ -1,4 +1,7 @@ +_ = require 'underscore' Point = require 'point' +EventEmitter = require 'event-emitter' + getWordRegex = -> /\b[^\s]+/g module.exports = @@ -6,6 +9,8 @@ class LineWrapper constructor: (@maxLength, @highlighter) -> @buffer = @highlighter.buffer @buildWrappedLines() + @highlighter.on 'change', (e) => + @wrappedLines[e.oldRange.start.row] = @buildWrappedLineForBufferRow(e.newRange.start.row) setMaxLength: (@maxLength) -> @buildWrappedLines() @@ -83,3 +88,5 @@ class LineWrapper for screenLine in wrappedLine.screenLines return screenLine if currentScreenRow == screenRow currentScreenRow++ + +_.extend(LineWrapper.prototype, EventEmitter)