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

feat(flavours): add markdown presets/flavors

This feature enables users to select a preset/flavor.
A flavor is just a preset of options, a shortcut so users don't have to set each option one by one.

Closes #164
Estevão Soares dos Santos 10 лет назад
Родитель
Сommit
7e55bceb0e
7 измененных файлов с 122 добавлено и 4 удалено
  1. 47 2
      dist/showdown.js
  2. 0 0
      dist/showdown.js.map
  3. 1 1
      dist/showdown.min.js
  4. 0 0
      dist/showdown.min.js.map
  5. 15 0
      src/converter.js
  6. 31 1
      src/showdown.js
  7. 28 0
      test/node/showdown.Converter.js

+ 47 - 2
dist/showdown.js

@@ -1,4 +1,4 @@
-;/*! showdown 11-07-2015 */
+;/*! showdown 12-07-2015 */
 (function(){
 /**
  * Created by Tivie on 06-01-2015.
@@ -22,7 +22,21 @@ var showdown = {},
       ghCodeBlocks:              true,  // true due to historical reasons
       tasklists:                 false
     },
-    globalOptions = JSON.parse(JSON.stringify(defaultOptions)); //clone default options out of laziness =P
+    globalOptions = JSON.parse(JSON.stringify(defaultOptions)),
+    flavor = {
+      github: {
+        omitExtraWLInCodeBlocks:   true,
+        prefixHeaderId:            'user-content-',
+        simplifiedAutoLink:        true,
+        literalMidWordUnderscores: true,
+        strikethrough:             true,
+        tables:                    true,
+        tablesHeaderId:            true,
+        ghCodeBlocks:              true,
+        tasklists:                 true
+      },
+      vanilla: JSON.parse(JSON.stringify(defaultOptions))
+    };
 
 /**
  * helper namespace
@@ -79,6 +93,22 @@ showdown.resetOptions = function () {
   globalOptions = JSON.parse(JSON.stringify(defaultOptions));
 };
 
+/**
+ * Set the flavor showdown should use as default
+ * @param {string} name
+ */
+showdown.setFlavor = function (name) {
+  'use strict';
+  if (flavor.hasOwnProperty(name)) {
+    var preset = flavor[name];
+    for (var option in preset) {
+      if (preset.hasOwnProperty(option)) {
+        globalOptions[option] = preset[option];
+      }
+    }
+  }
+};
+
 /**
  * Get the default options
  * @static
@@ -701,6 +731,21 @@ showdown.Converter = function (converterOptions) {
     _parseExtension(extensionName);
   };
 
+  /**
+   * Set the flavor THIS converter should use
+   * @param {string} name
+   */
+  this.setFlavor = function (name) {
+    if (flavor.hasOwnProperty(name)) {
+      var preset = flavor[name];
+      for (var option in preset) {
+        if (preset.hasOwnProperty(option)) {
+          options[option] = preset[option];
+        }
+      }
+    }
+  };
+
   /**
    * Remove an extension from THIS converter.
    * Note: This is a costly operation. It's better to initialize a new converter

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/showdown.js.map


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
dist/showdown.min.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/showdown.min.js.map


+ 15 - 0
src/converter.js

@@ -285,6 +285,21 @@ showdown.Converter = function (converterOptions) {
     _parseExtension(extensionName);
   };
 
+  /**
+   * Set the flavor THIS converter should use
+   * @param {string} name
+   */
+  this.setFlavor = function (name) {
+    if (flavor.hasOwnProperty(name)) {
+      var preset = flavor[name];
+      for (var option in preset) {
+        if (preset.hasOwnProperty(option)) {
+          options[option] = preset[option];
+        }
+      }
+    }
+  };
+
   /**
    * Remove an extension from THIS converter.
    * Note: This is a costly operation. It's better to initialize a new converter

+ 31 - 1
src/showdown.js

@@ -20,7 +20,21 @@ var showdown = {},
       ghCodeBlocks:              true,  // true due to historical reasons
       tasklists:                 false
     },
-    globalOptions = JSON.parse(JSON.stringify(defaultOptions)); //clone default options out of laziness =P
+    globalOptions = JSON.parse(JSON.stringify(defaultOptions)),
+    flavor = {
+      github: {
+        omitExtraWLInCodeBlocks:   true,
+        prefixHeaderId:            'user-content-',
+        simplifiedAutoLink:        true,
+        literalMidWordUnderscores: true,
+        strikethrough:             true,
+        tables:                    true,
+        tablesHeaderId:            true,
+        ghCodeBlocks:              true,
+        tasklists:                 true
+      },
+      vanilla: JSON.parse(JSON.stringify(defaultOptions))
+    };
 
 /**
  * helper namespace
@@ -77,6 +91,22 @@ showdown.resetOptions = function () {
   globalOptions = JSON.parse(JSON.stringify(defaultOptions));
 };
 
+/**
+ * Set the flavor showdown should use as default
+ * @param {string} name
+ */
+showdown.setFlavor = function (name) {
+  'use strict';
+  if (flavor.hasOwnProperty(name)) {
+    var preset = flavor[name];
+    for (var option in preset) {
+      if (preset.hasOwnProperty(option)) {
+        globalOptions[option] = preset[option];
+      }
+    }
+  }
+};
+
 /**
  * Get the default options
  * @static

+ 28 - 0
test/node/showdown.Converter.js

@@ -27,6 +27,34 @@ describe('showdown.Converter', function () {
     });
   });
 
+  describe('setFlavor() github', function () {
+    var converter = new showdown.Converter(),
+        ghOpts = {
+          omitExtraWLInCodeBlocks:   true,
+          prefixHeaderId:            'user-content-',
+          simplifiedAutoLink:        true,
+          literalMidWordUnderscores: true,
+          strikethrough:             true,
+          tables:                    true,
+          tablesHeaderId:            true,
+          ghCodeBlocks:              true,
+          tasklists:                 true
+        };
+
+    converter.setFlavor('github');
+
+    for (var opt in ghOpts) {
+      if (ghOpts.hasOwnProperty(opt)) {
+        check(opt, ghOpts[opt]);
+      }
+    }
+    function check(key, val) {
+      it('should set ' + opt + ' to ' + val, function () {
+        converter.getOption(key).should.equal(val);
+      });
+    }
+  });
+
   describe('extension methods', function () {
     var extObjMock = {
           type: 'lang',

Некоторые файлы не были показаны из-за большого количества измененных файлов