CustomCssEditor.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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('jquery-ui/ui/widgets/resizable');
  13. export default class CustomCssEditor extends React.Component {
  14. constructor(props) {
  15. super(props);
  16. }
  17. render() {
  18. // get initial value from inputElem
  19. const value = this.props.inputElem.value;
  20. return (
  21. <CodeMirror
  22. value={value}
  23. autoFocus={true}
  24. options={{
  25. mode: 'css',
  26. lineNumbers: true,
  27. tabSize: 2,
  28. indentUnit: 2,
  29. theme: 'eclipse',
  30. autoRefresh: true,
  31. matchBrackets: true,
  32. autoCloseBrackets: true,
  33. extraKeys: {"Ctrl-Space": "autocomplete"},
  34. }}
  35. editorDidMount={(editor, next) => {
  36. // resizable with jquery.ui
  37. $(editor.getWrapperElement()).resizable({
  38. resize: function() {
  39. editor.setSize($(this).width(), $(this).height());
  40. }
  41. });
  42. }}
  43. onChange={(editor, data, value) => {
  44. this.props.inputElem.value = value;
  45. }}
  46. />
  47. )
  48. }
  49. }
  50. CustomCssEditor.propTypes = {
  51. inputElem: PropTypes.object.isRequired,
  52. };