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.AutocloseTags')} +

+
+ dispatch(setAutocloseTags(true))} + aria-label={t('Preferences.AutocloseTagsOnARIA')} + name="autoclosetagsquotes" + id="autoclosetagsquotes-on" + className="preference__radio-button" + value="On" + checked={autoclosetags} + /> + + dispatch(setAutocloseTags(false))} + aria-label={t('Preferences.AutocloseTagsOffARIA')} + name="autoclosetagsquotes" + id="autoclosetagsquotes-off" + className="preference__radio-button" + value="Off" + checked={!autoclosetags} + /> + +
+

{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": "不加上補全提示",