import {Marked} from 'marked';
import hljs from 'highlight.js';
import markedFootnote from 'marked-footnote'
import markedCodeFormat from 'marked-code-format'
import { markedEmoji } from 'marked-emoji';
postMessage({
type: 'init',
data: 'Hello World!'
})
// 默认编辑器配置
const defaoltMarkOption = {
async: true, // 同步编译
pedantic: false,
gfm: true,
silent: true, // 输出错误
breaks: false, // 将回车编程
}
// 自定义行号注入函数
const injectLineNumbers = (highlightedCode) => {
const lines = highlightedCode.split('\n')
// 移除最后一行空行(常见于代码块末尾的换行)
if (lines[lines.length - 1] === '') lines.pop()
// 为每行添加行号容器
return lines.map((line, index) => `
${withLineNumbers}
`;
}
}
// 编辑器Marked编译器
const editorMarked = new Marked({
...defaoltMarkOption,
renderer: editorRenderOption
});
// 显示器Marked编译器
const viewerMarked = new Marked({
...defaoltMarkOption,
renderer: viewerRenderOption
});
// 编辑器插件
editorMarked.use(markedCodeFormat()).use()
// 显示器插件
// 自定义表情快速插入
const markedEmojiOptions = {
emojis: {
"heart": "❤️",
"tada": "🎉"
},
renderer: (token) => {
console.log(token)
return token.emoji
}
};
// 支持脚注[^1] 会影响原始文本
viewerMarked.use(markedFootnote()).use(markedCodeFormat()).use(markedEmoji(markedEmojiOptions))
addEventListener('message', async (e) => {
console.log(e.data)
switch (e.data.type) {
case 'render': {
// const editContent = await makeEditContent(e.data.content)
const viewContent = await makeViewContent(e.data.content)
postMessage({
type: 'render',
content: {
viewContent,
// editContent,
},
})
break;
}
}
})
// 函数
// 使用编译
async function makeEditContent(contents){
// 去除html innerText两端的空格,将 转化为空格
let content = contents.trim().replace(/ /g, ' ');
// 过滤不能识别,难识别的字符,空字符
content = content.replace(/^[\u200B\u200C\u200D\u200E\u200F\uFEFF]/,"");
// 编译
content = await editorMarked.parse(content)
return content
}
async function makeViewContent(contents){
// 过滤不能识别,难识别的字符,空字符
let content = contents.replace(/^[\u200B\u200C\u200D\u200E\u200F\uFEFF]/,"");
// 编译
content = await viewerMarked.parse(content)
return content
}