diff --git a/src/extensions/default/CodeFolding/Prefs.js b/src/extensions/default/CodeFolding/Prefs.js
index 35675ffb496..9903198c3da 100644
--- a/src/extensions/default/CodeFolding/Prefs.js
+++ b/src/extensions/default/CodeFolding/Prefs.js
@@ -37,7 +37,7 @@ define(function (require, exports, module) {
prefs.definePreference("maxFoldLevel", "number", 2,
{name: MAX_FOLD_LEVEL, description: Strings.DESCRIPTION_CODE_FOLDING_MAX_FOLD_LEVEL});
prefs.definePreference("makeSelectionsFoldable", "boolean", true,
- {name: MAKE_SELECTIONS_FOLDABLE, description: MAKE_SELECTIONS_FOLDABLE});
+ {name: MAKE_SELECTIONS_FOLDABLE, description: Strings.DESCRIPTION_CODE_FOLDING_MAKE_SELECTIONS_FOLDABLE});
PreferencesManager.stateManager.definePreference(FOLDS_PREF_KEY, "object", {});
diff --git a/src/extensions/default/CodeFolding/foldhelpers/foldcode.js b/src/extensions/default/CodeFolding/foldhelpers/foldcode.js
index e4a4684e4b3..427e756c28b 100644
--- a/src/extensions/default/CodeFolding/foldhelpers/foldcode.js
+++ b/src/extensions/default/CodeFolding/foldhelpers/foldcode.js
@@ -251,7 +251,7 @@ define(function (require, exports, module) {
* @param {number} start the current position in the document
*/
CodeMirror.registerHelper("fold", "auto", function (cm, start) {
- var helpers = cm.getHelpers(start, "fold"), i, cur;
+ var helpers = cm.getHelpers(start, "fold"), i, range;
//ensure mode helper is loaded if there is one
var mode = cm.getMode().name;
var modeHelper = CodeMirror.fold[mode];
@@ -259,8 +259,8 @@ define(function (require, exports, module) {
helpers.push(modeHelper);
}
for (i = 0; i < helpers.length; i++) {
- cur = helpers[i](cm, start);
- if (cur) { return cur; }
+ range = helpers[i](cm, start);
+ if (range && range.to.line - range.from.line >= prefs.getSetting("minFoldSize")) { return range; }
}
});
}
diff --git a/src/extensions/default/CodeFolding/foldhelpers/foldgutter.js b/src/extensions/default/CodeFolding/foldhelpers/foldgutter.js
index d8eb70498e9..fa1cae12ff7 100644
--- a/src/extensions/default/CodeFolding/foldhelpers/foldgutter.js
+++ b/src/extensions/default/CodeFolding/foldhelpers/foldgutter.js
@@ -317,6 +317,21 @@ define(function (require, exports, module) {
}, 400);
}
+ /**
+ * Triggered when the cursor moves in the editor and used to detect text selection changes
+ * in the editor.
+ * @param {!CodeMirror} cm the CodeMirror instance for the active editor
+ */
+ function onCursorActivity(cm) {
+ var state = cm.state.foldGutter;
+ window.clearTimeout(state.changeUpdate);
+ state.changeUpdate = window.setTimeout(function () {
+ var from = cm.getCursor("from"),
+ to = cm.getCursor("to");
+ updateInViewport(cm, from.line, to.line);
+ }, 400);
+ }
+
/**
* Triggered when a code segment is folded.
* @param {!CodeMirror} cm the CodeMirror instance for the active editor
@@ -356,7 +371,7 @@ define(function (require, exports, module) {
cm.off("gutterClick", old.onGutterClick);
cm.off("change", onChange);
cm.off("viewportChange", onViewportChange);
- cm.off("cursorActivity", onViewportChange);
+ cm.off("cursorActivity", onCursorActivity);
cm.off("fold", onFold);
cm.off("unfold", onUnFold);
@@ -368,7 +383,7 @@ define(function (require, exports, module) {
cm.on("gutterClick", val.onGutterClick);
cm.on("change", onChange);
cm.on("viewportChange", onViewportChange);
- cm.on("cursorActivity", onViewportChange);
+ cm.on("cursorActivity", onCursorActivity);
cm.on("fold", onFold);
cm.on("unfold", onUnFold);
cm.on("swapDoc", updateInViewport);
diff --git a/src/extensions/default/CodeFolding/main.js b/src/extensions/default/CodeFolding/main.js
index 2dc5c4586a2..8e6e6766160 100644
--- a/src/extensions/default/CodeFolding/main.js
+++ b/src/extensions/default/CodeFolding/main.js
@@ -369,6 +369,7 @@ define(function (require, exports, module) {
KeyBindingManager.addBinding(COLLAPSE, collapseKey);
KeyBindingManager.addBinding(EXPAND, expandKey);
+
// Add gutters & restore saved expand/collapse state in all currently open editors
Editor.forEveryEditor(function (editor) {
enableFoldingInEditor(editor);
diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js
index bb860d7ba3a..9428f8d6b7e 100644
--- a/src/nls/root/strings.js
+++ b/src/nls/root/strings.js
@@ -600,7 +600,7 @@ define({
"CMD_RESTART_NODE" : "Restart Node",
"CMD_SHOW_ERRORS_IN_STATUS_BAR" : "Show Errors in Status Bar",
"CMD_OPEN_BRACKETS_SOURCE" : "Open {APP_NAME} Source",
-
+
"CREATING_LAUNCH_SCRIPT_TITLE" : "{APP_NAME} Command Line Shortcut",
"ERROR_CREATING_LAUNCH_SCRIPT" : "An error occurred while installing the command line shortcut. Please try these troubleshooting suggestions.
Reason: {0}",
"ERROR_CLTOOLS_RMFAILED" : "Unable to remove existing /usr/local/bin/brackets
symlink.",
@@ -664,7 +664,7 @@ define({
"EXPAND_ALL" : "Expand All",
"COLLAPSE_CURRENT" : "Collapse Current",
"EXPAND_CURRENT" : "Expand Current",
-
+
// Descriptions of core preferences
"DESCRIPTION_CLOSE_BRACKETS" : "true to automatically close braces, brackets and parentheses",
"DESCRIPTION_CLOSE_OTHERS_ABOVE" : "false to remove the \"Close Others Above\" from the Working Files context menu",
@@ -681,6 +681,7 @@ define({
"DESCRIPTION_CODE_FOLDING_MAX_FOLD_LEVEL" : "Limits how many levels deep Collapse All applies",
"DESCRIPTION_CODE_FOLDING_MIN_FOLD_SIZE" : "Minimum lines before a collapsible section icon appears",
"DESCRIPTION_CODE_FOLDING_SAVE_FOLD_STATES" : "true to remember collapsed sections if you close and reopen a file or project",
+ "DESCRIPTION_CODE_FOLDING_MAKE_SELECTIONS_FOLDABLE": "true to enable code folding on selected text in the editor",
"DESCRIPTION_ATTR_HINTS" : "Enable/disable HTML attribute hints",
"DESCRIPTION_CSS_PROP_HINTS" : "Enable/disable CSS/LESS/SCSS property hints",
"DESCRIPTION_JS_HINTS" : "Enable/disable JavaScript code hints",