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

convert markdown into HTML using GrowiRenderer.

Yuto Iwata 7 лет назад
Родитель
Сommit
e97867161f
1 измененных файлов с 27 добавлено и 9 удалено
  1. 27 9
      src/client/js/util/reveal/plugins/growi-renderer.js

+ 27 - 9
src/client/js/util/reveal/plugins/growi-renderer.js

@@ -2,20 +2,38 @@
  * reveal.js growi-renderer plugin.
  */
 (function() {
-  // put 'hoge' on each slide.
-  let sections = document.querySelectorAll( '[data-markdown]'), section;
-  for (let i = 0, len = sections.length; i < len; i++ ) {
-    section = sections[i];
-    let divElement = document.createElement('div');
-    divElement.appendChild(
-      document.createTextNode(section.getElementsByTagName('script')[0].innerText)
-    );
-    section.appendChild(divElement);
+  /**
+   * convert data-markdown slides to HTML slides by GrowiRenderer.
+   */
+  function convertSlides() {
+    let sections = document.querySelectorAll( '[data-markdown]');
+    let section;
+    let template;
+    let markdown;
+    let parsedHTML;
+    for (let i = 0, len = sections.length; i < len; i++ ) {
+      section = sections[i];
+
+      // Only parse the same slide once
+      if (!section.getAttribute('data-markdown-parsed')) {
+        section.setAttribute('data-markdown-parsed', true);
+        // look for a <script> or <textarea data-template> wrapper
+        template = section.querySelector('[data-template]') || section.querySelector('script');
+        markdown = template.textContent;
+
+        parsedHTML = growiRenderer.process(markdown);
+        section.innerHTML = parsedHTML;
+      }
+    }
   }
+
   const GrowiRenderer = require('../../GrowiRenderer').default;
   // parent window DOM (crowi.js) of presentation window.
   let parentWindow = window.parent;
+
+  // generate GrowiRenderer instance and setup.
   let growiRenderer = new GrowiRenderer(parentWindow.crowi, parentWindow.crowiRenderer, {mode: 'editor'});
   growiRenderer.setup();
   // TODO: retract code block by GrowiRenderer in GC-1354.
+  convertSlides();
 }());