@oiij/markdown-it
Version:
A Vue Composable for markdown-it
36 lines (34 loc) • 1.04 kB
JavaScript
import DOMPurify from "dompurify";
import markdownIt from "markdown-it";
import { isReactive, isRef, ref, toValue, watch, watchEffect } from "vue";
//#region src/index.ts
function useMarkdownIt(templateRef, defaultValue, options) {
const { manual = false, domPurify = true, ..._options } = options ?? {};
const value = ref(isRef(defaultValue) ? toValue(defaultValue.value) : isReactive(defaultValue) ? toValue(defaultValue) : defaultValue);
if (isRef(defaultValue)) watchEffect(() => {
value.value = toValue(defaultValue.value);
});
const html = ref("");
const md = markdownIt({ ..._options });
function render(value$1) {
const mdValue = md.render(value$1);
html.value = domPurify ? DOMPurify.sanitize(mdValue) : mdValue;
if (templateRef && templateRef.value) templateRef.value.innerHTML = html.value;
return html.value;
}
if (!manual) {
render(value.value ?? "");
watch(value, (v) => {
render(v ?? "");
});
}
return {
value,
html,
templateRef,
md,
render
};
}
//#endregion
export { useMarkdownIt };