diff --git a/client/constants.js b/client/constants.js
index 565d716fa6..20b584b35a 100644
--- a/client/constants.js
+++ b/client/constants.js
@@ -73,6 +73,7 @@ export const SET_TEXT_OUTPUT = 'SET_TEXT_OUTPUT';
export const SET_GRID_OUTPUT = 'SET_GRID_OUTPUT';
export const SET_SOUND_OUTPUT = 'SET_SOUND_OUTPUT';
export const SET_AUTOCLOSE_BRACKETS_QUOTES = 'SET_AUTOCLOSE_BRACKETS_QUOTES';
+export const SET_AUTOCLOSE_TAGS = 'SET_AUTOCLOSE_TAGS';
export const SET_AUTOCOMPLETE_HINTER = 'SET_AUTOCOMPLETE_HINTER';
export const OPEN_PROJECT_OPTIONS = 'OPEN_PROJECT_OPTIONS';
diff --git a/client/modules/IDE/actions/preferences.js b/client/modules/IDE/actions/preferences.js
index e0473bd995..f478d59d70 100644
--- a/client/modules/IDE/actions/preferences.js
+++ b/client/modules/IDE/actions/preferences.js
@@ -69,6 +69,24 @@ export function setAutocloseBracketsQuotes(value) {
};
}
+export function setAutocloseTags(value) {
+ return (dispatch, getState) => {
+ dispatch({
+ type: ActionTypes.SET_AUTOCLOSE_TAGS,
+ value
+ });
+ const state = getState();
+ if (state.user.authenticated) {
+ const formParams = {
+ preferences: {
+ autoclosetags: value
+ }
+ };
+ updatePreferences(formParams, dispatch);
+ }
+ };
+}
+
export function setAutocompleteHinter(value) {
return (dispatch, getState) => {
dispatch({
diff --git a/client/modules/IDE/components/Editor/index.jsx b/client/modules/IDE/components/Editor/index.jsx
index 8c1781ee97..005508c0c2 100644
--- a/client/modules/IDE/components/Editor/index.jsx
+++ b/client/modules/IDE/components/Editor/index.jsx
@@ -33,6 +33,7 @@ import 'codemirror/addon/edit/matchbrackets';
import 'codemirror/addon/edit/closebrackets';
import 'codemirror/addon/selection/mark-selection';
import 'codemirror/addon/hint/css-hint';
+import 'codemirror/addon/edit/closetag';
import 'codemirror-colorpicker';
import { JSHINT } from 'jshint';
@@ -123,6 +124,7 @@ class Editor extends React.Component {
autoRenameTags: true
},
autoCloseBrackets: this.props.autocloseBracketsQuotes,
+ autoCloseTags: this.props.autoclosetags,
styleSelectedText: true,
lint: {
onUpdateLinting: (annotations) => {
@@ -264,6 +266,9 @@ class Editor extends React.Component {
this.props.autocloseBracketsQuotes
);
}
+ if (this.props.autoclosetags !== prevProps.autoclosetags) {
+ this._cm.setOption('autoCloseTags', this.props.autoclosetags);
+ }
if (this.props.autocompleteHinter !== prevProps.autocompleteHinter) {
if (!this.props.autocompleteHinter) {
// close the hinter window once the preference is turned off
@@ -588,6 +593,7 @@ class Editor extends React.Component {
Editor.propTypes = {
autocloseBracketsQuotes: PropTypes.bool.isRequired,
+ autoclosetags: PropTypes.bool.isRequired,
autocompleteHinter: PropTypes.bool.isRequired,
lineNumbers: PropTypes.bool.isRequired,
lintWarning: PropTypes.bool.isRequired,
diff --git a/client/modules/IDE/components/Preferences/index.jsx b/client/modules/IDE/components/Preferences/index.jsx
index fa5859400e..8ec329e6a0 100644
--- a/client/modules/IDE/components/Preferences/index.jsx
+++ b/client/modules/IDE/components/Preferences/index.jsx
@@ -16,7 +16,8 @@ import {
setLintWarning,
setAutocloseBracketsQuotes,
setAutocompleteHinter,
- setLinewrap
+ setLinewrap,
+ setAutocloseTags
} from '../../actions/preferences';
export default function Preferences() {
@@ -34,7 +35,8 @@ export default function Preferences() {
gridOutput,
theme,
autocloseBracketsQuotes,
- autocompleteHinter
+ autocompleteHinter,
+ autoclosetags
} = useSelector((state) => state.preferences);
const [state, setState] = useState({ fontSize });
@@ -264,6 +266,45 @@ export default function Preferences() {
+
{t('Preferences.AutocompleteHinter')}
diff --git a/client/modules/IDE/reducers/preferences.js b/client/modules/IDE/reducers/preferences.js
index ed029620e1..778d85b2e6 100644
--- a/client/modules/IDE/reducers/preferences.js
+++ b/client/modules/IDE/reducers/preferences.js
@@ -12,7 +12,8 @@ const initialState = {
autorefresh: false,
language: 'en-US',
autocloseBracketsQuotes: true,
- autocompleteHinter: false
+ autocompleteHinter: false,
+ autoclosetags: true
};
const preferences = (state = initialState, action) => {
@@ -43,6 +44,8 @@ const preferences = (state = initialState, action) => {
return Object.assign({}, state, {
autocloseBracketsQuotes: action.value
});
+ case ActionTypes.SET_AUTOCLOSE_TAGS:
+ return Object.assign({}, state, { autoclosetags: action.value });
case ActionTypes.SET_AUTOCOMPLETE_HINTER:
return Object.assign({}, state, {
autocompleteHinter: action.value
diff --git a/translations/locales/de/translations.json b/translations/locales/de/translations.json
index a6a9b1cb0b..c206707234 100644
--- a/translations/locales/de/translations.json
+++ b/translations/locales/de/translations.json
@@ -150,6 +150,9 @@
"AutocloseBracketsQuotes": "Klammern und Anführungszeichen automatisch schließen",
"AutocloseBracketsQuotesOnARIA": "Klammern und Anführungszeichen automatisch schließen an",
"AutocloseBracketsQuotesOffARIA": "Klammern und Anführungszeichen automatisch schließen aus",
+ "AutocloseTags": "Autoclose Tags",
+ "AutocloseTagsOnARIA": "autoclose tags on",
+ "AutocloseTagsOffARIA": "autoclose tags off",
"WordWrap": "Wortumbruch",
"LineWrapOnARIA": "zeilenumbruch an",
"LineWrapOffARIA": "zeilenumbruch aus",
diff --git a/translations/locales/en-US/translations.json b/translations/locales/en-US/translations.json
index e6877b0f58..fa905008c3 100644
--- a/translations/locales/en-US/translations.json
+++ b/translations/locales/en-US/translations.json
@@ -155,6 +155,9 @@
"AutocloseBracketsQuotes": "Autoclose Brackets and Quotes",
"AutocloseBracketsQuotesOnARIA": "autoclose brackets and quotes on",
"AutocloseBracketsQuotesOffARIA": "autoclose brackets and quotes off",
+ "AutocloseTags": "Autoclose Tags",
+ "AutocloseTagsOnARIA": "autoclose tags on",
+ "AutocloseTagsOffARIA": "autoclose tags off",
"AutocompleteHinter": "Autocomplete Hinter",
"AutocompleteHinterOnARIA": "autocomplete hinter on",
"AutocompleteHinterOffARIA": "autocomplete hinter off",
diff --git a/translations/locales/es-419/translations.json b/translations/locales/es-419/translations.json
index 2964d83a18..1a8237d273 100644
--- a/translations/locales/es-419/translations.json
+++ b/translations/locales/es-419/translations.json
@@ -148,6 +148,9 @@
"AutocloseBracketsQuotes": "Cerrar automáticamente llaves y comillas",
"AutocloseBracketsQuotesOnARIA": "Activar cierre automático de llaves y comillas",
"AutocloseBracketsQuotesOffARIA": "Desactivar cierre automático de llaves y comillas",
+ "AutocloseTags": "Autoclose Tags",
+ "AutocloseTagsOnARIA": "autoclose tags on",
+ "AutocloseTagsOffARIA": "autoclose tags off",
"Off": "Desactivar",
"AutosaveOffARIA": "Grabado automático desactivado",
"WordWrap": "Ajuste automático de línea",
diff --git a/translations/locales/fr-CA/translations.json b/translations/locales/fr-CA/translations.json
index 36a6558c0b..56ec93f6de 100644
--- a/translations/locales/fr-CA/translations.json
+++ b/translations/locales/fr-CA/translations.json
@@ -151,6 +151,9 @@
"AutocloseBracketsQuotes": "Fermeture automatique des crochets et des guillemets",
"AutocloseBracketsQuotesOnARIA": "fermeture automatique des crochets et des guillemets activée",
"AutocloseBracketsQuotesOffARIA": "fermeture automatique des crochets et des guillemets désactivée",
+ "AutocloseTags": "Autoclose Tags",
+ "AutocloseTagsOnARIA": "autoclose tags on",
+ "AutocloseTagsOffARIA": "autoclose tags off",
"WordWrap": "Retour à la ligne automatique",
"LineWrapOnARIA": "retour à la ligne automatique activé",
"LineWrapOffARIA": "retour à la ligne automatique désactivé",
diff --git a/translations/locales/hi/translations.json b/translations/locales/hi/translations.json
index 493005abc6..37901c2b15 100644
--- a/translations/locales/hi/translations.json
+++ b/translations/locales/hi/translations.json
@@ -150,6 +150,9 @@
"AutocloseBracketsQuotes": "ऑटोक्लोज ब्रैकिट और क्वोट",
"AutocloseBracketsQuotesOnARIA": "ऑटोक्लोज ब्रैकिट और क्वोट चालू",
"AutocloseBracketsQuotesOffARIA": "ऑटोक्लोज ब्रैकिट और क्वोट बंद",
+ "AutocloseTags": "ऑटोक्लोज टैग",
+ "AutocloseTagsOnARIA": "ऑटोक्लोज टैग चालू",
+ "AutocloseTagsOffARIA": "ऑटोक्लोज टैग बंद",
"WordWrap": "वर्ड रैप",
"LineWrapOnARIA": "लाइनरैप चालू",
"LineWrapOffARIA": "लाइनरैप बंद",
diff --git a/translations/locales/it/translations.json b/translations/locales/it/translations.json
index 91345c5a18..c12fa864a3 100644
--- a/translations/locales/it/translations.json
+++ b/translations/locales/it/translations.json
@@ -155,6 +155,9 @@
"AutocloseBracketsQuotes": "Auto-chiusura parentesi e virgolette",
"AutocloseBracketsQuotesOnARIA": "Auto-chiusura parentesi e virgolette attivo",
"AutocloseBracketsQuotesOffARIA": "Auto-chiusura parentesi e virgolette disabilitata",
+ "AutocloseTags": "Autoclose Tags",
+ "AutocloseTagsOnARIA": "autoclose tags on",
+ "AutocloseTagsOffARIA": "autoclose tags off",
"WordWrap": "Dividi parole",
"LineWrapOnARIA": "dividi parole attivo",
"LineWrapOffARIA": "dividi parole disabilitato",
diff --git a/translations/locales/ja/translations.json b/translations/locales/ja/translations.json
index b711bf6535..b5df4bee06 100644
--- a/translations/locales/ja/translations.json
+++ b/translations/locales/ja/translations.json
@@ -150,6 +150,9 @@
"AutocloseBracketsQuotes": "括弧を自動的に閉じる",
"AutocloseBracketsQuotesOnARIA": "括弧を自動的に閉じる オン",
"AutocloseBracketsQuotesOffARIA": "括弧を自動的に閉じる オフ",
+ "AutocloseTags": "Autoclose Tags",
+ "AutocloseTagsOnARIA": "autoclose tags on",
+ "AutocloseTagsOffARIA": "autoclose tags off",
"WordWrap": "ワードラップ",
"LineWrapOnARIA": "ラインラップ オン",
"LineWrapOffARIA": "ラインラップ オフ",
diff --git a/translations/locales/ko/translations.json b/translations/locales/ko/translations.json
index 4c9416f371..ddfbbd7454 100644
--- a/translations/locales/ko/translations.json
+++ b/translations/locales/ko/translations.json
@@ -136,6 +136,9 @@
"AutocloseBracketsQuotes": "Autoclose Brackets and Quotes",
"AutocloseBracketsQuotesOnARIA": "autoclose brackets and quotes on",
"AutocloseBracketsQuotesOffARIA": "autoclose brackets and quotes off",
+ "AutocloseTags": "Autoclose Tags",
+ "AutocloseTagsOnARIA": "autoclose tags on",
+ "AutocloseTagsOffARIA": "autoclose tags off",
"WordWrap": "Word Wrap",
"LineWrapOnARIA": "linewrap on",
"LineWrapOffARIA": "linewrap off",
diff --git a/translations/locales/pt-BR/translations.json b/translations/locales/pt-BR/translations.json
index 4f109049f0..554155cfb0 100644
--- a/translations/locales/pt-BR/translations.json
+++ b/translations/locales/pt-BR/translations.json
@@ -150,6 +150,9 @@
"AutocloseBracketsQuotes": "Fechar automaticamente chaves e aspas",
"AutocloseBracketsQuotesOnARIA": "fechar automaticamente chaves e aspas ativado",
"AutocloseBracketsQuotesOffARIA": "fechar automaticamente chaves e aspas desativado",
+ "AutocloseTags": "Autoclose Tags",
+ "AutocloseTagsOnARIA": "autoclose tags on",
+ "AutocloseTagsOffARIA": "autoclose tags off",
"WordWrap": "Ajuste Automático de Linhas",
"LineWrapOnARIA": "ajuste automático de linhas ativado",
"LineWrapOffARIA": "ajuste automático de linhas desativado",
diff --git a/translations/locales/sv/translations.json b/translations/locales/sv/translations.json
index 1af93ce34d..0ffb2d5e25 100644
--- a/translations/locales/sv/translations.json
+++ b/translations/locales/sv/translations.json
@@ -153,6 +153,9 @@
"AutocloseBracketsQuotes": "Automatisk stängnging av parenteser och citattecken",
"AutocloseBracketsQuotesOnARIA": "automatisk stängnging av parenteser och citattecken på",
"AutocloseBracketsQuotesOffARIA": "automatisk stängnging av parenteser och citattecken av",
+ "AutocloseTags": "Autoclose Tags",
+ "AutocloseTagsOnARIA": "autoclose tags on",
+ "AutocloseTagsOffARIA": "autoclose tags off",
"WordWrap": "Radbrytning",
"LineWrapOnARIA": "radbrytning på",
"LineWrapOffARIA": "radbrytning av",
diff --git a/translations/locales/tr/translations.json b/translations/locales/tr/translations.json
index ab85670cbf..4dc59bfea8 100644
--- a/translations/locales/tr/translations.json
+++ b/translations/locales/tr/translations.json
@@ -155,6 +155,9 @@
"AutocloseBracketsQuotes": "Parantez ve Tırnakları Otomatik Kapat",
"AutocloseBracketsQuotesOnARIA": "parantez ve tırnakları otomatik kapatma açık",
"AutocloseBracketsQuotesOffARIA": "parantez ve tırnakları otomatik kapatma kapalı",
+ "AutocloseTags": "Autoclose Tags",
+ "AutocloseTagsOnARIA": "autoclose tags on",
+ "AutocloseTagsOffARIA": "autoclose tags off",
"WordWrap": "Sözcük Kaydırma",
"LineWrapOnARIA": "satır kaydırma açık",
"LineWrapOffARIA": "satır kaydırma kapalı",
diff --git a/translations/locales/uk-UA/translations.json b/translations/locales/uk-UA/translations.json
index 953367a856..1fd9e21550 100644
--- a/translations/locales/uk-UA/translations.json
+++ b/translations/locales/uk-UA/translations.json
@@ -150,6 +150,9 @@
"AutocloseBracketsQuotes": "Автоматично закривати дужки та лапки",
"AutocloseBracketsQuotesOnARIA": "автоматично закривати дужки та лапки",
"AutocloseBracketsQuotesOffARIA": "автоматично закривати дужки та лапки",
+ "AutocloseTags": "Autoclose Tags",
+ "AutocloseTagsOnARIA": "autoclose tags on",
+ "AutocloseTagsOffARIA": "autoclose tags off",
"WordWrap": "Перенесення слів",
"LineWrapOnARIA": "перенесення рядків увімкнено",
"LineWrapOffARIA": "перенесення рядків вимкнено",
diff --git a/translations/locales/zh-CN/translations.json b/translations/locales/zh-CN/translations.json
index b78fceb99b..5b1211e4aa 100644
--- a/translations/locales/zh-CN/translations.json
+++ b/translations/locales/zh-CN/translations.json
@@ -150,6 +150,9 @@
"AutocloseBracketsQuotes": "自动添加反括号和反引号",
"AutocloseBracketsQuotesOnARIA": "打开自动添加反括号和反引号",
"AutocloseBracketsQuotesOffARIA": "关闭自动添加反括号和反引号",
+ "AutocloseTags": "Autoclose Tags",
+ "AutocloseTagsOnARIA": "autoclose tags on",
+ "AutocloseTagsOffARIA": "autoclose tags off",
"AutocompleteHinter": "补全提示",
"AutocompleteHinterOnARIA": "打开补全提示",
"AutocompleteHinterOffARIA": "关闭补全提示",
diff --git a/translations/locales/zh-TW/translations.json b/translations/locales/zh-TW/translations.json
index dd3765b29c..07d3a701c8 100644
--- a/translations/locales/zh-TW/translations.json
+++ b/translations/locales/zh-TW/translations.json
@@ -150,6 +150,9 @@
"AutocloseBracketsQuotes": "自動加上括號與引號",
"AutocloseBracketsQuotesOnARIA": "自動加上括號與引號",
"AutocloseBracketsQuotesOffARIA": "不自動加上括號與引號",
+ "AutocloseTags": "Autoclose Tags",
+ "AutocloseTagsOnARIA": "autoclose tags on",
+ "AutocloseTagsOffARIA": "autoclose tags off",
"AutocompleteHinter": "補全提示",
"AutocompleteHinterOnARIA": "加上補全提示",
"AutocompleteHinterOffARIA": "不加上補全提示",