markdown.js 933 B

123456789101112131415161718192021222324252627282930313233
  1. export default {
  2. template: `<div></div>`,
  3. mounted() {
  4. this.ensure_codehilite_css();
  5. this.update(this.$el.innerHTML);
  6. },
  7. methods: {
  8. update(content) {
  9. this.$el.innerHTML = content;
  10. this.$el.querySelectorAll(".mermaid-pre").forEach((pre, i) => {
  11. const code = decodeHtml(pre.children[0].innerHTML);
  12. mermaid.render(`mermaid_${this.$el.id}_${i}`, code, (svg) => (pre.innerHTML = svg));
  13. });
  14. },
  15. ensure_codehilite_css() {
  16. if (!document.querySelector(`style[data-codehilite-css]`)) {
  17. const style = document.createElement("style");
  18. style.setAttribute("data-codehilite-css", "");
  19. style.innerHTML = this.codehilite_css;
  20. document.head.appendChild(style);
  21. }
  22. },
  23. },
  24. props: {
  25. codehilite_css: String,
  26. },
  27. };
  28. function decodeHtml(html) {
  29. const txt = document.createElement("textarea");
  30. txt.innerHTML = html;
  31. return txt.value;
  32. }