Skip to content
This repository has been archived by the owner on Sep 6, 2021. It is now read-only.

Commit

Permalink
Split the init from the update
Browse files Browse the repository at this point in the history
  • Loading branch information
TomMalbran committed Mar 13, 2014
1 parent cdbce72 commit ea07f8d
Showing 1 changed file with 75 additions and 47 deletions.
122 changes: 75 additions & 47 deletions src/extensions/default/CloseOthers/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,20 @@ define(function (require, exports, module) {
closeBelow = "file.close_below";

// Global vars and preferences
var commandsRegistered = false,
menuEntriesShown = {},
var menuEntriesShown = {},
menuItemsAdded = { closeBelow: false, closeOthers: false, closeAbove: false },
prefs = PreferencesManager.getExtensionPrefs("closeOthers");

prefs.definePreference("below", "boolean", true);
prefs.definePreference("below", "boolean", true);
prefs.definePreference("others", "boolean", true);
prefs.definePreference("above", "boolean", true);

prefs.definePreference("above", "boolean", true);


/**
* Handle the different Close Other commands
* @param {string} mode
*/
function handleClose(mode) {

var targetIndex = DocumentManager.findInWorkingSet(DocumentManager.getCurrentDocument().file.fullPath),
workingSet = DocumentManager.getWorkingSet().slice(0),
start = (mode === closeBelow) ? (targetIndex + 1) : 0,
Expand All @@ -70,11 +73,14 @@ define(function (require, exports, module) {

CommandManager.execute(Commands.FILE_CLOSE_LIST, {fileList: files});
}

function _contextMenuOpenHandler() {

/**
* Enable/Disable the menu items depending on which document is selected in the working set
*/
function contextMenuOpenHandler() {
var doc = DocumentManager.getCurrentDocument();

if (doc && commandsRegistered) {
if (doc) {
var docIndex = DocumentManager.findInWorkingSet(doc.file.fullPath),
workingSet = DocumentManager.getWorkingSet().slice(0);

Expand All @@ -97,67 +103,89 @@ define(function (require, exports, module) {
}
}
}

function prefChangeHandler() {
// it's senseless to look prefs up for the current file, instead look them up for


/**
* Returns the preferences used to add/remove the menu items
* @return {{closeBelow: boolean, closeOthers: boolean, closeAbove: boolean}}
*/
function getPreferences() {
// It's senseless to look prefs up for the current file, instead look them up for
// the current project (or globally)
var prefCloseBelow = prefs.get("below", PreferencesManager.CURRENT_PROJECT),
prefCloseOthers = prefs.get("others", PreferencesManager.CURRENT_PROJECT),
prefCloseAbove = prefs.get("above", PreferencesManager.CURRENT_PROJECT);

if (!commandsRegistered && (prefCloseBelow || prefCloseOthers || prefCloseAbove)) {
CommandManager.register(Strings.CMD_FILE_CLOSE_BELOW, closeBelow, function () {
handleClose(closeBelow);
});
CommandManager.register(Strings.CMD_FILE_CLOSE_OTHERS, closeOthers, function () {
handleClose(closeOthers);
});
CommandManager.register(Strings.CMD_FILE_CLOSE_ABOVE, closeAbove, function () {
handleClose(closeAbove);
});
commandsRegistered = true;
}
return {
closeBelow : prefs.get("below", PreferencesManager.CURRENT_PROJECT),
closeOthers : prefs.get("others", PreferencesManager.CURRENT_PROJECT),
closeAbove : prefs.get("above", PreferencesManager.CURRENT_PROJECT)
};
}

/**
* When the preferences changed, add/remove the required menu items
*/
function prefChangeHandler() {
var prefs = getPreferences();

if (prefCloseBelow !== menuEntriesShown.closeBelow) {
if (prefCloseBelow) {
if (prefs.closeBelow !== menuEntriesShown.closeBelow) {
if (prefs.closeBelow) {
workingSetCmenu.addMenuItem(closeBelow, "", Menus.AFTER, Commands.FILE_CLOSE);
menuItemsAdded.closeBelow = true;
} else if (menuItemsAdded.closeBelow) {
} else {
workingSetCmenu.removeMenuItem(closeBelow);
}
}

if (prefCloseOthers !== menuEntriesShown.closeOthers) {
if (prefCloseOthers) {
if (prefs.closeOthers !== menuEntriesShown.closeOthers) {
if (prefs.closeOthers) {
workingSetCmenu.addMenuItem(closeOthers, "", Menus.AFTER, Commands.FILE_CLOSE);
menuItemsAdded.closeOthers = true;
} else if (menuItemsAdded.closeOthers) {
} else {
workingSetCmenu.removeMenuItem(closeOthers);
}
}

if (prefCloseAbove !== menuEntriesShown.closeAbove) {
if (prefCloseAbove) {
if (prefs.closeAbove !== menuEntriesShown.closeAbove) {
if (prefs.closeAbove) {
workingSetCmenu.addMenuItem(closeAbove, "", Menus.AFTER, Commands.FILE_CLOSE);
menuItemsAdded.closeAbove = true;
} else if (menuItemsAdded.closeAbove) {
} else {
workingSetCmenu.removeMenuItem(closeAbove);
}
}

menuEntriesShown = {
closeBelow: prefCloseBelow,
closeOthers: prefCloseOthers,
closeAbove: prefCloseAbove
};
menuEntriesShown = prefs;
}

/**
* Register the Commands and add the Menu Items if required on start up
*/
function initializeCommands() {
var prefs = getPreferences();

CommandManager.register(Strings.CMD_FILE_CLOSE_BELOW, closeBelow, function () {
handleClose(closeBelow);
});
CommandManager.register(Strings.CMD_FILE_CLOSE_OTHERS, closeOthers, function () {
handleClose(closeOthers);
});
CommandManager.register(Strings.CMD_FILE_CLOSE_ABOVE, closeAbove, function () {
handleClose(closeAbove);
});

if (prefs.closeBelow) {
workingSetCmenu.addMenuItem(closeBelow, "", Menus.AFTER, Commands.FILE_CLOSE);
}
if (prefs.closeOthers) {
workingSetCmenu.addMenuItem(closeOthers, "", Menus.AFTER, Commands.FILE_CLOSE);
}
if (prefs.closeAbove) {
workingSetCmenu.addMenuItem(closeAbove, "", Menus.AFTER, Commands.FILE_CLOSE);
}
menuEntriesShown = prefs;
}


// Initialize using the prefs
prefChangeHandler();
initializeCommands();

// Add a context menu open handler
$(workingSetCmenu).on("beforeContextMenuOpen", _contextMenuOpenHandler);
$(workingSetCmenu).on("beforeContextMenuOpen", contextMenuOpenHandler);

prefs.on("change", prefChangeHandler);
});

0 comments on commit ea07f8d

Please sign in to comment.