From b590be337b3aaf32390850a06d3bbbb567a4928a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Mon, 4 Mar 2013 04:38:54 -0300 Subject: [PATCH 1/2] Adding the CodeMirror built-in Auto Close Brackets addon --- src/command/Commands.js | 1 + src/command/DefaultMenus.js | 1 + src/editor/Editor.js | 36 ++++++++++++++++++++++++++++++------ src/editor/EditorManager.js | 13 +++++++++++++ src/index.html | 1 + src/nls/root/strings.js | 3 ++- 6 files changed, 48 insertions(+), 7 deletions(-) diff --git a/src/command/Commands.js b/src/command/Commands.js index d584f16be2e..b1a0821995a 100644 --- a/src/command/Commands.js +++ b/src/command/Commands.js @@ -77,6 +77,7 @@ define(function (require, exports, module) { exports.VIEW_INCREASE_FONT_SIZE = "view.increaseFontSize"; exports.VIEW_DECREASE_FONT_SIZE = "view.decreaseFontSize"; exports.VIEW_RESTORE_FONT_SIZE = "view.restoreFontSize"; + exports.TOGGLE_CLOSE_BRACKETS = "view.autoCloseBrackets"; exports.TOGGLE_JSLINT = "debug.jslint"; exports.SORT_WORKINGSET_BY_ADDED = "view.sortWorkingSetByAdded"; exports.SORT_WORKINGSET_BY_NAME = "view.sortWorkingSetByName"; diff --git a/src/command/DefaultMenus.js b/src/command/DefaultMenus.js index d9a24dbc729..5896a2c6ffe 100644 --- a/src/command/DefaultMenus.js +++ b/src/command/DefaultMenus.js @@ -106,6 +106,7 @@ define(function (require, exports, module) { menu.addMenuItem(Commands.VIEW_DECREASE_FONT_SIZE); menu.addMenuItem(Commands.VIEW_RESTORE_FONT_SIZE); menu.addMenuDivider(); + menu.addMenuItem(Commands.TOGGLE_CLOSE_BRACKETS); menu.addMenuItem(Commands.TOGGLE_JSLINT); /* diff --git a/src/editor/Editor.js b/src/editor/Editor.js index 6341ebd7dd7..94913c703af 100644 --- a/src/editor/Editor.js +++ b/src/editor/Editor.js @@ -74,7 +74,7 @@ define(function (require, exports, module) { ViewUtils = require("utils/ViewUtils"); var PREFERENCES_CLIENT_ID = "com.adobe.brackets.Editor", - defaultPrefs = { useTabChar: false, tabSize: 4, indentUnit: 4 }; + defaultPrefs = { useTabChar: false, tabSize: 4, indentUnit: 4, closeBrackets: true }; /** Editor preferences */ var _prefs = PreferencesManager.getPreferenceStorage(PREFERENCES_CLIENT_ID, defaultPrefs); @@ -82,12 +82,15 @@ define(function (require, exports, module) { /** @type {boolean} Global setting: When inserting new text, use tab characters? (instead of spaces) */ var _useTabChar = _prefs.getValue("useTabChar"); - /** @type {boolean} Global setting: Tab size */ + /** @type {number} Global setting: Tab size */ var _tabSize = _prefs.getValue("tabSize"); - /** @type {boolean} Global setting: Indent unit (i.e. number of spaces when indenting) */ + /** @type {number} Global setting: Indent unit (i.e. number of spaces when indenting) */ var _indentUnit = _prefs.getValue("indentUnit"); + /** @type {boolean} Global setting: Auto closes (, {, [, " and ' */ + var _closeBrackets = _prefs.getValue("closeBrackets"); + /** @type {boolean} Guard flag to prevent focus() reentrancy (via blur handlers), even across Editors */ var _duringFocus = false; @@ -360,6 +363,7 @@ define(function (require, exports, module) { matchBrackets: true, dragDrop: false, // work around issue #1123 extraKeys: codeMirrorKeyMap, + autoCloseBrackets: _closeBrackets, autoCloseTags: { whenOpening: true, whenClosing: true, @@ -1316,7 +1320,7 @@ define(function (require, exports, module) { }; /** @type {boolean} Gets whether all Editors use tab characters (vs. spaces) when inserting new text */ - Editor.getUseTabChar = function (value) { + Editor.getUseTabChar = function () { return _useTabChar; }; @@ -1334,7 +1338,7 @@ define(function (require, exports, module) { }; /** @type {number} Get indent unit */ - Editor.getTabSize = function (value) { + Editor.getTabSize = function () { return _tabSize; }; @@ -1352,10 +1356,30 @@ define(function (require, exports, module) { }; /** @type {number} Get indentation width */ - Editor.getIndentUnit = function (value) { + Editor.getIndentUnit = function () { return _indentUnit; }; + + /** + * Sets the auto close brackets. Affects all Editors. + * @param {boolean} value + */ + Editor.setCloseBrackets = function (value) { + _closeBrackets = value; + _instances.forEach(function (editor) { + editor._codeMirror.setOption("autoCloseBrackets", _closeBrackets); + }); + + _prefs.setValue("closeBrackets", Boolean(_closeBrackets)); + }; + + /** @type {boolean} Gets whether all Editors use auto close brackets */ + Editor.getCloseBrackets = function () { + return _closeBrackets; + }; + + // Global commands that affect the currently focused Editor instance, wherever it may be CommandManager.register(Strings.CMD_SELECT_ALL, Commands.EDIT_SELECT_ALL, _handleSelectAll); diff --git a/src/editor/EditorManager.js b/src/editor/EditorManager.js index ff8e5851cce..2418a989e7f 100644 --- a/src/editor/EditorManager.js +++ b/src/editor/EditorManager.js @@ -691,6 +691,16 @@ define(function (require, exports, module) { return result.promise(); } + /** + * @private + * Activates/Deactivates the automatic close brackets option + */ + function _toggleCloseBrackets() { + Editor.setCloseBrackets(!Editor.getCloseBrackets()); + CommandManager.get(Commands.TOGGLE_CLOSE_BRACKETS).setChecked(Editor.getCloseBrackets()); + } + + function _updateLanguageInfo(editor) { $languageInfo.text(editor.document.getLanguage().getName()); } @@ -824,6 +834,9 @@ define(function (require, exports, module) { // Initialize: command handlers CommandManager.register(Strings.CMD_TOGGLE_QUICK_EDIT, Commands.TOGGLE_QUICK_EDIT, _toggleQuickEdit); + CommandManager.register(Strings.CMD_TOGGLE_CLOSE_BRACKETS, Commands.TOGGLE_CLOSE_BRACKETS, _toggleCloseBrackets) + .setChecked(Editor.getCloseBrackets()); + // Initialize: register listeners $(DocumentManager).on("currentDocumentChange", _onCurrentDocumentChange); diff --git a/src/index.html b/src/index.html index 9e59f214f5e..b9d0d443ff5 100644 --- a/src/index.html +++ b/src/index.html @@ -100,6 +100,7 @@ + diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js index c83aabb5f8d..59ddc103f3c 100644 --- a/src/nls/root/strings.js +++ b/src/nls/root/strings.js @@ -201,7 +201,7 @@ define({ "CMD_BLOCK_COMMENT" : "Toggle Block Comment", "CMD_LINE_UP" : "Move Line Up", "CMD_LINE_DOWN" : "Move Line Down", - + // View menu commands "VIEW_MENU" : "View", "CMD_HIDE_SIDEBAR" : "Hide Sidebar", @@ -209,6 +209,7 @@ define({ "CMD_INCREASE_FONT_SIZE" : "Increase Font Size", "CMD_DECREASE_FONT_SIZE" : "Decrease Font Size", "CMD_RESTORE_FONT_SIZE" : "Restore Font Size", + "CMD_TOGGLE_CLOSE_BRACKETS" : "Enable Close Brackets", "CMD_SORT_WORKINGSET_BY_ADDED" : "Sort by Added", "CMD_SORT_WORKINGSET_BY_NAME" : "Sort by Name", "CMD_SORT_WORKINGSET_BY_TYPE" : "Sort by Type", From 319439cf8e3c7ba917af36425ddbd156a491d220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Thu, 7 Mar 2013 21:05:38 -0300 Subject: [PATCH 2/2] Changes after review --- src/command/DefaultMenus.js | 3 ++- src/editor/Editor.js | 4 ++-- src/editor/EditorManager.js | 5 +++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/command/DefaultMenus.js b/src/command/DefaultMenus.js index 5896a2c6ffe..1d8c0527cc8 100644 --- a/src/command/DefaultMenus.js +++ b/src/command/DefaultMenus.js @@ -95,6 +95,8 @@ define(function (require, exports, module) { menu.addMenuDivider(); menu.addMenuItem(Commands.EDIT_LINE_COMMENT); menu.addMenuItem(Commands.EDIT_BLOCK_COMMENT); + menu.addMenuDivider(); + menu.addMenuItem(Commands.TOGGLE_CLOSE_BRACKETS); /* * View menu @@ -106,7 +108,6 @@ define(function (require, exports, module) { menu.addMenuItem(Commands.VIEW_DECREASE_FONT_SIZE); menu.addMenuItem(Commands.VIEW_RESTORE_FONT_SIZE); menu.addMenuDivider(); - menu.addMenuItem(Commands.TOGGLE_CLOSE_BRACKETS); menu.addMenuItem(Commands.TOGGLE_JSLINT); /* diff --git a/src/editor/Editor.js b/src/editor/Editor.js index 5e06a69288e..dbc956ac7c0 100644 --- a/src/editor/Editor.js +++ b/src/editor/Editor.js @@ -73,7 +73,7 @@ define(function (require, exports, module) { ViewUtils = require("utils/ViewUtils"); var PREFERENCES_CLIENT_ID = "com.adobe.brackets.Editor", - defaultPrefs = { useTabChar: false, tabSize: 4, indentUnit: 4, closeBrackets: true }; + defaultPrefs = { useTabChar: false, tabSize: 4, indentUnit: 4, closeBrackets: false }; /** Editor preferences */ var _prefs = PreferencesManager.getPreferenceStorage(PREFERENCES_CLIENT_ID, defaultPrefs); @@ -1367,4 +1367,4 @@ define(function (require, exports, module) { exports.Editor = Editor; exports.BOUNDARY_CHECK_NORMAL = BOUNDARY_CHECK_NORMAL; exports.BOUNDARY_IGNORE_TOP = BOUNDARY_IGNORE_TOP; -}); \ No newline at end of file +}); diff --git a/src/editor/EditorManager.js b/src/editor/EditorManager.js index 24c957cc274..fc3281796d2 100644 --- a/src/editor/EditorManager.js +++ b/src/editor/EditorManager.js @@ -835,12 +835,13 @@ define(function (require, exports, module) { $indentWidthInput.focus(function () { $indentWidthInput.select(); }); _onActiveEditorChange(null, getFocusedEditor(), null); + + CommandManager.get(Commands.TOGGLE_CLOSE_BRACKETS).setChecked(Editor.getCloseBrackets()); } // Initialize: command handlers CommandManager.register(Strings.CMD_TOGGLE_QUICK_EDIT, Commands.TOGGLE_QUICK_EDIT, _toggleQuickEdit); - CommandManager.register(Strings.CMD_TOGGLE_CLOSE_BRACKETS, Commands.TOGGLE_CLOSE_BRACKETS, _toggleCloseBrackets) - .setChecked(Editor.getCloseBrackets()); + CommandManager.register(Strings.CMD_TOGGLE_CLOSE_BRACKETS, Commands.TOGGLE_CLOSE_BRACKETS, _toggleCloseBrackets); // Initialize: register listeners