diff options
author | Allan Wang <me@allanwang.ca> | 2020-10-04 02:37:11 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-04 02:37:11 -0700 |
commit | 4440326f4bb9f57fd1635403b1966cb81f3d359f (patch) | |
tree | 49437ccd2f465ddfd71093eee7ea536cbf3f19e8 /app/src/web/ts/auto_resize_textarea.ts | |
parent | 019067430fce1fdd6cc4ff0a4e63937927de2c17 (diff) | |
parent | 70563777b84fb475a5100054cb53bca261a7a0a7 (diff) | |
download | frost-4440326f4bb9f57fd1635403b1966cb81f3d359f.tar.gz frost-4440326f4bb9f57fd1635403b1966cb81f3d359f.tar.bz2 frost-4440326f4bb9f57fd1635403b1966cb81f3d359f.zip |
Merge pull request #1720 from AllanWang/textbox
Diffstat (limited to 'app/src/web/ts/auto_resize_textarea.ts')
-rw-r--r-- | app/src/web/ts/auto_resize_textarea.ts | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/app/src/web/ts/auto_resize_textarea.ts b/app/src/web/ts/auto_resize_textarea.ts index e170d14e..c71a75a1 100644 --- a/app/src/web/ts/auto_resize_textarea.ts +++ b/app/src/web/ts/auto_resize_textarea.ts @@ -1,6 +1,7 @@ // Credits to https://codepen.io/tomhodgins/pen/KgazaE (function () { - const textareas = <NodeListOf<HTMLTextAreaElement>>document.querySelectorAll('textarea:not(.frostAutoExpand)'); + const classTag = 'frostAutoExpand'; + const textareas = <NodeListOf<HTMLTextAreaElement>>document.querySelectorAll(`textarea:not(.${classTag})`); const dataAttribute = 'data-frost-minHeight'; @@ -11,14 +12,25 @@ // If no height is defined, have min bound to current height; // otherwise we will allow for height decreases in case user deletes text const minHeight = parseInt(el.getAttribute(dataAttribute) ?? '0'); + + // Save scroll position prior to height update + // See https://stackoverflow.com/a/18262927/4407321 + const scrollLeft = window.pageXOffset || + (document.documentElement || document.body.parentNode || document.body).scrollLeft; + const scrollTop = window.pageYOffset || + (document.documentElement || document.body.parentNode || document.body).scrollTop; + el.style.height = 'inherit'; el.style.height = `${Math.max(el.scrollHeight, minHeight)}px`; + + // Go to original scroll position + window.scrollTo(scrollLeft, scrollTop); }; function _frostExpandAll() { textareas.forEach(_frostAutoExpand); } textareas.forEach(el => { - el.classList.add('frostAutoExpand') + el.classList.add(classTag) const __frostAutoExpand = () => { _frostAutoExpand(el) }; |