1 # This file creates VimFx’s toolbar button.
3 help = require('./help')
4 translate = require('./translate')
5 utils = require('./utils')
8 ChromeUtils.importESModule('resource:///modules/CustomizableUI.sys.mjs')
10 BUTTON_ID = 'VimFxButton'
12 injectButton = (vimfx) ->
13 CustomizableUI.createWidget({
15 defaultArea: CustomizableUI.AREA_NAVBAR
17 tooltiptext: translate('button.tooltip.normal')
19 button = event.originalTarget
20 window = button.ownerGlobal
21 return unless vim = vimfx.getCurrentVim(window)
23 helpVisible = help.getHelp(window)
25 # If we somehow have gotten stuck with `vim.focusType == 'editable'`,
26 # allow the buttton to reset to 'none'. (This also hides the help dialog.)
27 vimfx.modes.normal.commands.esc.run({vim})
29 if vim.mode == 'normal' and not helpVisible
30 help.injectHelp(window, vimfx)
32 vim._enterMode('normal')
34 module.onShutdown(-> CustomizableUI.destroyWidget(BUTTON_ID))
36 vimfx.on('modeDisplayChange', ({vim}) ->
38 # When the browser starts, the button might not be available yet.
39 return unless button = getButton(window)
42 if vim.mode == 'normal'
43 translate('button.tooltip.normal')
46 'button.tooltip.other_mode',
47 translate("mode.#{vim.mode}"),
48 translate('mode.normal')
50 button.setAttribute('tooltiptext', tooltip)
53 getButton = (window) -> window.document.getElementById(BUTTON_ID)