CustomScriptEditor.jsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { UnControlled as CodeMirror } from 'react-codemirror2';
  4. require('codemirror/addon/lint/javascript-lint');
  5. require('codemirror/addon/hint/javascript-hint');
  6. require('codemirror/addon/hint/show-hint');
  7. require('codemirror/addon/edit/matchbrackets');
  8. require('codemirror/addon/edit/closebrackets');
  9. require('codemirror/mode/javascript/javascript');
  10. require('~/client/util/codemirror/autorefresh.ext');
  11. require('jquery-ui/ui/widgets/resizable');
  12. export default class CustomScriptEditor extends React.Component {
  13. render() {
  14. return (
  15. <CodeMirror
  16. value={this.props.value}
  17. autoFocus
  18. detach
  19. options={{
  20. mode: 'javascript',
  21. lineNumbers: true,
  22. tabSize: 2,
  23. indentUnit: 2,
  24. theme: 'eclipse',
  25. autoRefresh: { force: true }, // force option is enabled by autorefresh.ext.js -- Yuki Takei
  26. matchBrackets: true,
  27. autoCloseBrackets: true,
  28. extraKeys: { 'Ctrl-Space': 'autocomplete' },
  29. }}
  30. editorDidMount={(editor, next) => {
  31. // resizable with jquery.ui
  32. $(editor.getWrapperElement()).resizable({
  33. resize() {
  34. editor.setSize($(this).width(), $(this).height());
  35. },
  36. });
  37. }}
  38. onChange={(editor, data, value) => {
  39. this.props.onChange(value);
  40. }}
  41. />
  42. );
  43. }
  44. }
  45. CustomScriptEditor.propTypes = {
  46. value: PropTypes.string.isRequired,
  47. onChange: PropTypes.func.isRequired,
  48. };