From 7f8adf247e39838e6fdc0293833eab655a707cc0 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 27 Mar 2013 14:26:53 -0400 Subject: [PATCH] Show root view events when no element has focus Closes #327 --- .../lib/command-palette-view.coffee | 10 +++++++--- .../spec/command-palette-spec.coffee | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/packages/command-palette/lib/command-palette-view.coffee b/src/packages/command-palette/lib/command-palette-view.coffee index f8371efe7..34988e751 100644 --- a/src/packages/command-palette/lib/command-palette-view.coffee +++ b/src/packages/command-palette/lib/command-palette-view.coffee @@ -29,10 +29,14 @@ class CommandPaletteView extends SelectList attach: -> super - @keyBindings = _.losslessInvert(keymap.bindingsForElement(@previouslyFocusedElement)) + if @previouslyFocusedElement[0] + @eventElement = @previouslyFocusedElement + else + @eventElement = rootView + @keyBindings = _.losslessInvert(keymap.bindingsForElement(@eventElement)) events = [] - for eventName, eventDescription of _.extend($(window).events(), @previouslyFocusedElement.events()) + for eventName, eventDescription of _.extend($(window).events(), @eventElement.events()) events.push({eventName, eventDescription}) if eventDescription events = _.sortBy events, (e) -> e.eventDescription @@ -52,4 +56,4 @@ class CommandPaletteView extends SelectList confirmed: ({eventName}) -> @cancel() - @previouslyFocusedElement.trigger(eventName) + @eventElement.trigger(eventName) diff --git a/src/packages/command-palette/spec/command-palette-spec.coffee b/src/packages/command-palette/spec/command-palette-spec.coffee index 1cb533864..a0de19c61 100644 --- a/src/packages/command-palette/spec/command-palette-spec.coffee +++ b/src/packages/command-palette/spec/command-palette-spec.coffee @@ -81,3 +81,20 @@ describe "CommandPalette", -> expect(activeEditor.isFocused).toBeTruthy() expect(eventHandler).toHaveBeenCalled() expect(palette.hasParent()).toBeFalsy() + + describe "when no element has focus", -> + it "uses the root view as the element to display and trigger events for", -> + rootView.trigger 'command-palette:toggle' + $(':focus').blur() + rootView.trigger 'command-palette:toggle' + keyBindings = _.losslessInvert(keymap.bindingsForElement(rootView.getActiveView())) + for eventName, description of rootView.events() + eventLi = palette.list.children("[data-event-name='#{eventName}']") + if description + expect(eventLi).toExist() + expect(eventLi.find('.label')).toHaveText(description) + expect(eventLi.find('.label').attr('title')).toBe(eventName) + for binding in keyBindings[eventName] ? [] + expect(eventLi.find(".key-binding:contains(#{binding})")).toExist() + else + expect(eventLi).not.toExist()