]> git.gir.st - VimFx.git/blob - extension/lib/button.coffee
fix linting error
[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} =
8 ChromeUtils.importESModule('resource:///modules/CustomizableUI.sys.mjs')
9
10 BUTTON_ID = 'VimFxButton'
11
12 injectButton = (vimfx) ->
13 CustomizableUI.createWidget({
14 id: BUTTON_ID
15 defaultArea: CustomizableUI.AREA_NAVBAR
16 label: 'VimFx'
17 tooltiptext: translate('button.tooltip.normal')
18 onCommand: (event) ->
19 button = event.originalTarget
20 window = button.ownerGlobal
21 return unless vim = vimfx.getCurrentVim(window)
22
23 helpVisible = help.getHelp(window)
24
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})
28
29 if vim.mode == 'normal' and not helpVisible
30 help.injectHelp(window, vimfx)
31 else
32 vim._enterMode('normal')
33 })
34 module.onShutdown(-> CustomizableUI.destroyWidget(BUTTON_ID))
35
36 vimfx.on('modeDisplayChange', ({vim}) ->
37 {window} = vim
38 # When the browser starts, the button might not be available yet.
39 return unless button = getButton(window)
40
41 tooltip =
42 if vim.mode == 'normal'
43 translate('button.tooltip.normal')
44 else
45 translate(
46 'button.tooltip.other_mode',
47 translate("mode.#{vim.mode}"),
48 translate('mode.normal')
49 )
50 button.setAttribute('tooltiptext', tooltip)
51 )
52
53 getButton = (window) -> window.document.getElementById(BUTTON_ID)
54
55 module.exports = {
56 injectButton
57 getButton
58 }
Imprint / Impressum