all repos — snow-editor @ da44ba535c2043b2be1afcd3798276c63ca7e677

small and cozy markdown, and orgmode editor

src/lib/previewHtml.js (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
import DOMPurify from 'dompurify';
import { MODES } from './editorConstants.js';
import { parseOrgMode } from './parseOrgMode.js';

const SANITIZE_OPTIONS = { ADD_ATTR: ['class', 'rel'] };

let markedParser = null;
let markedLoadPromise = null;

export function ensureMarkedLoaded() {
  if (markedParser) {
    return Promise.resolve(markedParser);
  }
  if (!markedLoadPromise) {
    markedLoadPromise = import('marked').then((module) => {
      markedParser = module.marked;
      return markedParser;
    });
  }
  return markedLoadPromise;
}

export function buildPreviewHtml(mode, content) {
  if (!content || !content.trim()) {
    return '';
  }

  if (mode === MODES.ORG) {
    return DOMPurify.sanitize(parseOrgMode(content), SANITIZE_OPTIONS);
  }

  if (!markedParser) {
    return '';
  }

  const rawHtml = markedParser.parse(content, { gfm: true, breaks: true });
  return DOMPurify.sanitize(rawHtml, SANITIZE_OPTIONS);
}