]> git.gir.st - VimFx.git/blob - extension/lib/main-frame.coffee
Use require instead of Cu.import for devtools (#924)
[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 scope = {vimfx: createConfigAPI(vim, onShutdown)}
33 error = config.loadFile(configDir, 'frame.js', scope)
34 return error
35
36 # main.coffee cannot know when the 'loadConfig' listener below is ready, so
37 # run `loadConfig` manually on startup.
38 loadConfig()
39
40 messageManager.listen('loadConfig', (data, callback) ->
41 error = loadConfig()
42 callback(not error)
43 )
44
45 messageManager.listen('unloadConfig', ->
46 for shutdownHandler in shutdownHandlers
47 try
48 shutdownHandler()
49 catch error
50 console.error("VimFx: `vimfx.on('shutdown')` error in frame.js", error)
51 shutdownHandlers = []
52 )
53
54 # @if TESTS
55 messageManager.send('runTests', null, (ok) -> test(vim) if ok)
56 # @endif
Imprint / Impressum