김창근 2015-02-02
Markdown rendering : Fix bug in help page.
Recover _setViewer() method because the help markdown area depends on this method.
@9a5f15f25224f67f55ae333dced906db42c6f2da
public/javascripts/common/yobi.Markdown.js
--- public/javascripts/common/yobi.Markdown.js
+++ public/javascripts/common/yobi.Markdown.js
@@ -38,7 +38,38 @@
      * @param {Hash Table} htOptions
      */
     function _initVar(htOptions){
+        htVar.htFilter = new Filter();
         htVar.sMarkdownRendererUrl = htOptions.sMarkdownRendererUrl;
+
+        htVar.htMarkedOption = {
+            "gfm"       : true,
+            "tables"    : true,
+            "pedantic"  : false,
+            "sanitize"  : false,
+            "smartLists": true,
+            "langPrefix": '',
+            "highlight" : function(sCode, sLang) {
+                if(sLang) {
+                    try {
+                        return hljs.highlight(sLang.toLowerCase(), sCode).value;
+                    } catch(oException) {
+                        console.log(oException.message);
+                    }
+                }
+            }
+        };
+    }
+
+    /**
+     * Render as Markdown document
+     *
+     * @require showdown.js
+     * @require hljs.js
+     * @param {String} sText
+     * @return {String}
+     */
+    function _renderMarkdown(sText) {
+        return htVar.htFilter.sanitize(marked(sText, htVar.htMarkedOption)).xss();
     }
 
     /**
@@ -65,6 +96,18 @@
                 welTarget.html(data);
             }
         });
+    }
+
+    /**
+     * set Markdown Viewer
+     *
+     * @param {Wrapped Element} welTarget is not <textarea> or <input>
+     */
+    function _setViewer(welTarget){
+        var sMarkdownText = welTarget.text();
+        var sContentBody  = (sMarkdownText) ? _renderMarkdown(sMarkdownText) : welTarget.html();
+        $('.markdown-loader').remove();
+        welTarget.html(sContentBody).removeClass('markdown-before');
     }
 
     /**
@@ -109,9 +152,7 @@
         var waTarget = $(sQuery || "[markdown]"); // TODO: markdown=true
 
         waTarget.each(function(nIndex, elTarget){
-            if(_isEditableElement(elTarget)){
-                _setEditor($(elTarget));
-            };
+            _isEditableElement(elTarget) ? _setEditor($(elTarget)) : _setViewer($(elTarget));
         });
     }
 
Add a comment
List