CustomHeaderEditor.jsx 1.4 KB

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