devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
57 lines (56 loc) • 2.07 kB
JavaScript
/**
* DevExtreme (esm/ui/html_editor/converters/markdown.js)
* Version: 21.1.4
* Build date: Mon Jun 21 2021
*
* Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import TurnDown from "turndown";
import ShowDown from "showdown";
import {
getWindow
} from "../../../core/utils/window";
import Errors from "../../widget/ui.errors";
import converterController from "../converterController";
class MarkdownConverter {
constructor() {
var _this$_html2Markdown;
var window = getWindow();
var turndown = window && window.TurndownService || TurnDown;
var showdown = window && window.showdown || ShowDown;
if (!turndown) {
throw Errors.Error("E1041", "Turndown")
}
if (!showdown) {
throw Errors.Error("E1041", "Showdown")
}
this._html2Markdown = new turndown;
if (null !== (_this$_html2Markdown = this._html2Markdown) && void 0 !== _this$_html2Markdown && _this$_html2Markdown.addRule) {
this._html2Markdown.addRule("emptyLine", {
filter: element => "p" === element.nodeName.toLowerCase() && "<br>" === element.innerHTML,
replacement: function() {
return "<br>"
}
});
this._html2Markdown.keep(["table"])
}
this._markdown2Html = new showdown.Converter({
simpleLineBreaks: true,
strikethrough: true,
tables: true
})
}
toMarkdown(htmlMarkup) {
return this._html2Markdown.turndown(htmlMarkup || "")
}
toHtml(markdownMarkup) {
var markup = this._markdown2Html.makeHtml(markdownMarkup);
if (markup) {
markup = markup.replace(new RegExp("\\r?\\n", "g"), "")
}
return markup
}
}
converterController.addConverter("markdown", MarkdownConverter);
export default MarkdownConverter;