MCPcopy
hub / github.com/hotwired/stimulus / TargetObserver

Class TargetObserver

src/core/target_observer.ts:10–86  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8}
9
10export class TargetObserver implements TokenListObserverDelegate {
11 readonly context: Context
12 readonly delegate: TargetObserverDelegate
13 readonly targetsByName: Multimap<string, Element>
14 private tokenListObserver?: TokenListObserver
15
16 constructor(context: Context, delegate: TargetObserverDelegate) {
17 this.context = context
18 this.delegate = delegate
19 this.targetsByName = new Multimap()
20 }
21
22 start() {
23 if (!this.tokenListObserver) {
24 this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this)
25 this.tokenListObserver.start()
26 }
27 }
28
29 stop() {
30 if (this.tokenListObserver) {
31 this.disconnectAllTargets()
32 this.tokenListObserver.stop()
33 delete this.tokenListObserver
34 }
35 }
36
37 // Token list observer delegate
38
39 tokenMatched({ element, content: name }: Token) {
40 if (this.scope.containsElement(element)) {
41 this.connectTarget(element, name)
42 }
43 }
44
45 tokenUnmatched({ element, content: name }: Token) {
46 this.disconnectTarget(element, name)
47 }
48
49 // Target management
50
51 connectTarget(element: Element, name: string) {
52 if (!this.targetsByName.has(name, element)) {
53 this.targetsByName.add(name, element)
54 this.tokenListObserver?.pause(() => this.delegate.targetConnected(element, name))
55 }
56 }
57
58 disconnectTarget(element: Element, name: string) {
59 if (this.targetsByName.has(name, element)) {
60 this.targetsByName.delete(name, element)
61 this.tokenListObserver?.pause(() => this.delegate.targetDisconnected(element, name))
62 }
63 }
64
65 disconnectAllTargets() {
66 for (const name of this.targetsByName.keys) {
67 for (const element of this.targetsByName.getValuesForKey(name)) {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…