all repos — snow-editor @ 65993a713586363acceab129af67161a5fbe71cc

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
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
import DOMPurify from 'dompurify';
import { MODES } from './editorConstants.js';

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

let markedParser = null;
let markedLoadPromise = null;
let orgToHtmlSync = null;
let orgLoadPromise = 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 ensureOrgLoaded() {
  if (orgToHtmlSync) {
    return Promise.resolve(orgToHtmlSync);
  }
  if (!orgLoadPromise) {
    orgLoadPromise = import('./org/pipeline.js').then((module) => {
      orgToHtmlSync = module.orgToHtmlSync;
      return orgToHtmlSync;
    });
  }
  return orgLoadPromise;
}

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

  if (mode === MODES.ORG) {
    if (!orgToHtmlSync) return '';
    return orgToHtmlSync(content);
  }

  if (!markedParser) {
    return '';
  }

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