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

Commit ea07f8d

Browse files
committed
Split the init from the update
1 parent cdbce72 commit ea07f8d

1 file changed

Lines changed: 75 additions & 47 deletions

File tree

  • src/extensions/default/CloseOthers

src/extensions/default/CloseOthers/main.js

Lines changed: 75 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,20 @@ define(function (require, exports, module) {
4141
closeBelow = "file.close_below";
4242

4343
// Global vars and preferences
44-
var commandsRegistered = false,
45-
menuEntriesShown = {},
44+
var menuEntriesShown = {},
4645
menuItemsAdded = { closeBelow: false, closeOthers: false, closeAbove: false },
4746
prefs = PreferencesManager.getExtensionPrefs("closeOthers");
4847

49-
prefs.definePreference("below", "boolean", true);
48+
prefs.definePreference("below", "boolean", true);
5049
prefs.definePreference("others", "boolean", true);
51-
prefs.definePreference("above", "boolean", true);
52-
50+
prefs.definePreference("above", "boolean", true);
51+
52+
53+
/**
54+
* Handle the different Close Other commands
55+
* @param {string} mode
56+
*/
5357
function handleClose(mode) {
54-
5558
var targetIndex = DocumentManager.findInWorkingSet(DocumentManager.getCurrentDocument().file.fullPath),
5659
workingSet = DocumentManager.getWorkingSet().slice(0),
5760
start = (mode === closeBelow) ? (targetIndex + 1) : 0,
@@ -70,11 +73,14 @@ define(function (require, exports, module) {
7073

7174
CommandManager.execute(Commands.FILE_CLOSE_LIST, {fileList: files});
7275
}
73-
74-
function _contextMenuOpenHandler() {
76+
77+
/**
78+
* Enable/Disable the menu items depending on which document is selected in the working set
79+
*/
80+
function contextMenuOpenHandler() {
7581
var doc = DocumentManager.getCurrentDocument();
7682

77-
if (doc && commandsRegistered) {
83+
if (doc) {
7884
var docIndex = DocumentManager.findInWorkingSet(doc.file.fullPath),
7985
workingSet = DocumentManager.getWorkingSet().slice(0);
8086

@@ -97,67 +103,89 @@ define(function (require, exports, module) {
97103
}
98104
}
99105
}
100-
101-
function prefChangeHandler() {
102-
// it's senseless to look prefs up for the current file, instead look them up for
106+
107+
108+
/**
109+
* Returns the preferences used to add/remove the menu items
110+
* @return {{closeBelow: boolean, closeOthers: boolean, closeAbove: boolean}}
111+
*/
112+
function getPreferences() {
113+
// It's senseless to look prefs up for the current file, instead look them up for
103114
// the current project (or globally)
104-
var prefCloseBelow = prefs.get("below", PreferencesManager.CURRENT_PROJECT),
105-
prefCloseOthers = prefs.get("others", PreferencesManager.CURRENT_PROJECT),
106-
prefCloseAbove = prefs.get("above", PreferencesManager.CURRENT_PROJECT);
107-
108-
if (!commandsRegistered && (prefCloseBelow || prefCloseOthers || prefCloseAbove)) {
109-
CommandManager.register(Strings.CMD_FILE_CLOSE_BELOW, closeBelow, function () {
110-
handleClose(closeBelow);
111-
});
112-
CommandManager.register(Strings.CMD_FILE_CLOSE_OTHERS, closeOthers, function () {
113-
handleClose(closeOthers);
114-
});
115-
CommandManager.register(Strings.CMD_FILE_CLOSE_ABOVE, closeAbove, function () {
116-
handleClose(closeAbove);
117-
});
118-
commandsRegistered = true;
119-
}
115+
return {
116+
closeBelow : prefs.get("below", PreferencesManager.CURRENT_PROJECT),
117+
closeOthers : prefs.get("others", PreferencesManager.CURRENT_PROJECT),
118+
closeAbove : prefs.get("above", PreferencesManager.CURRENT_PROJECT)
119+
};
120+
}
121+
122+
/**
123+
* When the preferences changed, add/remove the required menu items
124+
*/
125+
function prefChangeHandler() {
126+
var prefs = getPreferences();
120127

121-
if (prefCloseBelow !== menuEntriesShown.closeBelow) {
122-
if (prefCloseBelow) {
128+
if (prefs.closeBelow !== menuEntriesShown.closeBelow) {
129+
if (prefs.closeBelow) {
123130
workingSetCmenu.addMenuItem(closeBelow, "", Menus.AFTER, Commands.FILE_CLOSE);
124-
menuItemsAdded.closeBelow = true;
125-
} else if (menuItemsAdded.closeBelow) {
131+
} else {
126132
workingSetCmenu.removeMenuItem(closeBelow);
127133
}
128134
}
129135

130-
if (prefCloseOthers !== menuEntriesShown.closeOthers) {
131-
if (prefCloseOthers) {
136+
if (prefs.closeOthers !== menuEntriesShown.closeOthers) {
137+
if (prefs.closeOthers) {
132138
workingSetCmenu.addMenuItem(closeOthers, "", Menus.AFTER, Commands.FILE_CLOSE);
133-
menuItemsAdded.closeOthers = true;
134-
} else if (menuItemsAdded.closeOthers) {
139+
} else {
135140
workingSetCmenu.removeMenuItem(closeOthers);
136141
}
137142
}
138143

139-
if (prefCloseAbove !== menuEntriesShown.closeAbove) {
140-
if (prefCloseAbove) {
144+
if (prefs.closeAbove !== menuEntriesShown.closeAbove) {
145+
if (prefs.closeAbove) {
141146
workingSetCmenu.addMenuItem(closeAbove, "", Menus.AFTER, Commands.FILE_CLOSE);
142-
menuItemsAdded.closeAbove = true;
143-
} else if (menuItemsAdded.closeAbove) {
147+
} else {
144148
workingSetCmenu.removeMenuItem(closeAbove);
145149
}
146150
}
147151

148-
menuEntriesShown = {
149-
closeBelow: prefCloseBelow,
150-
closeOthers: prefCloseOthers,
151-
closeAbove: prefCloseAbove
152-
};
152+
menuEntriesShown = prefs;
153+
}
154+
155+
/**
156+
* Register the Commands and add the Menu Items if required on start up
157+
*/
158+
function initializeCommands() {
159+
var prefs = getPreferences();
160+
161+
CommandManager.register(Strings.CMD_FILE_CLOSE_BELOW, closeBelow, function () {
162+
handleClose(closeBelow);
163+
});
164+
CommandManager.register(Strings.CMD_FILE_CLOSE_OTHERS, closeOthers, function () {
165+
handleClose(closeOthers);
166+
});
167+
CommandManager.register(Strings.CMD_FILE_CLOSE_ABOVE, closeAbove, function () {
168+
handleClose(closeAbove);
169+
});
170+
171+
if (prefs.closeBelow) {
172+
workingSetCmenu.addMenuItem(closeBelow, "", Menus.AFTER, Commands.FILE_CLOSE);
173+
}
174+
if (prefs.closeOthers) {
175+
workingSetCmenu.addMenuItem(closeOthers, "", Menus.AFTER, Commands.FILE_CLOSE);
176+
}
177+
if (prefs.closeAbove) {
178+
workingSetCmenu.addMenuItem(closeAbove, "", Menus.AFTER, Commands.FILE_CLOSE);
179+
}
180+
menuEntriesShown = prefs;
153181
}
154182

155183

156184
// Initialize using the prefs
157-
prefChangeHandler();
185+
initializeCommands();
158186

159187
// Add a context menu open handler
160-
$(workingSetCmenu).on("beforeContextMenuOpen", _contextMenuOpenHandler);
188+
$(workingSetCmenu).on("beforeContextMenuOpen", contextMenuOpenHandler);
161189

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

0 commit comments

Comments
 (0)