@oiij/markdown-it
Version:
A Vue Composable for markdown-it
45 lines (43 loc) • 1.15 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(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 domRef = ref();
const md = markdownIt({ ..._options });
function render(value$1) {
const mdValue = md.render(value$1);
html.value = domPurify ? DOMPurify.sanitize(mdValue) : mdValue;
if (domRef.value) domRef.value.innerHTML = html.value;
else {
const unWatch = watch(domRef, (v) => {
if (v) {
v.innerHTML = html.value;
unWatch();
}
});
}
return html.value;
}
if (!manual) {
render(value.value ?? "");
watch(value, (v) => {
render(v ?? "");
});
}
return {
value,
html,
domRef,
md,
render
};
}
//#endregion
export { useMarkdownIt };