diff --git a/Documentation/rest-api-accounts.txt b/Documentation/rest-api-accounts.txt index 495dd586c7..7497a64503 100644 --- a/Documentation/rest-api-accounts.txt +++ b/Documentation/rest-api-accounts.txt @@ -1346,7 +1346,8 @@ link:#edit-preferences-info[EditPreferencesInfo] entity. "hide_top_menu": true, "show_whitespace_errors": true, "hide_line_numbers": true, - "match_brackets": true + "match_brackets": true, + "auto_close_brackets": true } ---- @@ -1377,7 +1378,8 @@ link:#edit-preferences-info[EditPreferencesInfo] entity. "show_whitespace_errors": true, "syntax_highlighting": true, "hide_line_numbers": true, - "match_brackets": true + "match_brackets": true, + "auto_close_brackets": true } ---- @@ -1785,6 +1787,8 @@ Whether syntax highlighting should be enabled. Whether line numbers should be hidden. |`match_brackets` |not set if `false`| Whether matching brackets should be highlighted. +|`auto_close_brackets` |not set if `false`| +Whether brackets and quotes should be auto-closed during typing. |=========================================== [[email-info]] diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/EditPreferencesIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/EditPreferencesIT.java index 314930fe47..8770c3c47e 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/EditPreferencesIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/EditPreferencesIT.java @@ -44,6 +44,7 @@ public class EditPreferencesIT extends AbstractDaemonTest { assertThat(out.syntaxHighlighting).isTrue(); assertThat(out.hideLineNumbers).isNull(); assertThat(out.matchBrackets).isTrue(); + assertThat(out.autoCloseBrackets).isNull(); assertThat(out.theme).isEqualTo(Theme.DEFAULT); assertThat(out.keyMapType).isEqualTo(KeyMapType.DEFAULT); @@ -57,6 +58,7 @@ public class EditPreferencesIT extends AbstractDaemonTest { out.syntaxHighlighting = false; out.hideLineNumbers = true; out.matchBrackets = false; + out.autoCloseBrackets = true; out.theme = Theme.TWILIGHT; out.keyMapType = KeyMapType.EMACS; @@ -86,6 +88,7 @@ public class EditPreferencesIT extends AbstractDaemonTest { assertThat(out.syntaxHighlighting).isNull(); assertThat(out.hideLineNumbers).isEqualTo(in.hideLineNumbers); assertThat(out.matchBrackets).isNull(); + assertThat(out.autoCloseBrackets).isEqualTo(in.autoCloseBrackets); assertThat(out.theme).isEqualTo(in.theme); assertThat(out.keyMapType).isEqualTo(in.keyMapType); } diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/EditPreferencesInfo.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/EditPreferencesInfo.java index e42f3c9343..3e455230c1 100644 --- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/EditPreferencesInfo.java +++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/EditPreferencesInfo.java @@ -25,6 +25,7 @@ public class EditPreferencesInfo { public Boolean syntaxHighlighting; public Boolean hideLineNumbers; public Boolean matchBrackets; + public Boolean autoCloseBrackets; public Theme theme; public KeyMapType keyMapType; @@ -39,6 +40,7 @@ public class EditPreferencesInfo { i.syntaxHighlighting = true; i.hideLineNumbers = false; i.matchBrackets = true; + i.autoCloseBrackets = false; i.theme = Theme.DEFAULT; i.keyMapType = KeyMapType.DEFAULT; return i; diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/EditPreferences.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/EditPreferences.java index 165ec6a6b6..8ee573ecae 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/EditPreferences.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/EditPreferences.java @@ -31,6 +31,7 @@ public class EditPreferences extends JavaScriptObject { p.syntaxHighlighting(in.syntaxHighlighting); p.hideLineNumbers(in.hideLineNumbers); p.matchBrackets(in.matchBrackets); + p.autoCloseBrackets(in.autoCloseBrackets); p.theme(in.theme); p.keyMapType(in.keyMapType); return p; @@ -46,6 +47,7 @@ public class EditPreferences extends JavaScriptObject { p.syntaxHighlighting = syntaxHighlighting(); p.hideLineNumbers = hideLineNumbers(); p.matchBrackets = matchBrackets(); + p.autoCloseBrackets = autoCloseBrackets(); p.theme = theme(); p.keyMapType = keyMapType(); } @@ -69,6 +71,7 @@ public class EditPreferences extends JavaScriptObject { public final native void syntaxHighlighting(boolean s) /*-{ this.syntax_highlighting = s }-*/; public final native void hideLineNumbers(boolean s) /*-{ this.hide_line_numbers = s }-*/; public final native void matchBrackets(boolean m) /*-{ this.match_brackets = m }-*/; + public final native void autoCloseBrackets(boolean c) /*-{ this.auto_close_brackets = c }-*/; public final Theme theme() { String s = themeRaw(); @@ -91,6 +94,7 @@ public class EditPreferences extends JavaScriptObject { public final native boolean syntaxHighlighting() /*-{ return this.syntax_highlighting || false }-*/; public final native boolean hideLineNumbers() /*-{ return this.hide_line_numbers || false }-*/; public final native boolean matchBrackets() /*-{ return this.match_brackets || false }-*/; + public final native boolean autoCloseBrackets() /*-{ return this.auto_close_brackets || false }-*/; private final native int get(String n, int d) /*-{ return this.hasOwnProperty(n) ? this[n] : d }-*/; protected EditPreferences() { diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.java index b7326222b2..f900c94ac5 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.java @@ -63,6 +63,7 @@ class EditPreferencesBox extends Composite { @UiField ToggleButton whitespaceErrors; @UiField ToggleButton lineNumbers; @UiField ToggleButton matchBrackets; + @UiField ToggleButton autoCloseBrackets; @UiField ListBox theme; @UiField ListBox keyMap; @UiField Button apply; @@ -87,6 +88,7 @@ class EditPreferencesBox extends Composite { whitespaceErrors.setValue(prefs.showWhitespaceErrors()); lineNumbers.setValue(prefs.hideLineNumbers()); matchBrackets.setValue(prefs.matchBrackets()); + autoCloseBrackets.setValue(prefs.autoCloseBrackets()); setTheme(prefs.theme()); setKeyMapType(prefs.keyMapType()); } @@ -157,6 +159,12 @@ class EditPreferencesBox extends Composite { view.getEditor().setOption("matchBrackets", prefs.matchBrackets()); } + @UiHandler("autoCloseBrackets") + void onCloseBrackets(ValueChangeEvent e) { + prefs.autoCloseBrackets(e.getValue()); + view.getEditor().setOption("autoCloseBrackets", prefs.autoCloseBrackets()); + } + @UiHandler("theme") void onTheme(@SuppressWarnings("unused") ChangeEvent e) { final Theme newTheme = Theme.valueOf(theme.getValue(theme.getSelectedIndex())); diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.ui.xml b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.ui.xml index 71847ed9c5..ccf620c94a 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.ui.xml +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.ui.xml @@ -229,6 +229,13 @@ limitations under the License. On + + Auto Close Brackets + + Off + On + + diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditScreen.java index 546b1a3940..3c91d25303 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditScreen.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditScreen.java @@ -447,6 +447,7 @@ public class EditScreen extends Screen { .set("tabSize", prefs.tabSize()) .set("lineWrapping", false) .set("matchBrackets", prefs.matchBrackets()) + .set("autoCloseBrackets", prefs.autoCloseBrackets()) .set("scrollbarStyle", "overlay") .set("styleSelectedText", true) .set("showTrailingSpace", prefs.showWhitespaceErrors()) diff --git a/lib/codemirror/cm.defs b/lib/codemirror/cm.defs index aa20dbfc1f..ca1c9ae6fc 100644 --- a/lib/codemirror/cm.defs +++ b/lib/codemirror/cm.defs @@ -14,6 +14,7 @@ CM_JS = [ CM_ADDONS = [ 'dialog/dialog.js', + 'edit/closebrackets.js', 'edit/matchbrackets.js', 'edit/trailingspace.js', 'scroll/annotatescrollbar.js',