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