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