import React from 'react';
import PropTypes from 'prop-types';
import { withTranslation } from 'react-i18next';
import {
FormGroup, Label, Input,
Dropdown, DropdownToggle, DropdownMenu, DropdownItem,
} from 'reactstrap';
import { createSubscribedElement } from '../UnstatedUtils';
import EditorContainer from '../../services/EditorContainer';
export const defaultEditorOptions = {
theme: 'elegant',
keymapMode: 'default',
styleActiveLine: false,
};
export const defaultPreviewOptions = {
renderMathJaxInRealtime: false,
};
class OptionsSelector extends React.Component {
constructor(props) {
super(props);
const config = this.props.crowi.getConfig();
const isMathJaxEnabled = !!config.env.MATHJAX;
this.state = {
isCddMenuOpened: false,
isMathJaxEnabled,
};
this.availableThemes = [
'eclipse', 'elegant', 'neo', 'mdn-like', 'material', 'dracula', 'monokai', 'twilight',
];
this.keymapModes = {
default: 'Default',
vim: 'Vim',
emacs: 'Emacs',
sublime: 'Sublime Text',
};
this.onChangeTheme = this.onChangeTheme.bind(this);
this.onChangeKeymapMode = this.onChangeKeymapMode.bind(this);
this.onClickStyleActiveLine = this.onClickStyleActiveLine.bind(this);
this.onClickRenderMathJaxInRealtime = this.onClickRenderMathJaxInRealtime.bind(this);
this.onToggleConfigurationDropdown = this.onToggleConfigurationDropdown.bind(this);
}
componentDidMount() {
this.init();
}
init() {
const { editorContainer } = this.props;
this.themeSelectorInputEl.value = editorContainer.state.editorOptions.theme;
this.keymapModeSelectorInputEl.value = editorContainer.state.editorOptions.keymapMode;
}
onChangeTheme() {
const { editorContainer } = this.props;
const newValue = this.themeSelectorInputEl.value;
const newOpts = Object.assign(editorContainer.state.editorOptions, { theme: newValue });
editorContainer.setState({ editorOptions: newOpts });
// save to localStorage
editorContainer.saveOptsToLocalStorage();
}
onChangeKeymapMode() {
const { editorContainer } = this.props;
const newValue = this.keymapModeSelectorInputEl.value;
const newOpts = Object.assign(editorContainer.state.editorOptions, { keymapMode: newValue });
editorContainer.setState({ editorOptions: newOpts });
// save to localStorage
editorContainer.saveOptsToLocalStorage();
}
onClickStyleActiveLine(event) {
const { editorContainer } = this.props;
// keep dropdown opened
this._cddForceOpen = true;
const newValue = !editorContainer.state.editorOptions.styleActiveLine;
const newOpts = Object.assign(editorContainer.state.editorOptions, { styleActiveLine: newValue });
editorContainer.setState({ editorOptions: newOpts });
// save to localStorage
editorContainer.saveOptsToLocalStorage();
}
onClickRenderMathJaxInRealtime(event) {
const { editorContainer } = this.props;
const newValue = !editorContainer.state.previewOptions.renderMathJaxInRealtime;
const newOpts = Object.assign(editorContainer.state.previewOptions, { renderMathJaxInRealtime: newValue });
editorContainer.setState({ previewOptions: newOpts });
// save to localStorage
editorContainer.saveOptsToLocalStorage();
}
onToggleConfigurationDropdown(newValue) {
this.setState({ isCddMenuOpened: !this.state.isCddMenuOpened });
}
renderThemeSelector() {
const optionElems = this.availableThemes.map((theme) => {
return ;
});
return (
${label}`;
optionElems.push(
,
);
}
return (
MathJax Rendering