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}>
+