Как создать расширение уценки showdown.js

Используя следующий код, я получаю рабочий вывод:

<html>
  <head>
    <script type="text/javascript" src="/js/showdown.js"></script>
  </head>
  <body>
    <script type="text/javascript">
      var converter = new Showdown.converter();
      alert(converter.makeHtml('*test* abc'));
    </script>
  </body>
</html>

возврате <p><em>test</em> abc</p>

Теперь я хотел бы добавить расширение. Страница github предполагает, что это можно сделать с помощью:

<script src="src/extensions/twitter.js" />
var converter = new Showdown.converter({ extensions: 'twitter' });

Тем не менее, изменив мой код:

<html>
  <head>
    <script type="text/javascript" src="/js/showdown.js"></script>
    <script type="text/javascript" src="/js/twitter.js"></script>
  </head>
  <body>
    <script type="text/javascript">
      var converter = new Showdown.converter({ extensions: 'twitter' });
      alert(converter.makeHtml('*test* abc'));
    </script>
  </body>
</html>

Выдает ошибку

"Uncaught Extension 'undefined' could not be loaded.  It was either not found or is not a valid extension."

Добавление следующего кода (как указано в примере с фильтром)

var demo = function(converter) {
  return [
    // Replace escaped @ symbols
    { type: 'lang', function(text) {
      return text.replace(/\\@/g, '@');
    }}
  ];
}

Выдает ошибку Uncaught SyntaxError: Unexpected token (

Я хотел бы создать такое расширение, как это https://github.com/rennat/python-markdown-oembed для интерпретации ![video](youtube_link), но неясно, как начать добавлять эту поддержку.

2 ответа

Решение

В вашем последнем блоке у вас есть запятая после "lang", за которой сразу следует функция. Это не действительно JSON.

РЕДАКТИРОВАТЬ

Похоже, что readme был неправильным. Мне пришлось передать массив со строкой "твиттер".

var converter = new Showdown.converter({extensions: ['twitter']});
converter.makeHtml('whatever @meandave2020');
// output "<p>whatever <a href="http://twitter.com/meandave2020">@meandave2020</a></p>"

Я отправил запрос на обновление, чтобы обновить это.

То, как мы пишем расширения, изменилось, я нашел некоторую помощь в следующем примере фильтра: http://codepen.io/tivie/pen/eNqOzP

showdown.extension("example", function() {
  'use strict';
  return [
    {
      type: 'lang',
      filter: function(text, converter, options) {
        var mainRegex = new RegExp("(^[ \t]*:>[ \t]?.+\n(.+\n)*\n*)+", "gm");
        text = text.replace(mainRegex, function(match, content) {
          content = content.replace(/^([ \t]*):>([ \t])?/gm, "");
          var foo = converter.makeHtml(content);
          return '\n<blockquote class="foo">' + foo + '</blockquote>\n';
        });
        return text;
      }
    }
  ]
});
Другие вопросы по тегам