From 1fa32c48e713c98a523aeb176057bb140ca89b26 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Thu, 4 Oct 2012 17:08:42 -0700 Subject: [PATCH] Invoke onEditor on each extension sub-class --- spec/extensions/editor-command-spec.coffee | 89 +++++++--------------- src/extensions/editor-command.coffee | 23 ++---- src/extensions/lowercase-command.coffee | 10 +-- src/extensions/uppercase-command.coffee | 10 +-- 4 files changed, 44 insertions(+), 88 deletions(-) diff --git a/spec/extensions/editor-command-spec.coffee b/spec/extensions/editor-command-spec.coffee index da584fb19..96b2f08ac 100644 --- a/spec/extensions/editor-command-spec.coffee +++ b/spec/extensions/editor-command-spec.coffee @@ -22,13 +22,12 @@ describe "EditorCommand", -> transformed = false edited = false class CustomCommand extends EditorCommand - @getKeymaps: (editor) -> - 'meta-V': 'custom' - @execute: (editor, event) -> - edited = @replaceSelectedText editor, (text) -> - transformed = true - 'new' + @onEditor: (editor) -> + @register editor, 'meta-V', 'custom', => + edited = @replaceSelectedText editor, (text) -> + transformed = true + 'new' CustomCommand.activate(rootView) editor.moveCursorToTop() @@ -41,13 +40,12 @@ describe "EditorCommand", -> transformed = false edited = false class CustomCommand extends EditorCommand - @getKeymaps: (editor) -> - 'meta-V': 'custom' - @execute: (editor, event) -> - edited = @replaceSelectedText editor, (text) -> - transformed = true - null + @onEditor: (editor) -> + @register editor, 'meta-V', 'custom', => + edited = @replaceSelectedText editor, (text) -> + transformed = true + null CustomCommand.activate(rootView) editor.moveCursorToTop() @@ -60,13 +58,12 @@ describe "EditorCommand", -> transformed = false edited = false class CustomCommand extends EditorCommand - @getKeymaps: (editor) -> - 'meta-V': 'custom' - @execute: (editor, event) -> - edited = @replaceSelectedText editor, (text) -> - transformed = true - undefined + @onEditor: (editor) -> + @register editor, 'meta-V', 'custom', => + edited = @replaceSelectedText editor, (text) -> + transformed = true + undefined CustomCommand.activate(rootView) editor.moveCursorToTop() @@ -78,12 +75,11 @@ describe "EditorCommand", -> describe "custom sub-class", -> it "removes vowels from selected text", -> class VowelRemover extends EditorCommand - @getKeymaps: (editor) -> - 'meta-V': 'devowel' - @execute: (editor, event) -> - @replaceSelectedText editor, (text) -> - text.replace(/[aeiouy]/gi, '') + @onEditor: (editor) -> + @register editor, 'meta-V', 'devowel', => + @replaceSelectedText editor, (text) -> + text.replace(/[aeiouy]/gi, '') VowelRemover.activate(rootView) editor.moveCursorToTop() @@ -95,12 +91,10 @@ describe "EditorCommand", -> it "maintains reversed selections", -> class VowelRemover extends EditorCommand - @getKeymaps: (editor) -> - 'meta-V': 'devowel' - - @execute: (editor, event) -> - @replaceSelectedText editor, (text) -> - text.replace(/[aeiouy]/gi, '') + @onEditor: (editor) -> + @register editor, 'meta-V', 'devowel', => + @replaceSelectedText editor, (text) -> + text.replace(/[aeiouy]/gi, '') VowelRemover.activate(rootView) editor.moveCursorToTop() @@ -114,13 +108,11 @@ describe "EditorCommand", -> it "doesn't transform empty selections", -> callbackCount = 0 class CustomCommand extends EditorCommand - @getKeymaps: (editor) -> - 'meta-V': 'custom' - - @execute: (editor, event) -> - @replaceSelectedText editor, (text) -> - callbackCount++ - text + @onEditor: (editor) -> + @register editor, 'meta-V', 'custom', => + @replaceSelectedText editor, (text) -> + callbackCount++ + text CustomCommand.activate(rootView) editor.moveCursorToTop() @@ -131,30 +123,6 @@ describe "EditorCommand", -> editor.trigger 'custom' expect(callbackCount).toBe 1 - it "registers all keymaps", -> - callbackCount = 0 - eventName = null - class CustomCommand extends EditorCommand - @getKeymaps: (editor) -> - 'meta-V': 'custom1' - 'meta-B': 'custom2' - - @execute: (editor, event) -> - eventName = event - @replaceSelectedText editor, (text) -> - callbackCount++ - text - - CustomCommand.activate(rootView) - editor.moveCursorToTop() - editor.selectToEndOfLine() - editor.trigger 'custom1' - expect(callbackCount).toBe 1 - expect(eventName).toBe 'custom1' - editor.trigger 'custom2' - expect(eventName).toBe 'custom2' - expect(callbackCount).toBe 2 - describe "LowerCaseCommand", -> it "replaces the selected text with all lower case characters", -> LowerCaseCommand.activate(rootView) @@ -163,7 +131,6 @@ describe "EditorCommand", -> editor.trigger 'lowercase' expect(editor.getTextInRange(editor.getSelection().getBufferRange())).toBe 'array' - describe "UpperCaseCommand", -> it "replaces the selected text with all upper case characters", -> UpperCaseCommand.activate(rootView) diff --git a/src/extensions/editor-command.coffee b/src/extensions/editor-command.coffee index 8f2e72ab8..e4a649d07 100644 --- a/src/extensions/editor-command.coffee +++ b/src/extensions/editor-command.coffee @@ -2,25 +2,18 @@ module.exports = class EditorCommand @activate: (rootView) -> - keymaps = @getKeymaps() - return unless keymaps - - window.keymap.bindKeys '.editor', keymaps - for editor in rootView.getEditors() - @subscribeToEditor(rootView, editor) + @onEditor(editor) rootView.on 'editor-open', (e, editor) => - @subscribeToEditor(rootView, editor) + @onEditor(editor) - @subscribeToEditor: (rootView, editor) -> - keymaps = @getKeymaps(rootView, editor) - return unless keymaps - - for key, event of keymaps - do (event) => - editor.on event, => - @execute(editor, event) + @register: (editor, key, event, callback) -> + binding = {} + binding[key] = event + window.keymap.bindKeys '.editor', binding + editor.on event, => + callback(editor, event) @replaceSelectedText: (editor, replace) -> selection = editor.getSelection() diff --git a/src/extensions/lowercase-command.coffee b/src/extensions/lowercase-command.coffee index 1dd6d7a33..7254fb72d 100644 --- a/src/extensions/lowercase-command.coffee +++ b/src/extensions/lowercase-command.coffee @@ -3,9 +3,7 @@ EditorCommand = require 'editor-command' module.exports = class LowerCaseCommand extends EditorCommand - @getKeymaps: (editor) -> - 'meta-Y': 'lowercase' - - @execute: (editor, event) -> - @replaceSelectedText editor, (text) -> - text.toLowerCase() + @onEditor: (editor) -> + @register editor, 'meta-Y', 'lowercase', => + @replaceSelectedText editor, (text) -> + text.toLowerCase() diff --git a/src/extensions/uppercase-command.coffee b/src/extensions/uppercase-command.coffee index a79b1969b..2096a91c9 100644 --- a/src/extensions/uppercase-command.coffee +++ b/src/extensions/uppercase-command.coffee @@ -3,9 +3,7 @@ EditorCommand = require 'editor-command' module.exports = class UpperCaseCommand extends EditorCommand - @getKeymaps: (editor) -> - 'meta-X': 'uppercase' - - @execute: (editor, event) -> - @replaceSelectedText editor, (text) -> - text.toUpperCase() + @onEditor: (editor) -> + @register editor, 'meta-X', 'uppercase', => + @replaceSelectedText editor, (text) -> + text.toUpperCase()