]> git.gir.st - VimFx.git/blob - extension/lib/main-frame.coffee
fix hintsmode clicking in ff56, squash some exceptions
[VimFx.git] / extension / lib / main-frame.coffee
1 # This file is the equivalent of main.coffee, but for frame scripts.
2
3 commands = require('./commands-frame')
4 config = require('./config')
5 createConfigAPI = require('./api-frame')
6 FrameEventManager = require('./events-frame')
7 messageManager = require('./message-manager')
8 prefs = require('./prefs')
9 VimFrame = require('./vim-frame')
10 # @if TESTS
11 test = require('../test/index')
12 # @endif
13
14 module.exports = ->
15 {content} = FRAME_SCRIPT_ENVIRONMENT
16 vim = new VimFrame(content)
17
18 eventManager = new FrameEventManager(vim)
19 eventManager.addListeners()
20 eventManager.sendFocusType({ignore: ['none']})
21
22 messageManager.listen('runCommand', ({name, data}, callback) ->
23 result = commands[name](Object.assign({vim}, data))
24 callback?(result)
25 )
26
27 shutdownHandlers = []
28 onShutdown = (fn) -> shutdownHandlers.push(fn)
29
30 loadConfig = ->
31 configDir = prefs.get('config_file_directory')
32 return null unless configDir
33 scope = {
34 vimfx: createConfigAPI(vim, onShutdown)
35 content
36 }
37 error = config.loadFile(configDir, 'frame.js', scope)
38 return error
39
40 # main.coffee cannot know when the 'loadConfig' listener below is ready, so
41 # run `loadConfig` manually on startup.
42 loadConfig()
43
44 messageManager.listen('loadConfig', (data, callback) ->
45 error = loadConfig()
46 callback(not error)
47 )
48
49 messageManager.listen('unloadConfig', ->
50 for shutdownHandler in shutdownHandlers
51 try
52 shutdownHandler()
53 catch error
54 console.error("VimFx: `vimfx.on('shutdown')` error in frame.js", error)
55 shutdownHandlers = []
56 )
57
58 # @if TESTS
59 messageManager.send('runTests', null, (ok) -> test(vim) if ok)
60 # @endif
Imprint / Impressum