RSS Git Download  Clone
Raw Blame History
import {Injectable} from '@angular/core';
import {Layout} from '../layout/cory-layout';

const worker = new Worker(new URL('../../worker/markdown.worker', import.meta.url), { type: 'module' });

const nextId  = require('../utils/next-id.js')

@Injectable()
export class MarkdownService {

    public context: any;
    layout: Layout;

    constructor() {
    }

    public render(md: string, layout: Layout, path: string) {
        this.layout = layout;

        return new Promise(async(resolve, reject) => {
            const requestId = nextId()
            const message =  (event: any) => {
                if (event.data.requestId === requestId) {
                    worker.removeEventListener('message', message)
                    if (event.data.success === true) {
                        resolve(event.data.html)
                    } else {
                        reject(new Error(event.data.errorMessage));
                    }
                }
            }

            worker.addEventListener('message', message)

            if (this.layout.packages === undefined) {
                await new Promise(resolve => {
                    const wait = () => {
                        console.info('waiting for github repo packages')
                        if (this.layout.packages === undefined) {
                            setTimeout(wait, 100)
                        } else {
                            resolve(undefined)
                        }
                    }
                    wait()
                })
            }

            worker.postMessage({
                md: md,
                settings: this.context.settings.data,
                currentRepo: this.layout.currentRepo,
                packages: this.layout.packages,
                requestId: requestId,
                path: path,
                location: JSON.parse(JSON.stringify(window.location)),
            });
        })
    }
}