diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/clipboard.coffee | 9 | ||||
| -rw-r--r-- | lib/dom_utils.coffee | 15 | ||||
| -rw-r--r-- | lib/handler_stack.coffee | 5 | ||||
| -rw-r--r-- | lib/keyboard_utils.coffee | 5 |
4 files changed, 25 insertions, 9 deletions
diff --git a/lib/clipboard.coffee b/lib/clipboard.coffee index 1d378e76..a9e2e82e 100644 --- a/lib/clipboard.coffee +++ b/lib/clipboard.coffee @@ -1,8 +1,9 @@ Clipboard = - _createTextArea: -> - textArea = document.createElement "textarea" + _createTextArea: (tagName = "textarea") -> + textArea = document.createElement tagName textArea.style.position = "absolute" textArea.style.left = "-100%" + textArea.contentEditable = "true" textArea # http://groups.google.com/group/chromium-extensions/browse_thread/thread/49027e7f3b04f68/f6ab2457dee5bf55 @@ -16,11 +17,11 @@ Clipboard = document.body.removeChild(textArea) paste: -> - textArea = @_createTextArea() + textArea = @_createTextArea "div" # Use a <div> so Firefox pastes rich text. document.body.appendChild(textArea) textArea.focus() document.execCommand("Paste") - value = textArea.value + value = textArea.innerText document.body.removeChild(textArea) value diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee index d8a5d203..67d5a44c 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -344,7 +344,7 @@ DomUtils = consumeKeyup: do -> handlerId = null - (event, callback = null) -> + (event, callback = null, suppressPropagation) -> unless event.repeat handlerStack.remove handlerId if handlerId? code = event.code @@ -353,15 +353,22 @@ DomUtils = keyup: (event) -> return handlerStack.continueBubbling unless event.code == code @remove() - DomUtils.suppressEvent event + if suppressPropagation + DomUtils.suppressPropagation event + else + DomUtils.suppressEvent event handlerStack.continueBubbling # We cannot track keyup events if we lose the focus. blur: (event) -> @remove() if event.target == window handlerStack.continueBubbling callback?() - @suppressEvent event - handlerStack.suppressEvent + if suppressPropagation + DomUtils.suppressPropagation event + handlerStack.suppressPropagation + else + DomUtils.suppressEvent event + handlerStack.suppressEvent # Polyfill for selection.type (which is not available in Firefox). getSelectionType: (selection = document.getSelection()) -> diff --git a/lib/handler_stack.coffee b/lib/handler_stack.coffee index 646ddfbd..a43fc356 100644 --- a/lib/handler_stack.coffee +++ b/lib/handler_stack.coffee @@ -57,7 +57,10 @@ class HandlerStack if result == @passEventToPage return true else if result == @suppressPropagation - DomUtils.suppressPropagation event + if type == "keydown" + DomUtils.consumeKeyup event, null, true + else + DomUtils.suppressPropagation event return false else if result == @restartBubbling return @bubbleEvent type, event diff --git a/lib/keyboard_utils.coffee b/lib/keyboard_utils.coffee index 70aa5a95..09623e50 100644 --- a/lib/keyboard_utils.coffee +++ b/lib/keyboard_utils.coffee @@ -36,6 +36,8 @@ KeyboardUtils = "" else if key of @keyNames @keyNames[key] + else if @isModifier event + "" # Don't resolve modifier keys. else if key.length == 1 key else @@ -70,6 +72,9 @@ KeyboardUtils = isPrintable: (event) -> @getKeyCharString(event)?.length == 1 + isModifier: (event) -> + event.key in ["Control", "Shift", "Alt", "OS", "AltGraph", "Meta"] + enUsTranslations: "Backquote": ["`", "~"] "Minus": ["-", "_"] |
