Skip to content

Commit cd58a52

Browse files
author
Andrew L
committed
Update to use weak map
1 parent bd9a7fb commit cd58a52

File tree

4 files changed

+21
-19
lines changed

4 files changed

+21
-19
lines changed

src/index.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import {OptionConfig, PASTE_AS_PLAIN_TEXT_ATTRIBUTE} from './option-config'
21
import {install as installHTML, uninstall as uninstallHTML} from './paste-markdown-html'
32
import {install as installImageLink, uninstall as uninstallImageLink} from './paste-markdown-image-link'
43
import {install as installLink, uninstall as uninstallLink} from './paste-markdown-link'
@@ -8,15 +7,14 @@ import {
87
} from './paste-keyboard-shortcut-helper'
98
import {install as installTable, uninstall as uninstallTable} from './paste-markdown-table'
109
import {install as installText, uninstall as uninstallText} from './paste-markdown-text'
10+
import {OptionConfig} from './option-config'
1111

1212
interface Subscription {
1313
unsubscribe: () => void
1414
}
1515

1616
function subscribe(el: HTMLElement, optionConfig?: OptionConfig): Subscription {
17-
markElementWithConfigIfNeeded(el, optionConfig)
18-
19-
installSkipFormatting(el, installTable, installImageLink, installLink, installText, installHTML)
17+
installSkipFormatting(el, [installTable, installImageLink, installText, installHTML], [installLink], optionConfig)
2018
return {
2119
unsubscribe: () => {
2220
uninstallSkipFormatting(el)
@@ -29,12 +27,6 @@ function subscribe(el: HTMLElement, optionConfig?: OptionConfig): Subscription {
2927
}
3028
}
3129

32-
function markElementWithConfigIfNeeded(el: HTMLElement, optionConfig?: OptionConfig) {
33-
if (optionConfig?.pasteAsPlainText) {
34-
el.setAttribute(PASTE_AS_PLAIN_TEXT_ATTRIBUTE, 'true')
35-
}
36-
}
37-
3830
export {
3931
subscribe,
4032
installHTML,

src/option-config.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
const PASTE_AS_PLAIN_TEXT_ATTRIBUTE = 'data-paste-as-plain-text'
2-
3-
interface OptionConfig {
1+
export interface OptionConfig {
42
pasteAsPlainText?: boolean
53
}
6-
7-
export {PASTE_AS_PLAIN_TEXT_ATTRIBUTE, OptionConfig}

src/paste-keyboard-shortcut-helper.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import {OptionConfig} from './option-config'
2+
13
const skipFormattingMap = new WeakMap<HTMLElement, boolean>()
24

35
function setSkipFormattingFlag(event: KeyboardEvent): void {
@@ -21,13 +23,22 @@ export function shouldSkipFormatting(el: HTMLElement): boolean {
2123
return shouldSkipFormattingState
2224
}
2325

24-
export function installAround(el: HTMLElement, ...installCallbacks: Array<(el: HTMLElement) => void>): void {
26+
export function installAround(
27+
el: HTMLElement,
28+
installCallbacks: Array<(el: HTMLElement) => void>,
29+
installCallbacksWithOptions: Array<(el: HTMLElement, optionConfig?: OptionConfig) => void>,
30+
optionConfig?: OptionConfig
31+
): void {
2532
el.addEventListener('keydown', setSkipFormattingFlag)
2633

2734
for (const installCallback of installCallbacks) {
2835
installCallback(el)
2936
}
3037

38+
for (const installCallback of installCallbacksWithOptions) {
39+
installCallback(el, optionConfig)
40+
}
41+
3142
el.addEventListener('paste', unsetSkipFormattedFlag)
3243
}
3344

src/paste-markdown-link.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1-
import {PASTE_AS_PLAIN_TEXT_ATTRIBUTE} from './option-config'
1+
import {OptionConfig} from './option-config'
22
import {insertText} from './text'
33
import {shouldSkipFormatting} from './paste-keyboard-shortcut-helper'
44

5-
export function install(el: HTMLElement): void {
5+
const pasteAsPlainTextMap = new WeakMap<HTMLElement, boolean>()
6+
7+
export function install(el: HTMLElement, optionConfig?: OptionConfig): void {
8+
pasteAsPlainTextMap.set(el, optionConfig?.pasteAsPlainText === true)
69
el.addEventListener('paste', onPaste)
710
}
811

@@ -13,7 +16,7 @@ export function uninstall(el: HTMLElement): void {
1316
function onPaste(event: ClipboardEvent) {
1417
const {currentTarget: el} = event
1518
const element = el as HTMLElement
16-
const shouldPastePlainText = element.hasAttribute(PASTE_AS_PLAIN_TEXT_ATTRIBUTE)
19+
const shouldPastePlainText = pasteAsPlainTextMap.get(element) ?? false
1720
const shouldSkipDefaultBehavior = shouldSkipFormatting(element)
1821

1922
if ((!shouldPastePlainText && shouldSkipDefaultBehavior) || (shouldPastePlainText && !shouldSkipDefaultBehavior)) {

0 commit comments

Comments
 (0)