diff options
| -rw-r--r-- | content_scripts/ui_component.coffee | 11 | ||||
| -rw-r--r-- | pages/test_ui_component.coffee | 5 | ||||
| -rw-r--r-- | pages/test_ui_component.html | 1 | ||||
| -rw-r--r-- | pages/ui_component_server.coffee | 9 |
4 files changed, 21 insertions, 5 deletions
diff --git a/content_scripts/ui_component.coffee b/content_scripts/ui_component.coffee index c0889e7f..f47719e5 100644 --- a/content_scripts/ui_component.coffee +++ b/content_scripts/ui_component.coffee @@ -14,6 +14,8 @@ class UIComponent document.documentElement.appendChild @iframeElement @hide() + @addEventListener "message", handleHideMessage + # Open a port and pass it to the iframe via window.postMessage. openPort: -> messageChannel = new MessageChannel() @@ -30,6 +32,7 @@ class UIComponent handleMessage: (event) -> for listener in @messageEventListeners retVal = listener.call this, event + retVal ?= true return false unless retVal true @@ -60,7 +63,15 @@ class UIComponent hide: -> return unless @iframeElement? @iframeElement.setAttribute "style", @hideStyle + window.focus() @showing = false +handleHideMessage = (event) -> + if event.data == "hide" + @hide() + false + else + true + root = exports ? window root.UIComponent = UIComponent diff --git a/pages/test_ui_component.coffee b/pages/test_ui_component.coffee index 0156c8f2..b1d3625a 100644 --- a/pages/test_ui_component.coffee +++ b/pages/test_ui_component.coffee @@ -1,7 +1,2 @@ UIComponentServer.addEventListener "message", (event) -> document.body.innerHTML = event.data - -document.addEventListener "DOMContentLoaded", -> - document.addEventListener "keydown", (event) -> - # Close on any key. - console.log "How do I close myself?" diff --git a/pages/test_ui_component.html b/pages/test_ui_component.html index b8ad7475..06af346c 100644 --- a/pages/test_ui_component.html +++ b/pages/test_ui_component.html @@ -1,6 +1,7 @@ <html> <head> <title>Test</title> + <script type="text/javascript" src="../lib/keyboard_utils.js"></script> <script type="text/javascript" src="ui_component_server.js"></script> <script type="text/javascript" src="test_ui_component.js"></script> <link rel="stylesheet" type="text/css" href="../content_scripts/vimium.css" /> diff --git a/pages/ui_component_server.coffee b/pages/ui_component_server.coffee index 240233ed..3879cea0 100644 --- a/pages/ui_component_server.coffee +++ b/pages/ui_component_server.coffee @@ -7,11 +7,13 @@ window.addEventListener "message", (event) -> chrome.storage.local.get "iframeMessageSecret", ({iframeMessageSecret: secret}) -> return unless event.data == secret UIComponentServer.portOpen event.ports[0] + window.addEventListener "keydown", (event) -> UIComponentServer.keydownListener event window.removeEventListener "message", currentFunction # Stop listening for message events. UIComponentServer = ownerPagePort: null messageEventListeners: [] + exitOnEsc: true portOpen: (@ownerPagePort) -> @ownerPagePort.onmessage = (event) => @handleMessage event @@ -37,5 +39,12 @@ UIComponentServer = @messageEventListeners = @messageEventListeners.splice listenerIndex, 1 undefined + keydownListener: (event) -> + if @exitOnEsc and KeyboardUtils.isEscape event + @postMessage "hide" + false + else + true + root = exports ? window root.UIComponentServer = UIComponentServer |
