@oneuptime/common 7.0.4992 → 7.0.5003
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/Server/Types/Markdown.ts
CHANGED
|
@@ -19,9 +19,8 @@ export default class Markdown {
|
|
|
19
19
|
markdown: string,
|
|
20
20
|
contentType: MarkdownContentType,
|
|
21
21
|
): Promise<string> {
|
|
22
|
-
//
|
|
23
|
-
markdown = markdown.replace(
|
|
24
|
-
markdown = markdown.replace(/>/g, ">");
|
|
22
|
+
// Basic sanitization: neutralize script tags but preserve markdown syntax like '>' for blockquotes.
|
|
23
|
+
markdown = markdown.replace(/<script/gi, "<script");
|
|
25
24
|
|
|
26
25
|
let renderer: Renderer | null = null;
|
|
27
26
|
|
|
@@ -78,7 +77,7 @@ export default class Markdown {
|
|
|
78
77
|
};
|
|
79
78
|
|
|
80
79
|
renderer.code = function (code, language) {
|
|
81
|
-
return `<pre class="language-${language} rounded-md"><code class="language-${language}
|
|
80
|
+
return `<pre class="language-${language} rounded-xl bg-slate-900/95 text-slate-100 p-5 overflow-x-auto text-sm shadow-md ring-1 ring-slate-900/10"><code class="language-${language}">${code}</code></pre>`;
|
|
82
81
|
};
|
|
83
82
|
|
|
84
83
|
renderer.heading = function (text, level) {
|
|
@@ -137,6 +136,63 @@ export default class Markdown {
|
|
|
137
136
|
return `<h6 class="my-5 tracking-tight font-bold text-gray-800">${text}</h6>`;
|
|
138
137
|
};
|
|
139
138
|
|
|
139
|
+
// Lists
|
|
140
|
+
renderer.list = function (body, ordered, start) {
|
|
141
|
+
const tag: string = ordered ? "ol" : "ul";
|
|
142
|
+
const cls: string = ordered
|
|
143
|
+
? "list-decimal pl-6 my-6 space-y-2 text-gray-700"
|
|
144
|
+
: "list-disc pl-6 my-6 space-y-2 text-gray-700";
|
|
145
|
+
const startAttr: string =
|
|
146
|
+
ordered && start !== 1 ? ` start="${start}"` : "";
|
|
147
|
+
return `<${tag}${startAttr} class="${cls}">${body}</${tag}>`;
|
|
148
|
+
};
|
|
149
|
+
renderer.listitem = function (text) {
|
|
150
|
+
return `<li class="leading-7">${text}</li>`;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
// Tables
|
|
154
|
+
renderer.table = function (header, body) {
|
|
155
|
+
return `<div class="overflow-x-auto my-8"><table class="min-w-full border border-gray-200 text-sm text-left">
|
|
156
|
+
${header}${body}
|
|
157
|
+
</table></div>`;
|
|
158
|
+
};
|
|
159
|
+
renderer.tablerow = function (content) {
|
|
160
|
+
return `<tr class="border-b last:border-b-0">${content}</tr>`;
|
|
161
|
+
};
|
|
162
|
+
renderer.tablecell = function (content, flags) {
|
|
163
|
+
const type: string = flags.header ? "th" : "td";
|
|
164
|
+
const base: string = "px-4 py-2 border-r last:border-r-0 border-gray-200";
|
|
165
|
+
const align: string = flags.align ? ` text-${flags.align}` : "";
|
|
166
|
+
const weight: string = flags.header ? " font-semibold bg-gray-50" : "";
|
|
167
|
+
return `<${type} class="${base}${align}${weight}">${content}</${type}>`;
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
// Inline code
|
|
171
|
+
renderer.codespan = function (code) {
|
|
172
|
+
return `<code class="rounded-md bg-gray-100 px-1.5 py-0.5 text-sm text-pink-600">${code}</code>`;
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
// Horizontal rule
|
|
176
|
+
renderer.hr = function () {
|
|
177
|
+
return '<hr class="my-12 border-t border-gray-200" />';
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
// Emphasis / Strong / Strikethrough
|
|
181
|
+
renderer.strong = function (text) {
|
|
182
|
+
return `<strong class="font-semibold text-gray-800">${text}</strong>`;
|
|
183
|
+
};
|
|
184
|
+
renderer.em = function (text) {
|
|
185
|
+
return `<em class="italic text-gray-700">${text}</em>`;
|
|
186
|
+
};
|
|
187
|
+
renderer.del = function (text) {
|
|
188
|
+
return `<del class="line-through text-gray-400">${text}</del>`;
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
// Images
|
|
192
|
+
renderer.image = function (href, _title, text) {
|
|
193
|
+
return `<figure class="my-8"><img src="${href}" alt="${text}" class="rounded-xl shadow-sm border border-gray-200" loading="lazy"/><figcaption class="mt-2 text-center text-sm text-gray-500">${text || ""}</figcaption></figure>`;
|
|
194
|
+
};
|
|
195
|
+
|
|
140
196
|
this.blogRenderer = renderer;
|
|
141
197
|
|
|
142
198
|
return renderer;
|
|
@@ -17,9 +17,8 @@ export var MarkdownContentType;
|
|
|
17
17
|
})(MarkdownContentType || (MarkdownContentType = {}));
|
|
18
18
|
class Markdown {
|
|
19
19
|
static async convertToHTML(markdown, contentType) {
|
|
20
|
-
//
|
|
21
|
-
markdown = markdown.replace(
|
|
22
|
-
markdown = markdown.replace(/>/g, ">");
|
|
20
|
+
// Basic sanitization: neutralize script tags but preserve markdown syntax like '>' for blockquotes.
|
|
21
|
+
markdown = markdown.replace(/<script/gi, "<script");
|
|
23
22
|
let renderer = null;
|
|
24
23
|
if (contentType === MarkdownContentType.Blog) {
|
|
25
24
|
renderer = this.getBlogRenderer();
|
|
@@ -60,7 +59,7 @@ class Markdown {
|
|
|
60
59
|
return `<img src="${href}" alt="${text}" class="rounded-md shadow-md" />`;
|
|
61
60
|
};
|
|
62
61
|
renderer.code = function (code, language) {
|
|
63
|
-
return `<pre class="language-${language} rounded-md"><code class="language-${language}
|
|
62
|
+
return `<pre class="language-${language} rounded-xl bg-slate-900/95 text-slate-100 p-5 overflow-x-auto text-sm shadow-md ring-1 ring-slate-900/10"><code class="language-${language}">${code}</code></pre>`;
|
|
64
63
|
};
|
|
65
64
|
renderer.heading = function (text, level) {
|
|
66
65
|
if (level === 1) {
|
|
@@ -117,6 +116,56 @@ class Markdown {
|
|
|
117
116
|
}
|
|
118
117
|
return `<h6 class="my-5 tracking-tight font-bold text-gray-800">${text}</h6>`;
|
|
119
118
|
};
|
|
119
|
+
// Lists
|
|
120
|
+
renderer.list = function (body, ordered, start) {
|
|
121
|
+
const tag = ordered ? "ol" : "ul";
|
|
122
|
+
const cls = ordered
|
|
123
|
+
? "list-decimal pl-6 my-6 space-y-2 text-gray-700"
|
|
124
|
+
: "list-disc pl-6 my-6 space-y-2 text-gray-700";
|
|
125
|
+
const startAttr = ordered && start !== 1 ? ` start="${start}"` : "";
|
|
126
|
+
return `<${tag}${startAttr} class="${cls}">${body}</${tag}>`;
|
|
127
|
+
};
|
|
128
|
+
renderer.listitem = function (text) {
|
|
129
|
+
return `<li class="leading-7">${text}</li>`;
|
|
130
|
+
};
|
|
131
|
+
// Tables
|
|
132
|
+
renderer.table = function (header, body) {
|
|
133
|
+
return `<div class="overflow-x-auto my-8"><table class="min-w-full border border-gray-200 text-sm text-left">
|
|
134
|
+
${header}${body}
|
|
135
|
+
</table></div>`;
|
|
136
|
+
};
|
|
137
|
+
renderer.tablerow = function (content) {
|
|
138
|
+
return `<tr class="border-b last:border-b-0">${content}</tr>`;
|
|
139
|
+
};
|
|
140
|
+
renderer.tablecell = function (content, flags) {
|
|
141
|
+
const type = flags.header ? "th" : "td";
|
|
142
|
+
const base = "px-4 py-2 border-r last:border-r-0 border-gray-200";
|
|
143
|
+
const align = flags.align ? ` text-${flags.align}` : "";
|
|
144
|
+
const weight = flags.header ? " font-semibold bg-gray-50" : "";
|
|
145
|
+
return `<${type} class="${base}${align}${weight}">${content}</${type}>`;
|
|
146
|
+
};
|
|
147
|
+
// Inline code
|
|
148
|
+
renderer.codespan = function (code) {
|
|
149
|
+
return `<code class="rounded-md bg-gray-100 px-1.5 py-0.5 text-sm text-pink-600">${code}</code>`;
|
|
150
|
+
};
|
|
151
|
+
// Horizontal rule
|
|
152
|
+
renderer.hr = function () {
|
|
153
|
+
return '<hr class="my-12 border-t border-gray-200" />';
|
|
154
|
+
};
|
|
155
|
+
// Emphasis / Strong / Strikethrough
|
|
156
|
+
renderer.strong = function (text) {
|
|
157
|
+
return `<strong class="font-semibold text-gray-800">${text}</strong>`;
|
|
158
|
+
};
|
|
159
|
+
renderer.em = function (text) {
|
|
160
|
+
return `<em class="italic text-gray-700">${text}</em>`;
|
|
161
|
+
};
|
|
162
|
+
renderer.del = function (text) {
|
|
163
|
+
return `<del class="line-through text-gray-400">${text}</del>`;
|
|
164
|
+
};
|
|
165
|
+
// Images
|
|
166
|
+
renderer.image = function (href, _title, text) {
|
|
167
|
+
return `<figure class="my-8"><img src="${href}" alt="${text}" class="rounded-xl shadow-sm border border-gray-200" loading="lazy"/><figcaption class="mt-2 text-center text-sm text-gray-500">${text || ""}</figcaption></figure>`;
|
|
168
|
+
};
|
|
120
169
|
this.blogRenderer = renderer;
|
|
121
170
|
return renderer;
|
|
122
171
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../../../Server/Types/Markdown.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAIzD,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,6DAAI,CAAA;IACJ,6DAAI,CAAA;IACJ,+DAAK,CAAA;AACP,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAED,MAAqB,QAAQ;IAMP,AAAb,MAAM,CAAC,KAAK,CAAC,aAAa,CAC/B,QAAgB,EAChB,WAAgC;QAEhC,
|
|
1
|
+
{"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../../../Server/Types/Markdown.ts"],"names":[],"mappings":"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"}
|