2525 * @author Patrick Oladimeji
2626 * @date 10/24/13 9:35:26 AM
2727 */
28+
2829define ( function ( require , exports , module ) {
2930 "use strict" ;
3031
@@ -52,12 +53,7 @@ define(function (require, exports, module) {
5253 collapseAllKey = "Alt-1" ,
5354 expandAllKey = "Shift-Alt-1" ,
5455 collapseAllKeyMac = "Cmd-1" ,
55- expandAllKeyMac = "Cmd-Shift-1" ,
56- SAVE_FOLD_STATES = "saveFoldStates" ,
57- HIDE_UNTIL_MOUSE_OVER = "hideUntilMouseover" ,
58- MAKE_SELECTION_FOLDABLE = "makeSelectionFoldable" ,
59- ALWAYS_USE_INDENT_FOLD = "alwaysUseIndentFold" ,
60- LINE_NUMBER_GUTTER = "CodeMirror-linenumbers" ;
56+ expandAllKeyMac = "Cmd-Shift-1" ;
6157
6258 ExtensionUtils . loadStyleSheet ( module , "main.less" ) ;
6359
@@ -74,10 +70,10 @@ define(function (require, exports, module) {
7470 indentFold = require ( "foldhelpers/indentFold" ) ,
7571 selectionFold = require ( "foldhelpers/foldSelected" ) ;
7672
73+
7774 /** Set to true when init() has run; set back to false after deinit() has run */
78- var _isInitialized = false ,
79- gutterObservers = { } ;
80-
75+ var _isInitialized = false ;
76+
8177 /**
8278 * Restores the linefolds in the editor using values fetched from the preference store
8379 * Checks the document to ensure that changes have not been made (e.g., in a different editor)
@@ -116,7 +112,7 @@ define(function (require, exports, module) {
116112 } ) ;
117113 }
118114
119- var saveFolds = prefs . getSetting ( SAVE_FOLD_STATES ) ;
115+ var saveFolds = prefs . getSetting ( "saveFoldStates" ) ;
120116 if ( ! editor || ! saveFolds ) {
121117 return ;
122118 }
@@ -151,7 +147,7 @@ define(function (require, exports, module) {
151147 * @param {Editor } editor the editor whose line folds should be saved
152148 */
153149 function saveLineFolds ( editor ) {
154- var saveFolds = prefs . getSetting ( SAVE_FOLD_STATES ) ;
150+ var saveFolds = prefs . getSetting ( "saveFoldStates" ) ;
155151 if ( ! editor || ! saveFolds ) {
156152 return ;
157153 }
@@ -267,38 +263,34 @@ define(function (require, exports, module) {
267263 */
268264 function createGutter ( editor ) {
269265 var cm = editor . _codeMirror ;
270- var rootElement = editor . getRootElement ( ) ;
271266 var path = editor . document . file . fullPath , _lineFolds = prefs . getFolds ( path ) ;
272267 _lineFolds = _lineFolds || { } ;
273268 cm . _lineFolds = _lineFolds ;
274269 var gutters = cm . getOption ( "gutters" ) . slice ( 0 ) ;
275270
276271 // Reuse any existing fold gutter
277272 if ( gutters . indexOf ( GUTTER_NAME ) < 0 ) {
278- var lineNumberIndex = gutters . indexOf ( LINE_NUMBER_GUTTER ) ;
279- if ( lineNumberIndex < 0 ) {
280- $ ( rootElement ) . addClass ( "linenumber-disabled" ) ;
281- }
282- $ ( rootElement ) . addClass ( "folding-enabled" ) ;
283- gutters . splice ( lineNumberIndex + 1 , 0 , GUTTER_NAME ) ;
273+ var lnIndex = gutters . indexOf ( "CodeMirror-linenumbers" ) ;
274+ $ ( editor . getRootElement ( ) ) . addClass ( "folding-enabled" ) ;
275+ gutters . splice ( lnIndex + 1 , 0 , GUTTER_NAME ) ;
284276 cm . setOption ( "gutters" , gutters ) ;
285277 cm . refresh ( ) ; // force recomputing gutter width - .folding-enabled class affects linenumbers gutter which has existing cached width
286278 }
287279 cm . setOption ( "foldGutter" , { onGutterClick : onGutterClick } ) ;
288280
289281 $ ( cm . getGutterElement ( ) ) . on ( {
290282 mouseenter : function ( ) {
291- if ( prefs . getSetting ( HIDE_UNTIL_MOUSE_OVER ) ) {
283+ if ( prefs . getSetting ( "hideUntilMouseover" ) ) {
292284 foldGutter . updateInViewport ( cm ) ;
293285 } else {
294- $ ( rootElement ) . addClass ( "over-gutter" ) ;
286+ $ ( editor . getRootElement ( ) ) . addClass ( "over-gutter" ) ;
295287 }
296288 } ,
297289 mouseleave : function ( ) {
298- if ( prefs . getSetting ( HIDE_UNTIL_MOUSE_OVER ) ) {
290+ if ( prefs . getSetting ( "hideUntilMouseover" ) ) {
299291 foldGutter . clearGutter ( cm ) ;
300292 } else {
301- $ ( rootElement ) . removeClass ( "over-gutter" ) ;
293+ $ ( editor . getRootElement ( ) ) . removeClass ( "over-gutter" ) ;
302294 }
303295 }
304296 } ) ;
@@ -312,12 +304,10 @@ define(function (require, exports, module) {
312304 var cm = editor . _codeMirror ;
313305 var gutters = cm . getOption ( "gutters" ) . slice ( 0 ) ;
314306 var index = gutters . indexOf ( GUTTER_NAME ) ;
315- var rootElement = editor . getRootElement ( ) ;
316- $ ( rootElement ) . removeClass ( "folding-enabled" ) ;
307+ $ ( editor . getRootElement ( ) ) . removeClass ( "folding-enabled" ) ;
317308 gutters . splice ( index , 1 ) ;
318309 cm . setOption ( "gutters" , gutters ) ;
319- // Force recomputing gutter width - .folding-enabled class affected linenumbers gutter
320- cm . refresh ( ) ;
310+ cm . refresh ( ) ; // force recomputing gutter width - .folding-enabled class affected linenumbers gutter
321311 CodeMirror . defineOption ( "foldGutter" , false , null ) ;
322312 }
323313
@@ -326,39 +316,6 @@ define(function (require, exports, module) {
326316 if ( editor . _codeMirror . getOption ( "gutters" ) . indexOf ( GUTTER_NAME ) === - 1 ) {
327317 createGutter ( editor ) ;
328318 restoreLineFolds ( editor ) ;
329- // Watch mutations on code mirror gutters and ensure line numbers are added before fold gutter.
330- var config = { childList : true } ;
331- var gutters ,
332- lineNumberIndex ,
333- foldGutterIndex ,
334- cm = editor . _codeMirror ,
335- rootElement = editor . getRootElement ( ) ,
336- guttersContainer = $ ( ".CodeMirror-gutters" , rootElement ) ,
337- observer = new MutationObserver ( function ( mutations ) {
338- observer . disconnect ( ) ;
339- // Ensure fold-gutter appears after line numbers.
340- gutters = cm . getOption ( "gutters" ) . slice ( 0 ) ;
341- lineNumberIndex = gutters . indexOf ( LINE_NUMBER_GUTTER ) ;
342- foldGutterIndex = gutters . indexOf ( GUTTER_NAME ) ;
343- if ( lineNumberIndex > - 1 && foldGutterIndex < lineNumberIndex ) {
344- gutters . splice ( foldGutterIndex , 1 ) ;
345- lineNumberIndex = gutters . indexOf ( LINE_NUMBER_GUTTER ) ;
346- gutters . splice ( lineNumberIndex + 1 , 0 , GUTTER_NAME ) ;
347- }
348- if ( lineNumberIndex < 0 ) {
349- $ ( rootElement ) . addClass ( "linenumber-disabled" ) ;
350- } else {
351- $ ( rootElement ) . removeClass ( "linenumber-disabled" ) ;
352- }
353- $ ( rootElement ) . addClass ( "folding-enabled" ) ;
354- cm . setOption ( "gutters" , gutters ) ;
355- cm . refresh ( ) ;
356- createGutter ( editor ) ;
357- // Reconnect the observer.
358- observer . observe ( guttersContainer [ 0 ] , config ) ;
359- } ) ;
360- observer . observe ( guttersContainer [ 0 ] , config ) ;
361- gutterObservers [ editor . document . file . fullPath ] = observer ;
362319 }
363320 }
364321
@@ -414,12 +371,6 @@ define(function (require, exports, module) {
414371 Editor . forEveryEditor ( function ( editor ) {
415372 CodeMirror . commands . unfoldAll ( editor . _codeMirror ) ;
416373 removeGutter ( editor ) ;
417- //disconnect any mutation observers on the gutter
418- var gutterObserver = gutterObservers [ editor . document . file . fullPath ] ;
419- if ( gutterObserver ) {
420- gutterObserver . disconnect ( ) ;
421- delete gutterObservers [ editor . document . file . fullPath ] ;
422- }
423374 } ) ;
424375 }
425376
@@ -436,10 +387,10 @@ define(function (require, exports, module) {
436387 // don't, we register helpers explicitly here. We also register a global helper for generic indent-based
437388 // folding, which cuts across all languages if enabled via preference.
438389 CodeMirror . registerGlobalHelper ( "fold" , "selectionFold" , function ( mode , cm ) {
439- return prefs . getSetting ( MAKE_SELECTION_FOLDABLE ) ;
390+ return prefs . getSetting ( "makeSelectionsFoldable" ) ;
440391 } , selectionFold ) ;
441392 CodeMirror . registerGlobalHelper ( "fold" , "indent" , function ( mode , cm ) {
442- return prefs . getSetting ( ALWAYS_USE_INDENT_FOLD ) ;
393+ return prefs . getSetting ( "alwaysUseIndentFold" ) ;
443394 } , indentFold ) ;
444395
445396 CodeMirror . registerHelper ( "fold" , "django" , CodeMirror . helpers . fold . brace ) ;
0 commit comments