|
@@ -28,11 +28,6 @@ require('codemirror/addon/fold/brace-fold');
|
|
|
require('codemirror/mode/gfm/gfm');
|
|
require('codemirror/mode/gfm/gfm');
|
|
|
|
|
|
|
|
require('codemirror/theme/elegant.css');
|
|
require('codemirror/theme/elegant.css');
|
|
|
-require('codemirror/theme/neo.css');
|
|
|
|
|
-require('codemirror/theme/mdn-like.css');
|
|
|
|
|
-require('codemirror/theme/material.css');
|
|
|
|
|
-require('codemirror/theme/monokai.css');
|
|
|
|
|
-require('codemirror/theme/twilight.css');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import Dropzone from 'react-dropzone';
|
|
import Dropzone from 'react-dropzone';
|
|
@@ -64,6 +59,8 @@ export default class Editor extends React.Component {
|
|
|
isUploading: false,
|
|
isUploading: false,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+ this.loadedThemeSet = new Set('elegant');
|
|
|
|
|
+
|
|
|
// manage keymap w/o state because 'cm.setOption' is invoked manually
|
|
// manage keymap w/o state because 'cm.setOption' is invoked manually
|
|
|
this.currentKeymapMode = undefined;
|
|
this.currentKeymapMode = undefined;
|
|
|
this.loadedKeymapSet = new Set();
|
|
this.loadedKeymapSet = new Set();
|
|
@@ -98,12 +95,18 @@ export default class Editor extends React.Component {
|
|
|
// set CodeMirror instance as 'CodeMirror' so that CDN addons can reference
|
|
// set CodeMirror instance as 'CodeMirror' so that CDN addons can reference
|
|
|
window.CodeMirror = require('codemirror');
|
|
window.CodeMirror = require('codemirror');
|
|
|
|
|
|
|
|
|
|
+ // load theme
|
|
|
|
|
+ const theme = this.props.editorOptions.theme;
|
|
|
|
|
+ this.loadTheme(theme);
|
|
|
// apply keymapMode
|
|
// apply keymapMode
|
|
|
const keymapMode = this.props.editorOptions.keymapMode;
|
|
const keymapMode = this.props.editorOptions.keymapMode;
|
|
|
this.setKeymapMode(keymapMode);
|
|
this.setKeymapMode(keymapMode);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
componentWillReceiveProps(nextProps) {
|
|
componentWillReceiveProps(nextProps) {
|
|
|
|
|
+ // load theme
|
|
|
|
|
+ const theme = nextProps.editorOptions.theme;
|
|
|
|
|
+ this.loadTheme(theme);
|
|
|
// apply keymapMode
|
|
// apply keymapMode
|
|
|
const keymapMode = nextProps.editorOptions.keymapMode;
|
|
const keymapMode = nextProps.editorOptions.keymapMode;
|
|
|
this.setKeymapMode(keymapMode);
|
|
this.setKeymapMode(keymapMode);
|
|
@@ -162,6 +165,23 @@ export default class Editor extends React.Component {
|
|
|
editor.scrollTo(null, top);
|
|
editor.scrollTo(null, top);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * load Theme
|
|
|
|
|
+ * @see https://codemirror.net/doc/manual.html#config
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param {string} theme
|
|
|
|
|
+ */
|
|
|
|
|
+ loadTheme(theme) {
|
|
|
|
|
+ // load theme
|
|
|
|
|
+ let cssList = [];
|
|
|
|
|
+ if (!this.loadedThemeSet.has(theme)) {
|
|
|
|
|
+ this.loadCss(urljoin(this.cmCdnRoot, `theme/${theme}.min.css`));
|
|
|
|
|
+
|
|
|
|
|
+ // update Set
|
|
|
|
|
+ this.loadedThemeSet.add(theme);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* set Key Maps
|
|
* set Key Maps
|
|
|
* @see https://codemirror.net/doc/manual.html#keymaps
|
|
* @see https://codemirror.net/doc/manual.html#keymaps
|
|
@@ -169,7 +189,6 @@ export default class Editor extends React.Component {
|
|
|
* @param {string} keymapMode 'vim' or 'emacs' or 'sublime'
|
|
* @param {string} keymapMode 'vim' or 'emacs' or 'sublime'
|
|
|
*/
|
|
*/
|
|
|
setKeymapMode(keymapMode) {
|
|
setKeymapMode(keymapMode) {
|
|
|
- const loadCss = this.loadCss;
|
|
|
|
|
|
|
|
|
|
if (this.currentKeymapMode === keymapMode) {
|
|
if (this.currentKeymapMode === keymapMode) {
|
|
|
// do nothing
|
|
// do nothing
|
|
@@ -182,6 +201,7 @@ export default class Editor extends React.Component {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ const loadCss = this.loadCss;
|
|
|
let scriptList = [];
|
|
let scriptList = [];
|
|
|
let cssList = [];
|
|
let cssList = [];
|
|
|
|
|
|