forked from hackorum-dev/hackorum
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhelp_outline_controller.js
More file actions
44 lines (37 loc) · 887 Bytes
/
help_outline_controller.js
File metadata and controls
44 lines (37 loc) · 887 Bytes
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
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
static targets = ["link"]
connect() {
this.observer = new IntersectionObserver(
this.onIntersect.bind(this),
{
rootMargin: "0px 0px -80% 0px",
threshold: 0
}
)
this.headings().forEach(heading => this.observer.observe(heading))
}
disconnect() {
this.observer.disconnect()
}
onIntersect(entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
this.setActive(entry.target.id)
}
})
}
setActive(id) {
this.linkTargets.forEach(link => {
link.classList.toggle(
"active",
link.getAttribute("href") === `#${id}`
)
})
}
headings() {
return Array.from(
document.querySelectorAll(".help-content h1, .help-content h2, .help-content h3")
)
}
}