Explorar el Código

transplant setCaretLine, focusToEditor to EditorContainer

Yuki Takei hace 6 años
padre
commit
5e81de9991

+ 2 - 1
src/client/js/app.js

@@ -96,6 +96,7 @@ if (mainContent !== null) {
 const isLoggedin = document.querySelector('.main-container.nologin') == null;
 const isLoggedin = document.querySelector('.main-container.nologin') == null;
 
 
 const appContainer = new AppContainer();
 const appContainer = new AppContainer();
+window.appContainer = appContainer;
 
 
 // backward compatibility
 // backward compatibility
 const crowi = appContainer;
 const crowi = appContainer;
@@ -118,7 +119,7 @@ window.crowiRenderer = crowiRenderer;
 // create unstated container instance
 // create unstated container instance
 const pageContainer = new PageContainer();
 const pageContainer = new PageContainer();
 const commentContainer = new CommentContainer(crowi, pageContainer);
 const commentContainer = new CommentContainer(crowi, pageContainer);
-const editorContainer = new EditorContainer(defaultEditorOptions, defaultPreviewOptions);
+const editorContainer = new EditorContainer(appContainer, defaultEditorOptions, defaultPreviewOptions);
 
 
 // FIXME
 // FIXME
 const isEnabledPlugins = $('body').data('plugin-enabled');
 const isEnabledPlugins = $('body').data('plugin-enabled');

+ 4 - 3
src/client/js/legacy/crowi.js

@@ -55,14 +55,15 @@ Crowi.setCaretLineAndFocusToEditor = function() {
     return;
     return;
   }
   }
 
 
-  const crowi = window.crowi;
+  const { appContainer } = window;
+  const editorContainer = appContainer.getContainer('EditorContainer');
   const line = pageEditorDom.getAttribute('data-caret-line') || 0;
   const line = pageEditorDom.getAttribute('data-caret-line') || 0;
-  crowi.setCaretLine(+line);
+  editorContainer.setCaretLine(+line);
   // reset data-caret-line attribute
   // reset data-caret-line attribute
   pageEditorDom.removeAttribute('data-caret-line');
   pageEditorDom.removeAttribute('data-caret-line');
 
 
   // focus
   // focus
-  crowi.focusToEditor();
+  editorContainer.focusToEditor();
 };
 };
 
 
 // original: middleware.swigFilter
 // original: middleware.swigFilter

+ 23 - 14
src/client/js/services/AppContainer.js

@@ -55,6 +55,7 @@ export default class AppContainer extends Container {
 
 
     this.socket = io();
     this.socket = io();
 
 
+    this.containerInstances = {};
     this.componentInstances = {};
     this.componentInstances = {};
   }
   }
 
 
@@ -69,6 +70,28 @@ export default class AppContainer extends Container {
     return this.config;
     return this.config;
   }
   }
 
 
+  /**
+   * Register instance
+   * @param {object} instance unstated container instance
+   */
+  registerContainer(instance) {
+    if (instance == null) {
+      throw new Error('The specified instance must not be null');
+    }
+
+    const className = instance.constructor.name;
+
+    if (this.containerInstances[className] != null) {
+      throw new Error('The specified instance couldn\'t register because the same type object has already been registered');
+    }
+
+    this.containerInstances[className] = instance;
+  }
+
+  getContainer(className) {
+    return this.containerInstances[className];
+  }
+
   /**
   /**
    * Register instance
    * Register instance
    * @param {object} instance React component instance
    * @param {object} instance React component instance
@@ -173,20 +196,6 @@ export default class AppContainer extends Container {
       });
       });
   }
   }
 
 
-  setCaretLine(line) {
-    const pageEditor = this.getComponentInstance('PageEditor');
-    if (pageEditor != null) {
-      pageEditor.setCaretLine(line);
-    }
-  }
-
-  focusToEditor() {
-    const pageEditor = this.getComponentInstance('PageEditor');
-    if (pageEditor != null) {
-      pageEditor.focusToEditor();
-    }
-  }
-
   clearDraft(path) {
   clearDraft(path) {
     delete this.draft[path];
     delete this.draft[path];
     window.localStorage.setItem('draft', JSON.stringify(this.draft));
     window.localStorage.setItem('draft', JSON.stringify(this.draft));

+ 18 - 1
src/client/js/services/EditorContainer.js

@@ -6,9 +6,12 @@ import { Container } from 'unstated';
  */
  */
 export default class EditorContainer extends Container {
 export default class EditorContainer extends Container {
 
 
-  constructor(defaultEditorOptions, defaultPreviewOptions) {
+  constructor(appContainer, defaultEditorOptions, defaultPreviewOptions) {
     super();
     super();
 
 
+    this.appContainer = appContainer;
+    this.appContainer.registerContainer(this);
+
     this.state = {
     this.state = {
       editorOptions: {},
       editorOptions: {},
       previewOptions: {},
       previewOptions: {},
@@ -42,4 +45,18 @@ export default class EditorContainer extends Container {
     window.localStorage.setItem('previewOptions', JSON.stringify(this.state.previewOptions));
     window.localStorage.setItem('previewOptions', JSON.stringify(this.state.previewOptions));
   }
   }
 
 
+  setCaretLine(line) {
+    const pageEditor = this.appContainer.getComponentInstance('PageEditor');
+    if (pageEditor != null) {
+      pageEditor.setCaretLine(line);
+    }
+  }
+
+  focusToEditor() {
+    const pageEditor = this.appContainer.getComponentInstance('PageEditor');
+    if (pageEditor != null) {
+      pageEditor.focusToEditor();
+    }
+  }
+
 }
 }