Defines hooks to assist with module initialization.
This module defines 3 methods for client modules to attach callbacks:
These are not jQuery events. Each method is similar to $(document).ready in that it will call the handler immediately if brackets is already done loading.
Fires when all extensions are loaded
var APP_READY = "appReady";
Fires after extensions have been loaded
var EXTENSIONS_LOADED = "extensionsLoaded";
Fires when the base htmlContent/main-view.html is loaded
var HTML_READY = "htmlReady";
adds a callback to the list of functions to call for the specified event type
function _addListener(type, handler) {
if (_status[type]) {
_callHandler(handler);
} else {
_callbacks[type].push(handler);
}
}
calls the specified handler inside a try/catch handler
function _callHandler(handler) {
try {
// TODO (issue 1034): We *could* use a $.Deferred for this, except deferred objects enter a broken
// state if any resolution callback throws an exception. Since third parties (e.g. extensions) may
// add callbacks to this, we need to be robust to exceptions
handler();
} catch (e) {
console.error("Exception when calling a 'brackets done loading' handler: " + e);
console.log(e.stack);
}
}
dispatches the event by calling all handlers registered for that type
function _dispatchReady(type) {
var i,
myHandlers = _callbacks[type];
// mark this status complete
_status[type] = true;
for (i = 0; i < myHandlers.length; i++) {
_callHandler(myHandlers[i]);
}
// clear all callbacks after being called
_callbacks[type] = [];
}
Adds a callback for the ready hook. Handlers are called after htmlReady is done, the initial project is loaded, and all extensions are loaded.
function appReady(handler) {
_addListener(APP_READY, handler);
}
Adds a callback for the extensionsLoaded hook. Handlers are called after the extensions have been loaded
function extensionsLoaded(handler) {
_addListener(EXTENSIONS_LOADED, handler);
}
// Public API
exports.appReady = appReady;
exports.htmlReady = htmlReady;
exports.extensionsLoaded = extensionsLoaded;
exports.HTML_READY = HTML_READY;
exports.APP_READY = APP_READY;
exports.EXTENSIONS_LOADED = EXTENSIONS_LOADED;
// Unit Test API
exports._dispatchReady = _dispatchReady;
});