PreferencesManager
Context to look up preferences for the currently edited file. This is undefined because this is the default behavior of PreferencesSystem.get.
var CURRENT_FILE;
Context to look up preferences in the current project.
var CURRENT_PROJECT = {};
function _adjustScopeOrderForProject(scopeOrder, includeProject) {
var hasProject = scopeOrder.indexOf("project") > -1;
if (hasProject === includeProject) {
return scopeOrder;
}
var newScopeOrder;
if (includeProject) {
var before = scopeOrder.indexOf("user");
if (before === -1) {
before = scopeOrder.length - 2;
}
newScopeOrder = _.take(scopeOrder, before);
newScopeOrder.push("project");
newScopeOrder.push.apply(newScopeOrder, _.drop(scopeOrder, before));
} else {
newScopeOrder = _.without(scopeOrder, "project");
}
return newScopeOrder;
}
function _buildContext(filename, languageId) {
var ctx = {};
if (filename) {
ctx.path = filename;
} else {
ctx.path = currentFilename;
}
if (languageId) {
ctx.language = languageId;
} else {
ctx.language = currentLanguageId;
}
ctx.scopeOrder = _includeProjectScope(ctx.path) ?
scopeOrderWithProject :
scopeOrderWithoutProject;
return ctx;
}
function _getContext(context) {
context = context || {};
return _buildContext(context.path, context.language);
}
function _handleOpenPreferences() {
var fullPath = getUserPrefFile(),
file = FileSystem.getFileForPath(fullPath);
file.exists(function (err, doesExist) {
if (doesExist) {
CommandManager.execute(Commands.FILE_OPEN, { fullPath: fullPath });
} else {
FileUtils.writeText(file, "", true)
.done(function () {
CommandManager.execute(Commands.FILE_OPEN, { fullPath: fullPath });
});
}
});
}
CommandManager.register(Strings.CMD_OPEN_PREFERENCES, Commands.FILE_OPEN_PREFERENCES, _handleOpenPreferences);
function _includeProjectScope(filename) {
filename = filename || currentFilename;
if (!filename || !projectDirectory) {
return false;
}
return FileUtils.getRelativeFilename(projectDirectory, filename) !== undefined;
}
function _setCurrentFile(newFilename) {
var oldFilename = currentFilename;
if (oldFilename === newFilename) {
return;
}
currentFilename = newFilename;
_toggleProjectScope();
PreferencesImpl.manager.signalContextChanged(_buildContext(oldFilename, currentLanguageId),
_buildContext(newFilename, currentLanguageId));
}
function _setCurrentLanguage(newLanguageId) {
var oldLanguageId = currentLanguageId;
if (oldLanguageId === newLanguageId) {
return;
}
currentLanguageId = newLanguageId;
PreferencesImpl.manager.signalContextChanged(_buildContext(currentFilename, oldLanguageId),
_buildContext(currentFilename, newLanguageId));
}
PreferencesImpl.manager.contextBuilder = _getContext;
function _setProjectSettingsFile(settingsFile) {
projectDirectory = FileUtils.getDirectoryPath(settingsFile);
_toggleProjectScope();
PreferencesImpl.projectPathLayer.setPrefFilePath(settingsFile);
PreferencesImpl.projectStorage.setPath(settingsFile);
}
function _toggleProjectScope() {
if (_includeProjectScope() === projectScopeIsIncluded) {
return;
}
if (projectScopeIsIncluded) {
PreferencesImpl.manager.removeFromScopeOrder("project");
} else {
PreferencesImpl.manager.addToScopeOrder("project", "user");
}
projectScopeIsIncluded = !projectScopeIsIncluded;
}
function _updateCurrentProjectContext() {
var defaultScopeOrder = PreferencesImpl.manager._getScopeOrder({});
scopeOrderWithProject = _adjustScopeOrderForProject(defaultScopeOrder, true);
scopeOrderWithoutProject = _adjustScopeOrderForProject(defaultScopeOrder, false);
CURRENT_PROJECT.scopeOrder = scopeOrderWithProject;
}
_updateCurrentProjectContext();
PreferencesImpl.manager.on("scopeOrderChange", _updateCurrentProjectContext);
Creates an extension-specific preferences manager using the prefix given.
A .
character will be appended to the prefix. So, a preference named foo
with a prefix of myExtension
will be stored as myExtension.foo
in the
preferences files.
function getExtensionPrefs(prefix) {
return PreferencesImpl.manager.getPrefixedSystem(prefix);
}
// Constants for preference lookup contexts.
Get the full path to the user-level preferences file.
function getUserPrefFile() {
return PreferencesImpl.userPrefFile;
}
Convenience function that gets a view state
function getViewState(id, context) {
return PreferencesImpl.stateManager.get(id, context);
}
Convenience function that sets a view state and then saves the file
function setViewState(id, value, context, doNotSave) {
PreferencesImpl.stateManager.set(id, value, context);
if (!doNotSave) {
PreferencesImpl.stateManager.save();
}
}
AppInit.appReady(function () {
PreferencesImpl.manager.resumeChangeEvents();
});
// Private API for unit testing and use elsewhere in Brackets core
exports._isUserScopeCorrupt = PreferencesImpl.isUserScopeCorrupt;
exports._setCurrentFile = _setCurrentFile;
exports._setCurrentLanguage = _setCurrentLanguage;
exports._setProjectSettingsFile = _setProjectSettingsFile;
exports._smUserScopeLoading = PreferencesImpl.smUserScopeLoading;
exports._stateProjectLayer = PreferencesImpl.stateProjectLayer;
exports._reloadUserPrefs = PreferencesImpl.reloadUserPrefs;
exports._buildContext = _buildContext;
// Public API
// Context names for preference lookups
exports.CURRENT_FILE = CURRENT_FILE;
exports.CURRENT_PROJECT = CURRENT_PROJECT;
exports.ready = PreferencesImpl.managerReady;
exports.getUserPrefFile = getUserPrefFile;
exports.get = PreferencesImpl.manager.get.bind(PreferencesImpl.manager);
exports.set = PreferencesImpl.manager.set.bind(PreferencesImpl.manager);
exports.save = PreferencesImpl.manager.save.bind(PreferencesImpl.manager);
exports.on = PreferencesImpl.manager.on.bind(PreferencesImpl.manager);
exports.off = PreferencesImpl.manager.off.bind(PreferencesImpl.manager);
exports.getPreference = PreferencesImpl.manager.getPreference.bind(PreferencesImpl.manager);
exports.getAllPreferences = PreferencesImpl.manager.getAllPreferences.bind(PreferencesImpl.manager);
exports.getExtensionPrefs = getExtensionPrefs;
exports.getViewState = getViewState;
exports.setViewState = setViewState;
exports.addScope = PreferencesImpl.manager.addScope.bind(PreferencesImpl.manager);
exports.stateManager = PreferencesImpl.stateManager;
exports.FileStorage = PreferencesBase.FileStorage;
exports.SETTINGS_FILENAME = PreferencesImpl.SETTINGS_FILENAME;
exports.definePreference = PreferencesImpl.manager.definePreference.bind(PreferencesImpl.manager);
exports.fileChanged = PreferencesImpl.manager.fileChanged.bind(PreferencesImpl.manager);
});