Caret/js
Thomas Wilburn 6cf6745e5d Better background commands
Flash the window if it's already open
Pause two seconds to give app a chance to start.
2014-01-12 11:11:10 -08:00
..
ace Updated Ace to the 12/2/13 build. 2013-12-09 11:43:13 -08:00
lib Add es6-promise shim, so we can convert over to browser promises as soon as they're available. 2013-12-22 10:56:13 -08:00
storage Converting to promises broke File.getPath and thus project file de-dupe. 2014-01-12 00:43:02 -08:00
ui Extra safeguards. 2014-01-12 10:47:08 -08:00
util Add module readme files. 2013-12-23 12:25:43 -08:00
aceBindings.js Add async callbacks to a bunch of commands 2013-12-23 16:15:03 -08:00
api.js Add async callbacks to a bunch of commands 2013-12-23 16:15:03 -08:00
command.js Better background commands 2014-01-12 11:11:10 -08:00
editor.js Add async callbacks to a bunch of commands 2013-12-23 16:15:03 -08:00
fileManager.js Add "secret" user option to disable tab restore. 2014-01-12 10:53:31 -08:00
main.js Make themes a little bit better about recovering from bad config values. 2013-12-23 19:23:50 -08:00
readme.md Add module readme files. 2013-12-23 12:25:43 -08:00
sessions.js Simplify tab context URLs -- they're not a heirarchy, they don't need a root path segment. 2014-01-12 10:37:52 -08:00
settings.js Finish converting syncFS to Promises. 2013-12-23 10:27:33 -08:00
tab.js Use manos.deferred() in tab.save() 2013-12-23 11:20:04 -08:00

Module descriptions - core

This document serves as basic documentation for Caret's AMD modules. It's not exhaustive, but it will serve as a starting place for anyone wanting to dive in a little deeper.

Caret's execution starts in main.js, which mostly serves as bootstrap for the other modules. It also registers command listeners for the UI themes, various window events, and app-level commands like app:check-for-updates. After that, we really get down to business.

In addition to the module folders, which contain their own readme files, there are also folders for the current Ace build (ace) and any external libraries used by Caret, such as the ES6 Promises shim (lib).

aceBindings.js

Takes care of any messiness between Caret and Ace APIs. Registers the ace:command listener, as well as a bunch of Sublime emulation commands. Exposes no external methods or data.

api.js

Registers for chrome.runtime.onMessageExternal events, patching them into the command module, and dispatches messages from api:execute commands. Exposes no external methods or data.

command.js

Serves as a messaging buffer between modules, and from declarative DOM attributes to modules. Exposes three properties: fire() for sending commands, on() for subscribing to them, and an array called list that can be used to add palette-only items at runtime.

editor.js

Sets up the Ace editor and registers for events in the editor:* namespace. Returns the Ace object.

fileManager.js

Handles opening files from launch data, retained handles, and user commands. Exposes no external methods or data.

sessions.js

Manages Caret's tabs, including all UI interaction with the tab bar and the process of adding or removing tabs. Exposes a number of methods and manipulating the tab structure.

settings.js

Runs as a RequireJS plugin, so that dependent modules can rely on having settings available on startup, but actually returns a Settings object with the following methods:

  • get Retrieves the current settings object by name, with all layers `(project, local, and default) merged over top each other.
  • getAsString Retrieves the local settings as a string, mostly used when opening settings for editing.
  • getAsFile
  • load Requests a fresh copy of the local settings from sync storage, usually called after either writing to settings or when the dependent module does not have a settings cache.
  • setProject Sets the top-most JSON object to be merged when calling Settings.get(), used for the project-specific settings overrides.
  • clearProject Removes the top-most JSON object, so that only local and default settings are merged.

tab.js

Exposes a Tab constructor to dependents, which is an augmented Ace EditorSession. Tabs do additional setup work to support Caret, as well as adding methods for saving files and dropping retained file handles.