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

Commit d36f263

Browse files
committed
Merge pull request #10850 from thehogfather/issue10846
Addresses issue #10846
2 parents ea9d627 + 2c6a356 commit d36f263

File tree

13 files changed

+222
-323
lines changed

13 files changed

+222
-323
lines changed

src/extensions/default/CodeFolding/Prefs.js

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,35 @@
88
/*global define, brackets*/
99
define(function (require, exports, module) {
1010
"use strict";
11-
var PreferencesManager = brackets.getModule("preferences/PreferencesManager"),
12-
prefs = PreferencesManager.getExtensionPrefs("code-folding"),
13-
strings = brackets.getModule("strings"),
14-
store = {},
15-
foldsKey = "folds";
11+
var PreferencesManager = brackets.getModule("preferences/PreferencesManager"),
12+
prefs = PreferencesManager.getExtensionPrefs("code-folding"),
13+
foldsKey = "code-folding.folds",
14+
// preference key strings are here for now since they are not used in any UI
15+
ENABLE_CODE_FOLDING = "Enable code folding",
16+
MIN_FOLD_SIZE = "Minimum fold size",
17+
MIN_FOLD_SIZE_HELP = "Minimum number of lines to allow in a foldable range",
18+
SAVE_FOLD_STATES = "Save fold states",
19+
SAVE_FOLD_STATES_HELP = "Save fold states to disk when editor is closed and restore the folds when reopened",
20+
ALWAYS_USE_INDENT_FOLD = "Always use indent fold",
21+
ALWAYS_USE_INDENT_FOLD_HELP = "Fall back to using level of indentation as a folding guideline if no range finder is found for the current mode.",
22+
FADE_FOLD_BUTTONS = "Fade fold buttons",
23+
FADE_FOLD_BUTTONS_HELP = "Hides the fold buttons unless the mouse is over the gutter",
24+
MAX_FOLD_LEVEL = "Max fold level",
25+
MAX_FOLD_LEVEL_HELP = "Used to limit the number of nested folds to find and collapse when View -> Collapse All is called or Alt is held down when collapsing. Should improve performance for large files.";
1626

1727
//default preference values
1828
prefs.definePreference("enabled", "boolean", true,
19-
{name: strings.ENABLE_CODE_FOLDING, description: strings.ENABLE_CODE_FOLDING});
29+
{name: ENABLE_CODE_FOLDING, description: ENABLE_CODE_FOLDING});
2030
prefs.definePreference("minFoldSize", "number", 2,
21-
{name: strings.MIN_FOLD_SIZE, description: strings.MIN_FOLD_SIZE_HELP});
31+
{name: MIN_FOLD_SIZE, description: MIN_FOLD_SIZE_HELP});
2232
prefs.definePreference("saveFoldStates", "boolean", true,
23-
{name: strings.SAVE_FOLD_STATES, description: strings.SAVE_FOLD_STATES_HELP});
24-
prefs.definePreference("alwaysUseIndentFold", "boolean", true,
25-
{name: strings.ALWAYS_USE_INDENT_FOLD, description: strings.ALWAYS_USE_INDENT_FOLD_HELP});
26-
prefs.definePreference("enableRegionFolding", "boolean", true,
27-
{name: strings.ENABLE_REGION_FOLDING, description: strings.ENABLE_REGION_FOLDING});
33+
{name: SAVE_FOLD_STATES, description: SAVE_FOLD_STATES_HELP});
34+
prefs.definePreference("alwaysUseIndentFold", "boolean", false,
35+
{name: ALWAYS_USE_INDENT_FOLD, description: ALWAYS_USE_INDENT_FOLD_HELP});
2836
prefs.definePreference("fadeFoldButtons", "boolean", false,
29-
{name: strings.FADE_FOLD_BUTTONS, description: strings.FADE_FOLD_BUTTONS_HELP});
37+
{name: FADE_FOLD_BUTTONS, description: FADE_FOLD_BUTTONS_HELP});
3038
prefs.definePreference("maxFoldLevel", "number", 2,
31-
{name: strings.MAX_FOLD_LEVEL, description: strings.MAX_FOLD_LEVEL_HELP});
39+
{name: MAX_FOLD_LEVEL, description: MAX_FOLD_LEVEL_HELP});
3240
prefs.definePreference("folds", "object", {});
3341

3442
/**
@@ -75,8 +83,8 @@ define(function (require, exports, module) {
7583
* @return {Object} the line folds for the document at the specified path
7684
*/
7785
function getFolds(path) {
78-
store = (prefs.get(foldsKey) || {});
79-
return inflate(store[path]);
86+
var folds = (PreferencesManager.getViewState(foldsKey) || {});
87+
return inflate(folds[path]);
8088
}
8189

8290
/**
@@ -85,8 +93,9 @@ define(function (require, exports, module) {
8593
* @param {Object} folds the fold ranges to save for the current document
8694
*/
8795
function setFolds(path, folds) {
88-
store[path] = simplify(folds);
89-
prefs.set(foldsKey, store);
96+
var allFolds = PreferencesManager.getViewState(foldsKey);
97+
allFolds[path] = simplify(folds);
98+
PreferencesManager.setViewState(foldsKey, allFolds);
9099
}
91100

92101
/**
@@ -102,7 +111,7 @@ define(function (require, exports, module) {
102111
* Clears all the saved line folds for all documents.
103112
*/
104113
function clearAllFolds() {
105-
prefs.set(foldsKey, {});
114+
PreferencesManager.setViewState(foldsKey, {});
106115
}
107116

108117
module.exports.getFolds = getFolds;
@@ -113,4 +122,6 @@ define(function (require, exports, module) {
113122

114123
module.exports.clearAllFolds = clearAllFolds;
115124

125+
module.exports.prefBase = prefs;
126+
116127
});

src/extensions/default/CodeFolding/foldhelpers/foldcode.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
2+
// Distributed under an MIT license: http://codemirror.net/LICENSE
13
/**
24
* Based on http://codemirror.net/addon/fold/foldcode.js
35
* @author Patrick Oladimeji
@@ -22,15 +24,15 @@ define(function (require, exports, module) {
2224
if (typeof pos === "number") {
2325
pos = CodeMirror.Pos(pos, 0);
2426
}
27+
2528
var finder = options.rangeFinder || CodeMirror.fold.auto,
26-
minSize = options.minFoldSize || prefs.getSetting("minFoldSize"),
2729
range,
2830
widget,
2931
textRange;
3032

3133
function getRange(allowFolded) {
3234
var range = options.range || finder(cm, pos);
33-
if (!range || range.to.line - range.from.line < minSize) {
35+
if (!range || range.to.line - range.from.line < prefs.getSetting("minFoldSize")) {
3436
return null;
3537
}
3638
var marks = cm.findMarksAt(range.from),
@@ -74,7 +76,7 @@ define(function (require, exports, module) {
7476
range = getRange(false);
7577
}
7678
}
77-
if (!range || range.cleared || force === "unfold" || range.to.line - range.from.line < minSize) {
79+
if (!range || range.cleared || force === "unfold" || range.to.line - range.from.line < prefs.getSetting("minFoldSize")) {
7880
if (range) { range.cleared = false; }
7981
return;
8082
}
@@ -119,7 +121,7 @@ define(function (require, exports, module) {
119121
});
120122

121123
CodeMirror.defineExtension("isFolded", function (line) {
122-
return this._lineFolds[line];
124+
return this._lineFolds && this._lineFolds[line];
123125
});
124126

125127
/**
@@ -203,7 +205,7 @@ define(function (require, exports, module) {
203205
* @param {?number} end the line number for the end of the region to fold
204206
*/
205207
CodeMirror.commands.foldToLevel = function (cm, start, end) {
206-
var rf = CodeMirror.fold.auto, level = prefs.getSetting("maxFoldLevel");
208+
var rf = CodeMirror.fold.auto;
207209
function foldLevel(n, from, to) {
208210
if (n > 0) {
209211
var i = from, range;
@@ -223,7 +225,7 @@ define(function (require, exports, module) {
223225
cm.operation(function () {
224226
start = start === undefined ? cm.firstLine() : start;
225227
end = end || cm.lastLine();
226-
foldLevel(level, start, end);
228+
foldLevel(prefs.getSetting("maxFoldLevel"), start, end);
227229
});
228230
};
229231

src/extensions/default/CodeFolding/foldhelpers/foldgutter.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
2+
// Distributed under an MIT license: http://codemirror.net/LICENSE
13
/**
24
* Based on http://codemirror.net/addon/fold/foldgutter.js
35
* @author Patrick Oladimeji
@@ -220,7 +222,7 @@ define(function (require, exports, module) {
220222
window.clearTimeout(state.changeUpdate);
221223
state.changeUpdate = window.setTimeout(function () {
222224
updateInViewport(cm);
223-
}, prefs.getSetting("foldOnChangeTimeSpan") || 600);
225+
}, 600);
224226
}
225227
}
226228

@@ -251,7 +253,7 @@ define(function (require, exports, module) {
251253
}
252254
});
253255
}
254-
}, prefs.getSetting("updateViewportTimeSpan") || 400);
256+
}, 400);
255257
}
256258

257259
/**
@@ -310,7 +312,6 @@ define(function (require, exports, module) {
310312
});
311313
}
312314

313-
314315
exports.init = init;
315316
exports.clearGutter = clearGutter;
316317
exports.updateInViewport = updateInViewport;

src/extensions/default/CodeFolding/foldhelpers/latex-fold.js

Lines changed: 0 additions & 59 deletions
This file was deleted.

src/extensions/default/CodeFolding/foldhelpers/region-fold.js

Lines changed: 0 additions & 66 deletions
This file was deleted.

0 commit comments

Comments
 (0)