From eaaf6fc9f009d668b2189064d4e7d8591b46c919 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 1 Oct 2012 14:08:05 -1000 Subject: [PATCH] Add event-palette. Ctrl-enter brings up a list of all events for focused element No fuzzy finding just yet. This theme of a fuzzy-filterable list is common enough now that I think I want to extract it. We do it in the fuzzy-finder for buffers and files, as well as the autocomplete menu. --- spec/extensions/event-palette-spec.coffee | 21 ++++++++++++ .../event-palette/event-palette.coffee | 34 +++++++++++++++++++ .../event-palette/event-palette.css | 5 +++ src/extensions/event-palette/index.coffee | 1 + src/extensions/event-palette/keymap.coffee | 2 ++ 5 files changed, 63 insertions(+) create mode 100644 spec/extensions/event-palette-spec.coffee create mode 100644 src/extensions/event-palette/event-palette.coffee create mode 100644 src/extensions/event-palette/event-palette.css create mode 100644 src/extensions/event-palette/index.coffee create mode 100644 src/extensions/event-palette/keymap.coffee diff --git a/spec/extensions/event-palette-spec.coffee b/spec/extensions/event-palette-spec.coffee new file mode 100644 index 000000000..d96cda04a --- /dev/null +++ b/spec/extensions/event-palette-spec.coffee @@ -0,0 +1,21 @@ +RootView = require 'root-view' +EventPalette = require 'event-palette' +$ = require 'jquery' + +describe "EventPalette", -> + [rootView, palette] = [] + + beforeEach -> + rootView = new RootView(require.resolve('fixtures/sample.js')) + rootView.activateExtension(EventPalette) + palette = EventPalette.instance + + afterEach -> + rootView.remove() + + describe "when shown", -> + ffit "shows a list of all valid events for the previously focused element", -> + rootView.attachToDom().focus() + rootView.trigger 'event-palette:show' + for [event, description] in rootView.getActiveEditor().events() + expect(palette.eventList.find("td:contains(#{event})")).toExist() \ No newline at end of file diff --git a/src/extensions/event-palette/event-palette.coffee b/src/extensions/event-palette/event-palette.coffee new file mode 100644 index 000000000..5959c15f2 --- /dev/null +++ b/src/extensions/event-palette/event-palette.coffee @@ -0,0 +1,34 @@ +{View, $$} = require 'space-pen' +Editor = require 'editor' +$ = require 'jquery' + +module.exports = +class EventPalette extends View + @activate: (rootView) -> + requireStylesheet 'event-palette/event-palette.css' + @instance = new EventPalette(rootView) + rootView.on 'event-palette:show', => @instance.attach() + + @content: -> + @div class: 'event-palette', => + @div class: 'event-list', outlet: 'eventList' + @subview 'miniEditor', new Editor(mini: true) + + initialize: (@rootView) -> + + attach: -> + @previouslyFocusedElement = $(':focus') + console.log @pre + @populateEventList() + @appendTo(@rootView.vertical) + + populateEventList: -> + events = @previouslyFocusedElement.events() + table = $$ -> + @table => + for [event, description] in events + @tr => + @td event + @td description if description + + @eventList.html(table) diff --git a/src/extensions/event-palette/event-palette.css b/src/extensions/event-palette/event-palette.css new file mode 100644 index 000000000..a363a5f2b --- /dev/null +++ b/src/extensions/event-palette/event-palette.css @@ -0,0 +1,5 @@ +.event-palette .event-list { + max-height: 300px; + color: white; + overflow-y: auto; +} \ No newline at end of file diff --git a/src/extensions/event-palette/index.coffee b/src/extensions/event-palette/index.coffee new file mode 100644 index 000000000..7e31326a8 --- /dev/null +++ b/src/extensions/event-palette/index.coffee @@ -0,0 +1 @@ +module.exports = require 'event-palette/event-palette' \ No newline at end of file diff --git a/src/extensions/event-palette/keymap.coffee b/src/extensions/event-palette/keymap.coffee new file mode 100644 index 000000000..975f8592a --- /dev/null +++ b/src/extensions/event-palette/keymap.coffee @@ -0,0 +1,2 @@ +window.keymap.bindKeys 'body' + 'ctrl-enter': 'event-palette:show'