]> git.gir.st - VimFx.git/blob - extension/bootstrap.coffee
Merge pull request #219 from lydell/simpler-dom
[VimFx.git] / extension / bootstrap.coffee
1 'use strict'
2
3 { classes: Cc, interfaces: Ci, utils: Cu } = Components
4
5 Cu.import('resource://gre/modules/Services.jsm')
6
7 # Populate the global namespace with console, require, and include
8 do (global = this) ->
9 loader = Cc['@mozilla.org/moz/jssubscript-loader;1'].getService(Ci.mozIJSSubScriptLoader)
10 baseURI = Services.io.newURI(__SCRIPT_URI_SPEC__, null, null)
11
12 # Loaded packages cache
13 packages = {}
14
15 # Load and cache package
16 require = (name) ->
17 if packages[name] is undefined
18 scope = { require, exports: {} }
19 try
20 path = Services.io.newURI("packages/#{ name }.js", null, baseURI).spec
21 loader.loadSubScript(path, scope)
22 packages[name] = scope.exports
23 catch error
24 dump("Failed to load #{ name }: #{ error }\n")
25 dump(error.stack)
26
27 return packages[name]
28
29 # Unload all packages
30 release = ->
31 for path, scope in packages
32 for name, value in scope
33 scope[name] = null
34 packages = {}
35
36 # Load native console API
37 Cu.import("resource://gre/modules/devtools/Console.jsm")
38
39 # Firefox will call this method on startup/enabling
40 global.startup = (data, reason) ->
41 # Requires for startup/install
42 { loadCss } = require 'utils'
43 { addEventListeners
44 , vimBucket } = require 'events'
45 { getPref } = require 'prefs'
46 { setButtonInstallPosition
47 , addToolbarButton } = require 'button'
48 options = require 'options'
49 { watchWindows } = require 'window-utils'
50 { unload } = require 'unload'
51
52 if reason == ADDON_INSTALL
53 # Position the toolbar button right before the default Bookmarks button
54 # If Bookmarks button is hidden - then VimFx button will be appended to the toolbar
55 setButtonInstallPosition('nav-bar', 'bookmarks-menu-button-container')
56
57 loadCss('style')
58
59 options.observe()
60
61 watchWindows(addEventListeners, 'navigator:browser')
62 watchWindows(addToolbarButton.bind(undefined, vimBucket), 'navigator:browser')
63
64 unload(release)
65
66 # Firefox will call this method on shutdown/disabling
67 global.shutdown = (data, reason) ->
68 # Don't bother to clean up if the browser is shutting down
69 if reason != APP_SHUTDOWN
70 { unload } = require 'unload'
71 unload()
72
73 global.install = (data, reason) ->
74
75 global.uninstall = (data, reason) ->
Imprint / Impressum