bootstrap.coffee

"use strict"

{ classes: Cc, interfaces: Ci, utils: Cu } = Components

((global) ->

  tools = {}
  Cu.import "resource://gre/modules/Services.jsm", tools
  baseURI = tools.Services.io.newURI __SCRIPT_URI_SPEC__, null, null

  include = (src, scope = {}) ->
    try
      uri = tools.Services.io.newURI "packages/#{ src }.js", null, baseURI
      tools.Services.scriptloader.loadSubScript uri.spec, scope
    catch error
      uri = tools.Services.io.newURI src, null, baseURI
      tools.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;

  Console = require("console").Console
  global.console = new Console "vimff"
  global.include = include
  global.require = require

)(this);

{ WindowEventTracker, loadCss, unloadCss, } = require 'utils'
{ handlers } = require 'event-handlers'

tracker = new WindowEventTracker handlers

startup = (data, reason) ->
  loadCss 'vimff'
  tracker.start()

shutdown = (data, reason) ->
  tracker.stop()
  unloadCss 'vimff'