-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmain.ts
60 lines (47 loc) · 1.47 KB
/
main.ts
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
54
55
56
import { Plugin, MarkdownPostProcessorContext, MarkdownPostProcessor, MarkdownPreviewRenderer } from 'obsidian';
// @ts-ignore type declaration
import waveskin from 'wavedrom/skins/default'
import { parse } from 'json5'
import { WaveDromType } from 'types';
import { customAlphabet } from 'nanoid'
const nanoid = customAlphabet('1234567890', 12)
const nanoidNum = () => parseInt(nanoid())
let Wavedrom: WaveDromType
export default class ObsidianWaveDrom extends Plugin {
postProcessors: Map<string, MarkdownPostProcessor>
async onload() {
this.postProcessors = new Map()
// @ts-ignore type declaration
Wavedrom = (await import('wavedrom/wavedrom.unpkg')).default as WaveDromType
this.registerWaveDromBlock('wavedrom')
console.log('Obsidian wavedrom loaded')
}
registerWaveDromBlock(prefix: string) {
this.postProcessors.set(
prefix,
this.registerMarkdownCodeBlockProcessor(
prefix,
(src, el, ctx) => this.postProcessor(prefix, src, el, ctx)
)
)
}
postProcessor(
_prefix: string,
src: string,
el: HTMLElement,
_?: MarkdownPostProcessorContext,
) {
const source = parse(src)
Wavedrom.renderWaveElement(nanoidNum(), source, el, waveskin)
}
unregister() {
this.postProcessors.forEach((value) => {
MarkdownPreviewRenderer.unregisterPostProcessor(value)
})
this.postProcessors.clear()
}
onunload() {
this.unregister()
console.log('Obsidian wavedrom unloaded')
}
}