Skip to content

Commit 6a9dec0

Browse files
committed
perf(browser): Make the /browser/dom submodule tree-shakable
1 parent 88660a5 commit 6a9dec0

File tree

3 files changed

+36
-23
lines changed

3 files changed

+36
-23
lines changed

browser/dom/getCachedLines.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import type { Line, Scrapbox } from "@cosense/types/userscript";
22
declare const scrapbox: Scrapbox;
33

4-
let isLatestData = false;
5-
let lines: typeof scrapbox.Page.lines = null;
4+
let isLatestData = /* @__PURE__ */ false;
5+
let lines: Line[] | null = /* @__PURE__ */ null;
66

7-
scrapbox.addListener("lines:changed", () => isLatestData = false);
8-
scrapbox.addListener("layout:changed", () => isLatestData = false);
7+
let initialize: (() => void) | undefined = () => {
8+
scrapbox.addListener("lines:changed", () => isLatestData = false);
9+
scrapbox.addListener("layout:changed", () => isLatestData = false);
10+
initialize = undefined;
11+
};
912

1013
/** scrapbox.Page.linesをcacheして取得する
1114
*
@@ -14,6 +17,7 @@ scrapbox.addListener("layout:changed", () => isLatestData = false);
1417
* @return `scrapbox.Page.lines`と同じ。常に最新のものが返される
1518
*/
1619
export const getCachedLines = (): readonly Line[] | null => {
20+
initialize?.();
1721
if (!isLatestData) {
1822
lines = scrapbox.Page.lines;
1923
isLatestData = true;

browser/dom/textInputEventListener.ts

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,34 @@ declare const scrapbox: Scrapbox;
77
* - second key: listener
88
* - value: encoded options
99
*/
10-
const listenerMap = new Map<
10+
const listenerMap = /* @__PURE__ */ new Map<
1111
keyof HTMLElementEventMap,
1212
Map<EventListener, Set<number>>
1313
>();
14-
const onceListenerMap = new Map<EventListener, Map<number, EventListener>>();
14+
const onceListenerMap = /* @__PURE__ */ new Map<
15+
EventListener,
16+
Map<number, EventListener>
17+
>();
18+
19+
/** re-register event listeners when the layout changes */
20+
let reRegister: (() => void) | undefined = () => {
21+
scrapbox.on("layout:changed", () => {
22+
const textinput = textInput();
23+
if (!textinput) return;
24+
for (const [name, argMap] of listenerMap) {
25+
for (const [listener, encodedOptions] of argMap) {
26+
for (const encoded of encodedOptions) {
27+
textinput.addEventListener(
28+
name,
29+
listener as EventListener,
30+
decode(encoded),
31+
);
32+
}
33+
}
34+
}
35+
});
36+
reRegister = undefined;
37+
};
1538

1639
/** `#text-input`に対してイベントリスナーを追加する
1740
*
@@ -30,6 +53,7 @@ export const addTextInputEventListener = <K extends keyof HTMLElementEventMap>(
3053
) => unknown,
3154
options?: boolean | AddEventListenerOptions,
3255
): void => {
56+
reRegister?.();
3357
const argMap = listenerMap.get(name) ?? new Map<EventListener, Set<number>>();
3458
const encodedOptions = argMap.get(listener as EventListener) ?? new Set();
3559
if (encodedOptions.has(encode(options))) return;
@@ -62,30 +86,14 @@ export const addTextInputEventListener = <K extends keyof HTMLElementEventMap>(
6286
textinput.addEventListener<K>(name, listener, options);
6387
};
6488

65-
// re-register event listeners when the layout changes
66-
scrapbox.on("layout:changed", () => {
67-
const textinput = textInput();
68-
if (!textinput) return;
69-
for (const [name, argMap] of listenerMap) {
70-
for (const [listener, encodedOptions] of argMap) {
71-
for (const encoded of encodedOptions) {
72-
textinput.addEventListener(
73-
name,
74-
listener as EventListener,
75-
decode(encoded),
76-
);
77-
}
78-
}
79-
}
80-
});
81-
8289
export const removeTextInputEventListener = <
8390
K extends keyof HTMLElementEventMap,
8491
>(
8592
name: K,
8693
listener: (event: HTMLElementEventMap[K]) => unknown,
8794
options?: boolean | AddEventListenerOptions,
8895
): void => {
96+
reRegister?.();
8997
const argMap = listenerMap.get(name);
9098
if (!argMap) return;
9199
const encodedOptions = argMap.get(listener as EventListener);

script.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import "./browser/dom/mod.ts";

0 commit comments

Comments
 (0)