Editor.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import AceEditor from "react-ace";
  2. import "ace-builds/webpack-resolver";
  3. import "ace-builds/src-noconflict/mode-html";
  4. import "ace-builds/src-noconflict/mode-css";
  5. import "ace-builds/src-noconflict/mode-javascript";
  6. import "ace-builds/src-noconflict/mode-java";
  7. import "ace-builds/src-noconflict/mode-python";
  8. import "ace-builds/src-noconflict/mode-xml";
  9. import "ace-builds/src-noconflict/mode-sass";
  10. import "ace-builds/src-noconflict/mode-ruby";
  11. import "ace-builds/src-noconflict/mode-markdown";
  12. import "ace-builds/src-noconflict/mode-mysql";
  13. import "ace-builds/src-noconflict/mode-json";
  14. import "ace-builds/src-noconflict/mode-handlebars";
  15. import "ace-builds/src-noconflict/mode-golang";
  16. import "ace-builds/src-noconflict/mode-csharp";
  17. import "ace-builds/src-noconflict/mode-elixir";
  18. import "ace-builds/src-noconflict/mode-typescript";
  19. import "ace-builds/src-noconflict/ext-language_tools";
  20. import "ace-builds/src-noconflict/theme-monokai";
  21. import "ace-builds/src-noconflict/theme-github";
  22. import "ace-builds/src-noconflict/theme-tomorrow";
  23. import "ace-builds/src-noconflict/theme-kuroir";
  24. import "ace-builds/src-noconflict/theme-twilight";
  25. import "ace-builds/src-noconflict/theme-xcode";
  26. import "ace-builds/src-noconflict/theme-textmate";
  27. import "ace-builds/src-noconflict/theme-terminal";
  28. import "ace-builds/src-noconflict/theme-solarized_dark";
  29. import "ace-builds/src-noconflict/theme-solarized_light";
  30. import { SelectMode } from "../helpers/SelectMode";
  31. import { SelectTheme } from "../helpers/SelectTheme";
  32. import { SelectFontSize } from "../helpers/SelectFontSize";
  33. import "./Editor.css";
  34. export const Editor = ({
  35. data = { type: "", name: "", text: "", index: "" },
  36. onChange,
  37. theme,
  38. font,
  39. }) => {
  40. const changeTheme = (theme) => onChange({ theme });
  41. const changeFont = (font) => onChange({ font });
  42. return (
  43. <div className="all_editors">
  44. {"Mode: "}
  45. <SelectMode
  46. onChange={(type) =>
  47. onChange({ type, text: data.text, name: data.name })
  48. }
  49. value={data.type}
  50. />
  51. <br />
  52. {"Theme: "}
  53. <SelectTheme onChange={changeTheme} value={data.theme} />
  54. <br />
  55. {"FontSize: "}
  56. <SelectFontSize onChange={changeFont} value={data.font} />
  57. <br />
  58. {"Name of editor: "}
  59. <input
  60. placeholder="Enter a name for your editor"
  61. type="text"
  62. value={data.name}
  63. onChange={(e) =>
  64. onChange({ type: data.type, text: data.text, name: e.target.value })
  65. }
  66. />
  67. <AceEditor
  68. className="editor"
  69. value={data.text}
  70. onChange={(text) =>
  71. onChange({ type: data.type, text, name: data.name })
  72. }
  73. placeholder="Your Code"
  74. mode={data.type}
  75. name={data.name}
  76. theme={theme}
  77. fontSize={Number(font)}
  78. showPrintMargin={true}
  79. showGutter={true}
  80. highlightActiveLine={true}
  81. setOptions={{
  82. enableBasicAutocompletion: true,
  83. enableLiveAutocompletion: true,
  84. enableSnippets: true,
  85. showLineNumbers: true,
  86. tabSize: 2,
  87. }}
  88. />
  89. </div>
  90. );
  91. };