]> git.gir.st - VimFx.git/blob - extension/lib/button.coffee
move from deprecated Cu.import to ChromeUtils.import
[VimFx.git] / extension / lib / button.coffee
1 # This file creates VimFx’s toolbar button.
2
3 help = require('./help')
4 translate = require('./translate')
5 utils = require('./utils')
6
7 {CustomizableUI} = ChromeUtils.import('resource:///modules/CustomizableUI.jsm')
8
9 BUTTON_ID = 'VimFxButton'
10
11 injectButton = (vimfx) ->
12 CustomizableUI.createWidget({
13 id: BUTTON_ID
14 defaultArea: CustomizableUI.AREA_NAVBAR
15 label: 'VimFx'
16 tooltiptext: translate('button.tooltip.normal')
17 onCommand: (event) ->
18 button = event.originalTarget
19 window = button.ownerGlobal
20 return unless vim = vimfx.getCurrentVim(window)
21
22 helpVisible = help.getHelp(window)
23
24 # If we somehow have gotten stuck with `vim.focusType == 'editable'`,
25 # allow the buttton to reset to 'none'. (This also hides the help dialog.)
26 vimfx.modes.normal.commands.esc.run({vim})
27
28 if vim.mode == 'normal' and not helpVisible
29 help.injectHelp(window, vimfx)
30 else
31 vim._enterMode('normal')
32 })
33 module.onShutdown(-> CustomizableUI.destroyWidget(BUTTON_ID))
34
35 vimfx.on('modeDisplayChange', ({vim}) ->
36 {window} = vim
37 # When the browser starts, the button might not be available yet.
38 return unless button = getButton(window)
39
40 tooltip =
41 if vim.mode == 'normal'
42 translate('button.tooltip.normal')
43 else
44 translate(
45 'button.tooltip.other_mode',
46 translate("mode.#{vim.mode}"),
47 translate('mode.normal')
48 )
49 button.setAttribute('tooltiptext', tooltip)
50 )
51
52 getButton = (window) -> window.document.getElementById(BUTTON_ID)
53
54 module.exports = {
55 injectButton
56 getButton
57 }
Imprint / Impressum