Files
docuseal/app/javascript/elements/autoresize_textarea.js
T

42 lines
864 B
JavaScript
Raw Normal View History

2023-07-01 01:09:44 +03:00
export default class extends HTMLElement {
connectedCallback () {
this.resize()
this.textarea.addEventListener('input', () => this.resize())
2025-02-09 00:45:16 +02:00
this.observeVisibility()
2023-07-01 01:09:44 +03:00
}
resize () {
if (this.textarea.clientHeight < this.textarea.scrollHeight) {
2024-04-17 17:22:49 +03:00
this.textarea.style.height = `${this.textarea.scrollHeight + 5}px`
2023-07-01 01:09:44 +03:00
}
}
2025-02-09 00:45:16 +02:00
observeVisibility () {
this.observer = new IntersectionObserver(
(entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
this.resize()
this.observer.unobserve(this.textarea)
}
})
},
{
threshold: 0.1
}
)
this.observer.observe(this.textarea)
}
disconnectedCallback () {
this.observer.unobserve(this.textarea)
}
2023-07-01 01:09:44 +03:00
get textarea () {
return this.querySelector('textarea')
}
}