Skip to content

Commit 246249a

Browse files
committed
refactor: simplify resize handling
simplified from legacy code for VS Code Webview
1 parent 49f6716 commit 246249a

File tree

2 files changed

+14
-22
lines changed

2 files changed

+14
-22
lines changed

src/preview/markmap-init.ts

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,22 @@ import { Toolbar } from 'markmap-toolbar'
33
import { debounce } from "radashi"
44

55
const resize = {
6-
event: new Event('resize'),
7-
observer: new ResizeObserver((entries) => {
8-
entries.forEach((entry) => {
9-
entry.target.dispatchEvent(resize.event)
10-
})
11-
}),
12-
listeners: new Map<Element, (event: Event) => void>(),
13-
observe: (el: Element, func: () => void) => {
14-
if (!(el instanceof Element) || typeof func !== "function") return
6+
resizeListeners: new Map<HTMLElement, () => void>(),
157

16-
if (!resize.listeners.has(el)) {
17-
resize.listeners.set(el, func)
18-
el.addEventListener("resize", func)
19-
resize.observer.observe(el)
20-
}
8+
add(el: HTMLElement, callback: () => void) {
9+
if (!(el instanceof HTMLElement) || typeof callback !== "function") return
10+
if (!this.resizeListeners.has(el)) this.resizeListeners.set(el, callback)
2111
},
22-
destroyAll: () => {
23-
resize.listeners.forEach((func, el) => {
24-
el.removeEventListener("resize", func)
25-
resize.observer.unobserve(el)
26-
})
27-
resize.listeners.clear()
12+
13+
clear() {
14+
this.resizeListeners.clear()
2815
}
2916
}
3017

18+
window.addEventListener('resize', () => {
19+
resize.resizeListeners.forEach(callback => callback())
20+
})
21+
3122
const toolbar = (markmapInstance: Markmap) => {
3223
const toolbar = Toolbar.create(markmapInstance)
3324
toolbar.setBrand(false)
@@ -60,12 +51,12 @@ const render = () => {
6051
const markmapInstance = Markmap.create(svg, deriveOptions(jsonOptions), root)
6152
if (wrapper.dataset?.toolbar !== 'false') wrapper.appendChild(toolbar(markmapInstance))
6253
const autoHeight = !wrapper.style.height
63-
resize.observe(wrapper, debounce({ delay: 100 }, () => updateMarkmapSize(markmapInstance, autoHeight)))
54+
resize.add(wrapper, debounce({ delay: 100 }, () => updateMarkmapSize(markmapInstance, autoHeight)))
6455
})
6556
}
6657

6758
window.addEventListener('vscode.markdown.updateContent', () => {
68-
resize.destroyAll()
59+
resize.clear()
6960
render()
7061
})
7162

src/preview/tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"DOM",
66
"DOM.Iterable"
77
],
8+
"noImplicitThis": true
89
},
910
"exclude": [
1011
"node_modules"

0 commit comments

Comments
 (0)