diff --git a/app/addons/components/components/codeeditor.js b/app/addons/components/components/codeeditor.js
index ca7a9e3a9..7e37a0c6f 100644
--- a/app/addons/components/components/codeeditor.js
+++ b/app/addons/components/components/codeeditor.js
@@ -11,13 +11,20 @@
// the License.
import React from "react";
import FauxtonAPI from "../../../core/api";
-import ace from "brace";
-import "brace/ext/searchbox";
+import AceEditor from "react-ace";
+import ace from 'ace-builds';
+import "ace-builds/src-min-noconflict/ext-searchbox";
import {StringEditModal} from './stringeditmodal';
+import 'ace-builds/css/theme/idle_fingers.css';
+import 'ace-builds/css/ace.css';
+// importing the webpack resolver enables dynamically loading modes, which is required for syntax checking
+import 'ace-builds/webpack-resolver';
-require('brace/mode/javascript');
-require('brace/mode/json');
-require('brace/theme/idle_fingers');
+require('ace-builds/src-noconflict/mode-javascript');
+require('ace-builds/src-noconflict/mode-json');
+require('ace-builds/src-noconflict/theme-idle_fingers');
+
+ace.config.set("useStrictCSP", true);
export class CodeEditor extends React.Component {
static defaultProps = {
@@ -88,17 +95,12 @@ export class CodeEditor extends React.Component {
}
);
- // suppresses an Ace editor error
- this.editor.$blockScrolling = Infinity;
-
if (shouldUpdateCode) {
this.setValue(props.defaultCode);
}
- this.editor.setShowPrintMargin(props.showPrintMargin);
this.editor.autoScrollEditorIntoView = props.autoScrollEditorIntoView;
- this.editor.setOption('highlightActiveLine', this.props.highlightActiveLine);
if (this.props.setHeightToLineCount) {
this.setHeightToLineCount();
@@ -109,16 +111,6 @@ export class CodeEditor extends React.Component {
}
this.addCommands();
- this.editor.getSession().setMode('ace/mode/' + props.mode);
- this.editor.setTheme('ace/theme/' + props.theme);
- this.editor.setFontSize(props.fontSize);
- this.editor.getSession().setTabSize(2);
- this.editor.getSession().setUseSoftTabs(true);
-
- if (this.props.autoFocus) {
- this.editor.focus();
- }
- this.editor.setReadOnly(props.disabled);
};
addCommands = () => {
@@ -128,8 +120,6 @@ export class CodeEditor extends React.Component {
};
setupEvents = () => {
- this.editor.on('blur', _.bind(this.onBlur, this));
- this.editor.on('change', _.bind(this.onContentChange, this));
if (this.props.stringEditModalEnabled) {
this.editor.on('changeSelection', _.bind(this.showHideEditStringGutterIcon, this));
@@ -179,10 +169,6 @@ export class CodeEditor extends React.Component {
componentDidMount() {
this.setupAce(this.props, true);
this.setupEvents();
-
- if (this.props.autoFocus) {
- this.editor.focus();
- }
}
componentWillUnmount() {
@@ -357,10 +343,35 @@ export class CodeEditor extends React.Component {
this.editor.getSelection().moveCursorUp();
};
+ onAceLoad = (ace) => {
+ this.ace = ace;
+ };
+
render() {
return (
-
this.ace = node} className="js-editor" id={this.props.id}>
+