Jump To …

bootstrap.coffee

"use strict"

{ utils: Cu } = Components

Cu.import "resource://gre/modules/Services.jsm"
Cu.import "resource://gre/modules/AddonManager.jsm"

Populate the global namespace with console, require, and include

do (global = this) ->
  baseURI = Services.io.newURI __SCRIPT_URI_SPEC__, null, null
  getResourceURI = (path) -> Services.io.newURI path, null, baseURI

  include = (src, scope = {}) ->
    try
      uri = getResourceURI "packages/#{ src }.js"
      Services.scriptloader.loadSubScript uri.spec, scope
    catch error
      uri = getResourceURI src
      Services.scriptloader.loadSubScript uri.spec, scope

    return scope
  

  modules = {}
  require = (src) ->
    if modules[src]
      return modules[src]
    else
      scope = 
        require: require
        include: include
        exports: {}

      include src, scope

      return modules[src] = scope.exports;

  global.include = include
  global.require = require
  global.getResourceURI = getResourceURI

Include into global scope

include("includes/#{ name }.js", this) for name in [
  'chrome',
  'console',
  'unload', 
  'window-utils',
]

{ loadCss }             = require 'utils'
{ addEventListeners }   = require 'events'
{ getPref
, installPrefObserver } = require 'prefs'
{ setButtonDefaultPosition
, addToolbarButton }    = require 'button'

Firefox will call this method on startup/enabling

startup = (data, reason) ->
  if reason = ADDON_INSTALL
    setButtonDefaultPosition getPref('button_id'), 'nav-bar', 'bookmarks-menu-button-container'

  loadCss 'style'
  watchWindows addEventListeners, 'navigator:browser'
  watchWindows addToolbarButton, 'navigator:browser'
  installPrefObserver()

Firefox will call this method on shutdown/disabling

shutdown = (data, reason) ->

Don't bother to clean up if the browser is shutting down

  if reason != APP_SHUTDOWN
    unload()