3 { 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 include = (src, scope = {}) ->
15 uri = getResourceURI "packages/#{ src }.js"
16 Services.scriptloader.loadSubScript uri.spec, scope
18 uri = getResourceURI src
19 Services.scriptloader.loadSubScript uri.spec, scope
36 return modules[src] = scope.exports;
38 global.include = include
39 global.require = require
40 global.getResourceURI = getResourceURI
42 # Include into global scope
43 include("includes/#{ name }.js", this) for name in [
50 { loadCss } = require 'utils'
51 { addEventListeners } = require 'events'
53 , installPrefObserver } = require 'prefs'
54 { setButtonDefaultPosition
55 , addToolbarButton } = require 'button'
57 # Firefox will call this method on startup/enabling
58 startup = (data, reason) ->
59 if reason = ADDON_INSTALL
60 # Position the toolbar button right before the default Bookmarks button
61 # If Bookmarks button is hidden - then VimFx button will be appended to the toolbar
62 setButtonDefaultPosition getPref('button_id'), 'nav-bar', 'bookmarks-menu-button-container'
65 watchWindows addEventListeners, 'navigator:browser'
66 watchWindows addToolbarButton, 'navigator:browser'
69 # Firefox will call this method on shutdown/disabling
70 shutdown = (data, reason) ->
71 # Don't bother to clean up if the browser is shutting down
72 if reason != APP_SHUTDOWN