Расширение Showdown.js для изменения HTML
С помощью другого SO вопроса по этой теме я пробую расширение Showdown.js, которое не работает с html (работает нормально, если я хочу заменить только текст, но я хочу изменить html).
я хочу измениться
<img src="/path/to/image/image1.jpg" alt="bloo bap" title="" />
<img src="/path/to/image/image2.jpg" alt="shoo ba doo" title="" />
в
<img class="foo" src="/path/to/image/image1.jpg" alt="bloo bap" title="" />
<img class="foo" src="/path/to/image/image2.jpg" alt="shoo ba doo" title="" />
Мое расширение
var demo = function(converter) {
return [
{
type : 'lang',
regex : '<img src=(.*)\/>',
replace : '<img class="foo" src=$1>'
}
];
}
var converter = new Showdown.converter({extensions: [demo]});
но без сигары.
2 ответа
Расширения Showdown работает на HTML. Попробуй это:
type: 'html',
regex: '<img src=(.*)\/>',
replace: '<img class="foo" src=$1>'
Немного поздно, но для тех, кто пришел сюда через гугл:
Вам нужен output
расширение, а не lang
расширение.
Это расширение lang. Он заменяет ссылки на файл.md ссылками на файлы.html в качестве первого шага в вашем коде уценки:
return [
{
type : 'lang',
regex : /\[(.*)\]\((.*)\.md\)/g,
replace : '[$1]($2.html)'
}
];
Это выходное расширение. Он добавляет атрибут класса ко всем изображениям на последнем этапе после создания всего HTML.
return [
{
type : 'output',
regex : '<img (.*)/>',
replace : '<img class="foo" $1>'
}
];
Подробности здесь: https://github.com/showdownjs/showdown/wiki/extensions
Из моих тестов я считаю, что расширения Showdown работают только с текстом, а не с HTML. То есть расширения вызываются до того, как Showdown вступит во владение. Вместо создания расширения я использовал следующий код, и он работает как шарм
var postProcess = function(text) {
return text.replace(/<img src=(.*)\/>/g, '<img class="foo" src=$1>');
}
postProcess(converter.makeHtml(text));