Przeglądaj źródła

chain interceptor(prerender -> render -> postrender)

Yuki Takei 9 lat temu
rodzic
commit
5f06770ebc
2 zmienionych plików z 42 dodań i 18 usunięć
  1. 17 6
      resource/js/crowi-form.js
  2. 25 12
      resource/js/crowi.js

+ 17 - 6
resource/js/crowi-form.js

@@ -62,12 +62,23 @@ $(function() {
   var prevContent = originalContent;
 
   function renderPreview() {
-    var content = $('#form-body').val();
-    var parsedHTML = crowiRenderer.render(content);
-
-    $('#preview-body').html(parsedHTML)
-      .promise()
-      .done(crowi.interceptorManager.process('postRenderPreview'));
+    var markdown = $('#form-body').val();
+    var parsedHTML = crowiRenderer.render(markdown);
+
+    // create context object
+    var context = {markdown, parsedHTML, currentPagePath: location.pathname};
+
+    // process interceptors for pre rendering
+    crowi.interceptorManager.process('preRenderPreview', context)   // process with the context
+      // render HTML with jQuery
+      .then(() => {
+        return $('#preview-body').html(context.parsedHTML).promise();
+      })
+      // process interceptors for post rendering
+      .then((bodyElement) => {
+        context = Object.assign(context, {bodyElement})
+        return crowi.interceptorManager.process('postRenderPreview', context);
+      });
   }
 
   // for initialize preview

+ 25 - 12
resource/js/crowi.js

@@ -418,22 +418,35 @@ $(function() {
     if ($rawTextOriginal.length > 0) {
       var markdown = Crowi.unescape($('#raw-text-original').html());
       var parsedHTML = crowiRenderer.render(markdown);
-      $('#revision-body-content').html(parsedHTML)
-        .promise()
-        .done(crowi.interceptorManager.process('postRender'));
 
+      // create context object
+      var context = {markdown, parsedHTML, currentPagePath: location.pathname};
 
-      $('.template-create-button').on('click', function() {
-        var path = $(this).data('path');
-        var templateId = $(this).data('template');
-        var template = $('#' + templateId).html();
+      // process interceptors for pre rendering
+      crowi.interceptorManager.process('preRender', context)   // process with the context
+        // render HTML with jQuery
+        .then(() => {
+          return $('#revision-body-content').html(context.parsedHTML).promise();
+        })
+        // process interceptors for post rendering
+        .then((bodyElement) => {
+          $('.template-create-button').on('click', function() {
+            var path = $(this).data('path');
+            var templateId = $(this).data('template');
+            var template = $('#' + templateId).html();
+
+            crowi.saveDraft(path, template);
+            top.location.href = path;
+          });
+
+          Crowi.correctHeaders('#revision-body-content');
+          Crowi.revisionToc('#revision-body-content', '#revision-toc');
+
+          context = Object.assign(context, {bodyElement})
+          return crowi.interceptorManager.process('postRender', context);
+        });
 
-        crowi.saveDraft(path, template);
-        top.location.href = path;
-      });
 
-      Crowi.correctHeaders('#revision-body-content');
-      Crowi.revisionToc('#revision-body-content', '#revision-toc');
     }
 
     // header