@@ -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