CustomCssEditor.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { UnControlled as CodeMirror } from 'react-codemirror2';
  4. require('codemirror/lib/codemirror.css');
  5. require('codemirror/addon/display/autorefresh');
  6. require('codemirror/addon/lint/css-lint');
  7. require('codemirror/addon/hint/css-hint');
  8. require('codemirror/addon/hint/show-hint');
  9. require('codemirror/addon/edit/matchbrackets');
  10. require('codemirror/addon/edit/closebrackets');
  11. require('codemirror/mode/css/css');
  12. require('codemirror/theme/eclipse.css');
  13. require('jquery-ui/ui/widgets/resizable');
  14. export default class CustomCssEditor extends React.Component {
  15. constructor(props) {
  16. super(props);
  17. }
  18. render() {
  19. // get initial value from inputElem
  20. const value = this.props.inputElem.value;
  21. return (
  22. <CodeMirror
  23. value={value}
  24. autoFocus={true}
  25. options={{
  26. mode: 'css',
  27. lineNumbers: true,
  28. tabSize: 2,
  29. indentUnit: 2,
  30. theme: 'eclipse',
  31. autoRefresh: true,
  32. matchBrackets: true,
  33. autoCloseBrackets: true,
  34. extraKeys: {"Ctrl-Space": "autocomplete"},
  35. }}
  36. editorDidMount={(editor, next) => {
  37. // resizable with jquery.ui
  38. $(editor.getWrapperElement()).resizable({
  39. resize: function() {
  40. editor.setSize($(this).width(), $(this).height());
  41. }
  42. });
  43. }}
  44. onChange={(editor, data, value) => {
  45. this.props.inputElem.value = value;
  46. }}
  47. />
  48. )
  49. }
  50. }
  51. CustomCssEditor.propTypes = {
  52. inputElem: PropTypes.object.isRequired,
  53. };