Просмотр исходного кода

blush up the button for renderMathJaxInRealtime

Yuki Takei 8 лет назад
Родитель
Сommit
1eee4848bb
2 измененных файлов с 30 добавлено и 8 удалено
  1. 2 1
      resource/js/app.js
  2. 28 7
      resource/js/components/PageEditor/OptionsSelector.js

+ 2 - 1
resource/js/app.js

@@ -138,7 +138,8 @@ if (pageEditorElem) {
 const pageEditorOptionsSelectorElem = document.getElementById('page-editor-options-selector');
 const pageEditorOptionsSelectorElem = document.getElementById('page-editor-options-selector');
 if (pageEditorOptionsSelectorElem) {
 if (pageEditorOptionsSelectorElem) {
   ReactDOM.render(
   ReactDOM.render(
-    <OptionsSelector editorOptions={editorOptions} previewOptions={previewOptions}
+    <OptionsSelector crowi={crowi}
+        editorOptions={editorOptions} previewOptions={previewOptions}
         onChange={(newEditorOptions, newPreviewOptions) => { // set onChange event handler
         onChange={(newEditorOptions, newPreviewOptions) => { // set onChange event handler
           // set options
           // set options
           pageEditor.setEditorOptions(newEditorOptions);
           pageEditor.setEditorOptions(newEditorOptions);

+ 28 - 7
resource/js/components/PageEditor/OptionsSelector.js

@@ -5,17 +5,22 @@ import FormGroup from 'react-bootstrap/es/FormGroup';
 import FormControl from 'react-bootstrap/es/FormControl';
 import FormControl from 'react-bootstrap/es/FormControl';
 import ControlLabel from 'react-bootstrap/es/ControlLabel';
 import ControlLabel from 'react-bootstrap/es/ControlLabel';
 import Button from 'react-bootstrap/es/Button';
 import Button from 'react-bootstrap/es/Button';
-import DropdownButton from 'react-bootstrap/es/DropdownButton';
-import MenuItem from 'react-bootstrap/es/MenuItem';
+
+import OverlayTrigger  from 'react-bootstrap/es/OverlayTrigger';
+import Tooltip from 'react-bootstrap/es/Tooltip';
 
 
 export default class OptionsSelector extends React.Component {
 export default class OptionsSelector extends React.Component {
 
 
   constructor(props) {
   constructor(props) {
     super(props);
     super(props);
 
 
+    const config = this.props.crowi.getConfig();
+    const isMathJaxEnabled = !!config.env.MATHJAX;
+
     this.state = {
     this.state = {
       editorOptions: this.props.editorOptions || new EditorOptions(),
       editorOptions: this.props.editorOptions || new EditorOptions(),
       previewOptions: this.props.previewOptions || new PreviewOptions(),
       previewOptions: this.props.previewOptions || new PreviewOptions(),
+      isMathJaxEnabled,
     }
     }
 
 
     this.availableThemes = [
     this.availableThemes = [
@@ -62,6 +67,9 @@ export default class OptionsSelector extends React.Component {
     this.dispatchOnChange();
     this.dispatchOnChange();
   }
   }
 
 
+  /**
+   * dispatch onChange event
+   */
   dispatchOnChange() {
   dispatchOnChange() {
     if (this.props.onChange != null) {
     if (this.props.onChange != null) {
       this.props.onChange(this.state.editorOptions, this.state.previewOptions);
       this.props.onChange(this.state.editorOptions, this.state.previewOptions);
@@ -100,13 +108,25 @@ export default class OptionsSelector extends React.Component {
   }
   }
 
 
   renderRealtimeMathJaxSelector() {
   renderRealtimeMathJaxSelector() {
-    const bool = this.state.previewOptions.renderMathJaxInRealtime;
+    if (!this.state.isMathJaxEnabled) {
+      return;
+    }
+
+    // tooltip
+    const tooltip = (
+      <Tooltip id="tooltip-realtime-mathjax-rendering">Realtime MathJax Rendering</Tooltip>
+    );
+
+    const isEnabled = this.state.isMathJaxEnabled;
+    const isActive = isEnabled && this.state.previewOptions.renderMathJaxInRealtime;
     return (
     return (
       <FormGroup controlId="formControlsSelect">
       <FormGroup controlId="formControlsSelect">
-        <Button active={bool} className="btn-render-mathjax-in-realtime"
-            onClick={this.onClickRenderMathJaxInRealtime}>
-          <i className="fa fa-superscript" aria-hidden="true"></i>
-        </Button>
+        <OverlayTrigger placement="top" overlay={tooltip}>
+          <Button active={isActive} className="btn-render-mathjax-in-realtime"
+              onClick={this.onClickRenderMathJaxInRealtime}>
+            <i className="fa fa-superscript" aria-hidden="true"></i>
+          </Button>
+        </OverlayTrigger>
       </FormGroup>
       </FormGroup>
     )
     )
   }
   }
@@ -134,6 +154,7 @@ export class PreviewOptions {
 }
 }
 
 
 OptionsSelector.propTypes = {
 OptionsSelector.propTypes = {
+  crowi: PropTypes.object.isRequired,
   editorOptions: PropTypes.instanceOf(EditorOptions),
   editorOptions: PropTypes.instanceOf(EditorOptions),
   previewOptions: PropTypes.instanceOf(PreviewOptions),
   previewOptions: PropTypes.instanceOf(PreviewOptions),
   onChange: PropTypes.func,
   onChange: PropTypes.func,