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

create interceptor for Server Side Rendering

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

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

@@ -0,0 +1,47 @@
+/**
+ * Basic Interceptor class
+ */
+class BasicInterceptor {
+
+  /**
+   * getter for id
+   */
+  getId() {
+    return this.constructor.name;
+  }
+
+  /**
+   * return whether this interceptor works by specified contextName
+   *
+   * @param {string} contextName
+   * @return {boolean}
+   */
+  isInterceptWhen(contextName) {
+    // implement this
+    return false;
+  }
+
+  /**
+   * return whether this interceptor processes in parallel mode or sequencial mode
+   * @return {boolean}
+   */
+  isProcessableParallel() {
+    // implement this
+    return true;
+  }
+
+  /**
+   * process method
+   *
+   * @param {string} contextName
+   * @param {any} args
+   * @return {Promise}
+   */
+  process(contextName, ...args) {
+    // override this
+    return Promise.resolve(...args);
+  }
+
+}
+
+module.exports = BasicInterceptor;

+ 31 - 0
packages/growi-plugin-lsx/src/lib/util/LsxBeforeRenderPageInterceptor.js

@@ -0,0 +1,31 @@
+const BasicInterceptor = require('./BasicInterceptor');
+
+/**
+ * The interceptor for lsx Server Side Rendering
+ *
+ *  replace lsx tag to HTML codes
+ *  when contextName is 'beforeRenderPage'
+ */
+class LsxBeforeRenderPageInterceptor extends BasicInterceptor {
+
+  /**
+   * @inheritdoc
+   */
+  isInterceptWhen(contextName) {
+    return contextName === 'beforeRenderPage';
+  }
+
+  /**
+   * @inheritdoc
+   */
+  process(contextName, ...args) {
+    let renderVars = args[0];
+
+    // TODO replace lsx tag
+
+    return Promise.resolve(...args);
+  }
+
+}
+
+module.exports = LsxBeforeRenderPageInterceptor;

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

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