Kaynağa Gözat

impl the part of modifying marked options

Yuki Takei 9 yıl önce
ebeveyn
işleme
388f32dfe8

+ 10 - 0
lib/util/swigFunctions.js

@@ -22,6 +22,16 @@ module.exports = function(crowi, app, req, locals) {
     return false;
   };
 
+  locals.isEnabledLinebreaks = function() {
+    var config = crowi.getConfig()
+    return Config.isEnabledLinebreaks(config);
+  }
+
+  locals.isEnabledLinebreaksInComments = function() {
+    var config = crowi.getConfig()
+    return Config.isEnabledLinebreaksInComments(config);
+  }
+
   locals.slackConfigured = function() {
     var config = crowi.getConfig()
     if (Config.hasSlackToken(config)) {

+ 1 - 0
lib/views/page.html

@@ -61,6 +61,7 @@
   data-page-revision-id="{% if revision %}{{ revision._id.toString() }}{% endif %}"
   data-page-revision-created="{% if revision %}{{ revision.createdAt|datetz('U') }}{% endif %}"
   data-page-is-seen="{% if page and page.isSeenUser(user) %}1{% else %}0{% endif %}"
+  data-linebreaks-enabled="{{ isEnabledLinebreaks() }}"
   >
 
   {% if not page %}

+ 1 - 0
lib/views/page_list.html

@@ -72,6 +72,7 @@
   data-page-revision-id="{% if revision %}{{ revision._id.toString() }}{% endif %}"
   data-page-revision-created="{% if revision %}{{ revision.createdAt|datetz('U') }}{% endif %}"
   data-page-is-seen="{% if page and page.isSeenUser(user) %}1{% else %}0{% endif %}"
+  data-linebreaks-enabled="{{ isEnabledLinebreaks() }}"
   >
 
 <div class="portal {% if not page or req.query.offset > 0 %}hide{% endif %}">

+ 11 - 1
resource/js/legacy/crowi.js

@@ -184,6 +184,7 @@ $(function() {
   var currentUser = $('#content-main').data('current-user');
   var isSeen = $('#content-main').data('page-is-seen');
   var pagePath= $('#content-main').data('path');
+  var isEnabledLineBreaks = $('#content-main').data('linebreaks-enabled');
 
   Crowi.linkPath();
 
@@ -417,7 +418,16 @@ $(function() {
     var $rawTextOriginal = $('#raw-text-original');
     if ($rawTextOriginal.length > 0) {
       var markdown = Crowi.unescape($('#raw-text-original').html());
-      var parsedHTML = crowiRenderer.render(markdown);
+
+      // generate options obj
+      var rendererOptions = {
+        // see: https://www.npmjs.com/package/marked
+        marked: {
+          breaks: isEnabledLineBreaks
+        },
+      }
+
+      var parsedHTML = crowiRenderer.render(markdown, rendererOptions);
 
       // create context object
       var context = {markdown, parsedHTML, currentPagePath: location.pathname};

+ 23 - 6
resource/js/util/CrowiRenderer.js

@@ -74,15 +74,15 @@ export default class CrowiRenderer {
 
   }
 
-  parseMarkdown(markdown) {
+  parseMarkdown(markdown, markedOpts) {
     let parsed = '';
 
     const markedRenderer = new marked.Renderer();
     markedRenderer.code = this.codeRenderer;
 
     try {
-      // TODO
-      marked.setOptions({
+      // concat
+      let concatMarkedOpts = Object.assign({
         gfm: true,
         tables: true,
         breaks: true,
@@ -91,7 +91,9 @@ export default class CrowiRenderer {
         smartLists: true,
         smartypants: false,
         renderer: markedRenderer,
-      });
+      }, markedOpts);
+
+      marked.setOptions(concatMarkedOpts);
 
       // override
       marked.Lexer.lex = function(src, options) {
@@ -111,11 +113,26 @@ export default class CrowiRenderer {
     return parsed;
   }
 
-  render(markdown) {
+  /**
+   * render
+   *
+   * @param {string} markdown
+   * @param {object} options
+   *  ex:
+   *  ```
+   *    {
+   *      marked: {...} // marked options
+   *    }
+   *  ```
+   * @returns
+   *
+   * @memberOf CrowiRenderer
+   */
+  render(markdown, rendererOptions) {
     let html = '';
 
     markdown = this.preProcess(markdown);
-    html = this.parseMarkdown(markdown);
+    html = this.parseMarkdown(markdown, rendererOptions.marked || {});
 
     return html;
   }