mono/packages/discourse/lib/markdown/index.js

104 lines
7.5 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.toHTML = exports.Pattern = exports.Rule = exports.RMark = exports.RE_LINKS = exports.RE_IMAGES = void 0;
const Rule_1 = require("./Rule");
const Pattern_1 = require("./Pattern");
exports.RE_IMAGES = /\!\[([^\]]+)\]\((\S+)\)/g;
exports.RE_LINKS = /\[([^\n]+)\]\(([^\n]+)\)/g;
const markdown = require("markdown-it");
const defaultRules = [
new Rule_1.Rule('header', [
new Pattern_1.Pattern(/^#{6}\s?([^\n]+)/gm, '<h6>$1</h6>'),
new Pattern_1.Pattern(/^#{5}\s?([^\n]+)/gm, '<h5>$1</h5>'),
new Pattern_1.Pattern(/^#{4}\s?([^\n]+)/gm, '<h4>$1</h4>'),
new Pattern_1.Pattern(/^#{3}\s?([^\n]+)/gm, '<h3>$1</h3>'),
new Pattern_1.Pattern(/^#{2}\s?([^\n]+)/gm, '<h2>$1</h2>'),
new Pattern_1.Pattern(/^#{1}\s?([^\n]+)/gm, '<h1>$1</h1>'),
]),
new Rule_1.Rule('bold', [
new Pattern_1.Pattern(/\*\*\s?([^\n]+)\*\*/g, '<b>$1</b>'),
new Pattern_1.Pattern(/\_\_\s?([^\n]+)\_\_/g, '<b>$1</b>'),
]),
new Rule_1.Rule('italic', [
new Pattern_1.Pattern(/\*\s?([^\n]+)\*/g, '<i>$1</i>'),
new Pattern_1.Pattern(/\_\s?([^\n]+)\_/g, '<i>$1</i>'),
]),
new Rule_1.Rule('image', [
new Pattern_1.Pattern(/\!\[([^\]]+)\]\((\S+)\)/g, '<img src="$2" alt="$1" />'),
]),
new Rule_1.Rule('link', [
new Pattern_1.Pattern(/\[([^\n]+)\]\(([^\n]+)\)/g, '<a href2="$2" target="_blank" rel="noopener">$1</a>'),
]),
new Rule_1.Rule('paragraph', [
// this regex can't skip processed HTML
new Pattern_1.Pattern(/([^\n]+\n?)/g, '\n<p>$1</p>\n'),
// another possible regex that can't skip processed HTML
// new Pattern(/(?:^|\n)([^\n\<]+(?:\n[^\n\>]+)*)(?:\n|$)/gm, '\n<p>$1</p>\n'),
])
];
const defaultRulesDiscourse = (images, links) => {
return [
new Rule_1.Rule('image', [
new Pattern_1.Pattern(exports.RE_LINKS, images)
]) /*,
new Rule('link', [
new Pattern(
RE_LINKS,
links
)
])*/
];
};
class RMark {
constructor(options) {
this.rules = defaultRulesDiscourse(options.images, options.links);
}
addRuleBefore(rule, before) {
const index = this.rules.findIndex((r) => r.name === before);
if (index !== -1) {
this.rules.splice(index, 0, rule);
}
return this;
}
addRule(rule) {
this.addRuleBefore(rule, 'paragraph');
return this;
}
render(raw) {
let result = raw;
this.rules.forEach((rule) => {
result = rule.apply(result);
});
return result;
}
}
exports.RMark = RMark;
var Rule_2 = require("./Rule");
Object.defineProperty(exports, "Rule", { enumerable: true, get: function () { return Rule_2.Rule; } });
var Pattern_2 = require("./Pattern");
Object.defineProperty(exports, "Pattern", { enumerable: true, get: function () { return Pattern_2.Pattern; } });
// export const find = (content:string, reg:RegExp) => content.match(reg)
const toHTML = (content) => {
const md = new markdown({
html: true,
breaks: true
});
return md.render(content);
};
exports.toHTML = toHTML;
function image_urls(input) {
const regex = /https?:\/\/(?:[a-z0-9\-]+\.)+[a-z]{2,}(?:\/[^\/#\s]*)*\.(?:jpe?g|gif|png|webp)/g;
const matches = input.match(regex);
return matches || [];
}
function image_urls_local(input) {
const regex = /\/(?:[^\/#\s]+\/)*[^\/#\s]+\.(?:jpe?g|gif|png|webp)/g;
const matches = input.match(regex);
return matches || [];
}
function findUploadImageUrls(input) {
const regex = /upload:\/\/[^\s]+?\.(?:jpe?g|gif|png)/gi;
const matches = input.match(regex);
return matches || [];
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL21hcmtkb3duL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUE2QjtBQUM3Qix1Q0FBbUM7QUFJdEIsUUFBQSxTQUFTLEdBQVcsMEJBQTBCLENBQUE7QUFDOUMsUUFBQSxRQUFRLEdBQVcsMkJBQTJCLENBQUE7QUFFM0Qsd0NBQXVDO0FBSXZDLE1BQU0sWUFBWSxHQUFXO0lBQzNCLElBQUksV0FBSSxDQUFDLFFBQVEsRUFBRTtRQUNqQixJQUFJLGlCQUFPLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxDQUFDO1FBQ2hELElBQUksaUJBQU8sQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLENBQUM7UUFDaEQsSUFBSSxpQkFBTyxDQUFDLG9CQUFvQixFQUFFLGFBQWEsQ0FBQztRQUNoRCxJQUFJLGlCQUFPLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxDQUFDO1FBQ2hELElBQUksaUJBQU8sQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLENBQUM7UUFDaEQsSUFBSSxpQkFBTyxDQUFDLG9CQUFvQixFQUFFLGFBQWEsQ0FBQztLQUNqRCxDQUFDO0lBQ0YsSUFBSSxXQUFJLENBQUMsTUFBTSxFQUFFO1FBQ2YsSUFBSSxpQkFBTyxDQUFDLHNCQUFzQixFQUFFLFdBQVcsQ0FBQztRQUNoRCxJQUFJLGlCQUFPLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxDQUFDO0tBQ2pELENBQUM7SUFDRixJQUFJLFdBQUksQ0FBQyxRQUFRLEVBQUU7UUFDakIsSUFBSSxpQkFBTyxDQUFDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQztRQUM1QyxJQUFJLGlCQUFPLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxDQUFDO0tBQzdDLENBQUM7SUFDRixJQUFJLFdBQUksQ0FBQyxPQUFPLEVBQUU7UUFDaEIsSUFBSSxpQkFBTyxDQUFDLDBCQUEwQixFQUFFLDJCQUEyQixDQUFDO0tBQ3JFLENBQUM7SUFDRixJ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