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",