CustomHeaderEditor.jsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. detach
  17. options={{
  18. mode: 'htmlmixed',
  19. lineNumbers: true,
  20. tabSize: 2,
  21. indentUnit: 2,
  22. theme: 'eclipse',
  23. autoRefresh: { force: true }, // force option is enabled by autorefresh.ext.js -- Yuki Takei
  24. matchBrackets: true,
  25. autoCloseBrackets: true,
  26. extraKeys: { 'Ctrl-Space': 'autocomplete' },
  27. }}
  28. editorDidMount={(editor, next) => {
  29. // resizable with jquery.ui
  30. $(editor.getWrapperElement()).resizable({
  31. resize() {
  32. editor.setSize($(this).width(), $(this).height());
  33. },
  34. });
  35. }}
  36. onChange={(editor, data, value) => {
  37. this.props.onChange(value);
  38. }}
  39. />
  40. );
  41. }
  42. }
  43. CustomHeaderEditor.propTypes = {
  44. value: PropTypes.string.isRequired,
  45. onChange: PropTypes.func.isRequired,
  46. };