Yuki Takei 9 лет назад
Родитель
Сommit
edb5b47204

+ 5 - 0
packages/growi-plugin-lsx/src/lib/util/BasicInterceptor.js

@@ -3,6 +3,11 @@
  */
  */
 class BasicInterceptor {
 class BasicInterceptor {
 
 
+  constructor(crowi, app) {
+    this.crowi = crowi;
+    this.app = app;
+  }
+
   /**
   /**
    * getter for id
    * getter for id
    */
    */

+ 23 - 4
packages/growi-plugin-lsx/src/lib/util/LsxBeforeRenderPageInterceptor.js

@@ -1,4 +1,7 @@
+const stringReplaceAsync = require('string-replace-async');
+
 const BasicInterceptor = require('./BasicInterceptor');
 const BasicInterceptor = require('./BasicInterceptor');
+const Lsx = require('./Lsx');
 
 
 /**
 /**
  * The interceptor for lsx Server Side Rendering
  * The interceptor for lsx Server Side Rendering
@@ -8,6 +11,11 @@ const BasicInterceptor = require('./BasicInterceptor');
  */
  */
 class LsxBeforeRenderPageInterceptor extends BasicInterceptor {
 class LsxBeforeRenderPageInterceptor extends BasicInterceptor {
 
 
+  constructor(crowi, app) {
+    super(crowi, app);
+    this.lsx = new Lsx(crowi, app);
+  }
+
   /**
   /**
    * @inheritdoc
    * @inheritdoc
    */
    */
@@ -19,11 +27,22 @@ class LsxBeforeRenderPageInterceptor extends BasicInterceptor {
    * @inheritdoc
    * @inheritdoc
    */
    */
   process(contextName, ...args) {
   process(contextName, ...args) {
-    let renderVars = args[0];
-
-    // TODO replace lsx tag
+    const req = args[0];
+    const res = args[1];
+    const renderVars = args[2];
 
 
-    return Promise.resolve(...args);
+    let promises = [];
+    return stringReplaceAsync(
+      renderVars.page.revision.body,
+      /\$lsx\((.*)\)/g,   // see: https://regex101.com/r/NQq3s9/2
+      (all, group1) => {
+        return this.lsx.renderHtml(req.user, req.path, group1);
+      }
+    ).then((results) => {
+      // replace body
+      renderVars.page.revision.body = results;
+      return Promise.resolve(...args);
+    });
   }
   }
 
 
 }
 }

+ 0 - 5
packages/growi-plugin-lsx/src/server-entry.js

@@ -1,9 +1,4 @@
 export default (crowi, app) => {
 export default (crowi, app) => {
   // add routes
   // add routes
   require('./lib/routes')(crowi, app);
   require('./lib/routes')(crowi, app);
-
-  // add interceptor for Server Side Rendering
-  const LsxBeforeRenderPageInterceptor = require('./lib/util/LsxBeforeRenderPageInterceptor');
-  crowi.getInterceptorManager()
-      .addInterceptor(new LsxBeforeRenderPageInterceptor());
 }
 }