ryohek 5 лет назад
Родитель
Сommit
f227d8ada1

+ 13 - 0
src/client/js/components/PageEditor/CodeMirrorEditor.jsx

@@ -56,6 +56,7 @@ require('../../util/codemirror/autorefresh.ext');
 
 
 
 
 const MARKDOWN_TABLE_ACTIVATED_CLASS = 'markdown-table-activated';
 const MARKDOWN_TABLE_ACTIVATED_CLASS = 'markdown-table-activated';
+const MARKDOWN_LINK_ACTIVATED_CLASS = 'markdown-link-activated';
 
 
 export default class CodeMirrorEditor extends AbstractEditor {
 export default class CodeMirrorEditor extends AbstractEditor {
 
 
@@ -466,8 +467,10 @@ export default class CodeMirrorEditor extends AbstractEditor {
   cursorHandler(editor, event) {
   cursorHandler(editor, event) {
     const { additionalClassSet } = this.state;
     const { additionalClassSet } = this.state;
     const hasCustomClass = additionalClassSet.has(MARKDOWN_TABLE_ACTIVATED_CLASS);
     const hasCustomClass = additionalClassSet.has(MARKDOWN_TABLE_ACTIVATED_CLASS);
+    const hasLinkClass = additionalClassSet.has(MARKDOWN_LINK_ACTIVATED_CLASS);
 
 
     const isInTable = mtu.isInTable(editor);
     const isInTable = mtu.isInTable(editor);
+    const isInLink = mlu.isInTable(editor);
 
 
     if (!hasCustomClass && isInTable) {
     if (!hasCustomClass && isInTable) {
       additionalClassSet.add(MARKDOWN_TABLE_ACTIVATED_CLASS);
       additionalClassSet.add(MARKDOWN_TABLE_ACTIVATED_CLASS);
@@ -478,6 +481,16 @@ export default class CodeMirrorEditor extends AbstractEditor {
       additionalClassSet.delete(MARKDOWN_TABLE_ACTIVATED_CLASS);
       additionalClassSet.delete(MARKDOWN_TABLE_ACTIVATED_CLASS);
       this.setState({ additionalClassSet });
       this.setState({ additionalClassSet });
     }
     }
+
+    if (!hasLinkClass && isInLink) {
+      additionalClassSet.add(MARKDOWN_LINK_ACTIVATED_CLASS);
+      this.setState({ additionalClassSet });
+    }
+
+    if (hasLinkClass && !isInLink) {
+      additionalClassSet.delete(MARKDOWN_LINK_ACTIVATED_CLASS);
+      this.setState({ additionalClassSet });
+    }
   }
   }
 
 
   changeHandler(editor, data, value) {
   changeHandler(editor, data, value) {

+ 10 - 0
src/client/js/components/PageEditor/MarkdownLinkUtil.js

@@ -3,6 +3,11 @@
  */
  */
 class MarkdownLinkUtil {
 class MarkdownLinkUtil {
 
 
+  constructor() {
+    this.linePartOfTableRE = /^([^\r\n|]*)\|(([^\r\n|]*\|)+)$/;
+    this.isInTable = this.isInTable.bind(this);
+  }
+
   getSelectedTextInEditor(editor) {
   getSelectedTextInEditor(editor) {
     return editor.getDoc().getSelection();
     return editor.getDoc().getSelection();
   }
   }
@@ -11,6 +16,11 @@ class MarkdownLinkUtil {
     editor.getDoc().replaceSelection(link);
     editor.getDoc().replaceSelection(link);
   }
   }
 
 
+  isInTable(editor) {
+    const curPos = editor.getCursor();
+    return this.linePartOfTableRE.test(editor.getDoc().getLine(curPos.line));
+  }
+
 }
 }
 
 
 // singleton pattern
 // singleton pattern