25
25
* @author Patrick Oladimeji
26
26
* @date 10/24/13 9:35:26 AM
27
27
*/
28
+
28
29
define ( function ( require , exports , module ) {
29
30
"use strict" ;
30
31
@@ -52,12 +53,7 @@ define(function (require, exports, module) {
52
53
collapseAllKey = "Alt-1" ,
53
54
expandAllKey = "Shift-Alt-1" ,
54
55
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" ;
61
57
62
58
ExtensionUtils . loadStyleSheet ( module , "main.less" ) ;
63
59
@@ -74,10 +70,10 @@ define(function (require, exports, module) {
74
70
indentFold = require ( "foldhelpers/indentFold" ) ,
75
71
selectionFold = require ( "foldhelpers/foldSelected" ) ;
76
72
73
+
77
74
/** 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
+
81
77
/**
82
78
* Restores the linefolds in the editor using values fetched from the preference store
83
79
* 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) {
116
112
} ) ;
117
113
}
118
114
119
- var saveFolds = prefs . getSetting ( SAVE_FOLD_STATES ) ;
115
+ var saveFolds = prefs . getSetting ( "saveFoldStates" ) ;
120
116
if ( ! editor || ! saveFolds ) {
121
117
return ;
122
118
}
@@ -151,7 +147,7 @@ define(function (require, exports, module) {
151
147
* @param {Editor } editor the editor whose line folds should be saved
152
148
*/
153
149
function saveLineFolds ( editor ) {
154
- var saveFolds = prefs . getSetting ( SAVE_FOLD_STATES ) ;
150
+ var saveFolds = prefs . getSetting ( "saveFoldStates" ) ;
155
151
if ( ! editor || ! saveFolds ) {
156
152
return ;
157
153
}
@@ -267,38 +263,34 @@ define(function (require, exports, module) {
267
263
*/
268
264
function createGutter ( editor ) {
269
265
var cm = editor . _codeMirror ;
270
- var rootElement = editor . getRootElement ( ) ;
271
266
var path = editor . document . file . fullPath , _lineFolds = prefs . getFolds ( path ) ;
272
267
_lineFolds = _lineFolds || { } ;
273
268
cm . _lineFolds = _lineFolds ;
274
269
var gutters = cm . getOption ( "gutters" ) . slice ( 0 ) ;
275
270
276
271
// Reuse any existing fold gutter
277
272
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 ) ;
284
276
cm . setOption ( "gutters" , gutters ) ;
285
277
cm . refresh ( ) ; // force recomputing gutter width - .folding-enabled class affects linenumbers gutter which has existing cached width
286
278
}
287
279
cm . setOption ( "foldGutter" , { onGutterClick : onGutterClick } ) ;
288
280
289
281
$ ( cm . getGutterElement ( ) ) . on ( {
290
282
mouseenter : function ( ) {
291
- if ( prefs . getSetting ( HIDE_UNTIL_MOUSE_OVER ) ) {
283
+ if ( prefs . getSetting ( "hideUntilMouseover" ) ) {
292
284
foldGutter . updateInViewport ( cm ) ;
293
285
} else {
294
- $ ( rootElement ) . addClass ( "over-gutter" ) ;
286
+ $ ( editor . getRootElement ( ) ) . addClass ( "over-gutter" ) ;
295
287
}
296
288
} ,
297
289
mouseleave : function ( ) {
298
- if ( prefs . getSetting ( HIDE_UNTIL_MOUSE_OVER ) ) {
290
+ if ( prefs . getSetting ( "hideUntilMouseover" ) ) {
299
291
foldGutter . clearGutter ( cm ) ;
300
292
} else {
301
- $ ( rootElement ) . removeClass ( "over-gutter" ) ;
293
+ $ ( editor . getRootElement ( ) ) . removeClass ( "over-gutter" ) ;
302
294
}
303
295
}
304
296
} ) ;
@@ -312,12 +304,10 @@ define(function (require, exports, module) {
312
304
var cm = editor . _codeMirror ;
313
305
var gutters = cm . getOption ( "gutters" ) . slice ( 0 ) ;
314
306
var index = gutters . indexOf ( GUTTER_NAME ) ;
315
- var rootElement = editor . getRootElement ( ) ;
316
- $ ( rootElement ) . removeClass ( "folding-enabled" ) ;
307
+ $ ( editor . getRootElement ( ) ) . removeClass ( "folding-enabled" ) ;
317
308
gutters . splice ( index , 1 ) ;
318
309
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
321
311
CodeMirror . defineOption ( "foldGutter" , false , null ) ;
322
312
}
323
313
@@ -326,39 +316,6 @@ define(function (require, exports, module) {
326
316
if ( editor . _codeMirror . getOption ( "gutters" ) . indexOf ( GUTTER_NAME ) === - 1 ) {
327
317
createGutter ( editor ) ;
328
318
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 ;
362
319
}
363
320
}
364
321
@@ -414,12 +371,6 @@ define(function (require, exports, module) {
414
371
Editor . forEveryEditor ( function ( editor ) {
415
372
CodeMirror . commands . unfoldAll ( editor . _codeMirror ) ;
416
373
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
- }
423
374
} ) ;
424
375
}
425
376
@@ -436,10 +387,10 @@ define(function (require, exports, module) {
436
387
// don't, we register helpers explicitly here. We also register a global helper for generic indent-based
437
388
// folding, which cuts across all languages if enabled via preference.
438
389
CodeMirror . registerGlobalHelper ( "fold" , "selectionFold" , function ( mode , cm ) {
439
- return prefs . getSetting ( MAKE_SELECTION_FOLDABLE ) ;
390
+ return prefs . getSetting ( "makeSelectionsFoldable" ) ;
440
391
} , selectionFold ) ;
441
392
CodeMirror . registerGlobalHelper ( "fold" , "indent" , function ( mode , cm ) {
442
- return prefs . getSetting ( ALWAYS_USE_INDENT_FOLD ) ;
393
+ return prefs . getSetting ( "alwaysUseIndentFold" ) ;
443
394
} , indentFold ) ;
444
395
445
396
CodeMirror . registerHelper ( "fold" , "django" , CodeMirror . helpers . fold . brace ) ;
0 commit comments