]> git.gir.st - VimFx.git/blob - packages/event-handlers.coffee
hints are finally showing up on the pages. currently they are displayed for all the...
[VimFx.git] / packages / event-handlers.coffee
1 utils = require 'utils'
2 { getCommand } = require 'commands'
3 { Vim } = require 'vim'
4
5 { interfaces: Ci } = Components
6
7 KeyboardEvent = Ci.nsIDOMKeyEvent
8
9 vimBucket = new utils.Bucket utils.getWindowId, (obj) -> new Vim obj
10
11 class KeyInfo
12 constructor: (event) ->
13 if event.charCode > 0
14 @key = String.fromCharCode(event.charCode)
15 else
16 switch event.keyCode
17 when KeyboardEvent.DOM_VK_ESCAPE then @key = 'Esc'
18 when KeyboardEvent.DOM_VK_TAB then @key = 'Tab'
19
20 @shift = event.shiftKey
21 @alt = event.altKey
22 @ctrl = event.ctrlKey
23 @meta = event.metaKey
24
25 isValid: -> @key
26
27 toString: ->
28 k = (a, b) -> if a then b else ''
29 if @at or @ctrl or @meta
30 "<#{ k(@ctrl, 'c') }#{ k(@alt, 'a') }#{ k(@meta, 'm') }-#{ @key }>"
31 else
32 @key
33
34 suppressEvent = (event) ->
35 event.preventDefault()
36 event.stopPropagation()
37
38 handlers =
39 'keypress': (event) ->
40 try
41 isEditable = utils.isElementEditable event.originalTarget
42 if event.keyCode == KeyboardEvent.DOM_VK_ESCAPE or not isEditable
43 if window = utils.getEventTabWindow event
44 keyInfo = new KeyInfo event
45 if keyInfo.isValid()
46 console.log event.keyCode, event.which, event.charCode, keyInfo.toString()
47 if vimBucket.get(window)?.keypress keyInfo
48 suppressEvent event
49 catch err
50 console.log err
51
52
53 'focus': (event) ->
54 if window = utils.getEventTabWindow event
55 vimBucket.get(window)?.focus event.originalTarget
56
57 'blur': (event) ->
58 if window = utils.getEventTabWindow event
59 vimBucket.get(window)?.blur event.originalTarget
60
61 'TabClose': (event) ->
62 if gBrowser = utils.getEventTabBrowser event
63 if browser = gBrowser.getBrowserForTab event.originalTarget
64 vimBucket.forget browser.contentWindow.wrappedJSObject
65
66 'DOMWindowClose': (event) ->
67 if gBrowser = event.originalTarget.gBrowser
68 for tab in gBrowser.tabs
69 if browser = gBrowser.getBrowserForTab tab
70 vimBucket.forget browser.contentWindow.wrappedJSObject
71
72 exports.handlers = handlers
Imprint / Impressum