3 { classes: Cc, interfaces: Ci, utils: Cu } = Components
5 Cu.import('resource://gre/modules/Services.jsm')
6 Cu.import('resource://gre/modules/AddonManager.jsm')
8 # Populate the global namespace with console, require, and include
10 baseURI = Services.io.newURI(__SCRIPT_URI_SPEC__, null, null)
11 getResourceURI = (path) -> Services.io.newURI(path, null, baseURI)
13 loader = Cc['@mozilla.org/moz/jssubscript-loader;1'].getService(Ci.mozIJSSubScriptLoader)
15 include = (src, scope = {}) ->
17 uri = getResourceURI(src)
18 loader.loadSubScript(uri.spec, scope)
20 dump("Failed to load #{ src }: #{ error }\n")
35 include("packages/#{ src }.js", scope)
37 return modules[src] = scope.exports
39 global.include = include
40 global.require = require
41 global.getResourceURI = getResourceURI
42 global.regexpEscape = (s) -> s and s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
44 # Include into global scope
45 include("includes/#{ name }.js", global) for name in [
50 # Init localization `underscore` method
51 global._ = require('l10n').l10n('vimfx.properties')
53 # Requires for startup/install
54 { loadCss } = require 'utils'
55 { addEventListeners } = require 'events'
56 { getPref } = require 'prefs'
57 { setButtonInstallPosition
58 , addToolbarButton } = require 'button'
59 { watchWindows } = require 'window-utils'
61 # Firefox will call this method on startup/enabling
62 global.startup = (data, reason) ->
64 if reason == ADDON_INSTALL
65 # Position the toolbar button right before the default Bookmarks button
66 # If Bookmarks button is hidden - then VimFx button will be appended to the toolbar
67 setButtonInstallPosition 'nav-bar', 'bookmarks-menu-button-container'
71 watchWindows(addEventListeners, 'navigator:browser')
72 watchWindows(addToolbarButton, 'navigator:browser')
74 # Firefox will call this method on shutdown/disabling
75 global.shutdown = (data, reason) ->
76 # Don't bother to clean up if the browser is shutting down
77 if reason != APP_SHUTDOWN
80 global.install = (data, reason) ->
82 global.uninstall = (data, reason) ->