diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-03-03 08:48:52 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2023-03-03 08:48:52 +0900 |
| commit | cf8a7f93d5b67163272bb75064b090d82a6700e9 (patch) | |
| tree | 2c4056db2c4d8014d2e0f1433317e638dc6dcc1e /packages/frontend/src/directives | |
| parent | :art: (diff) | |
| download | misskey-cf8a7f93d5b67163272bb75064b090d82a6700e9.tar.gz misskey-cf8a7f93d5b67163272bb75064b090d82a6700e9.tar.bz2 misskey-cf8a7f93d5b67163272bb75064b090d82a6700e9.zip | |
:art:
Diffstat (limited to 'packages/frontend/src/directives')
| -rw-r--r-- | packages/frontend/src/directives/container.ts | 21 | ||||
| -rw-r--r-- | packages/frontend/src/directives/index.ts | 2 |
2 files changed, 23 insertions, 0 deletions
diff --git a/packages/frontend/src/directives/container.ts b/packages/frontend/src/directives/container.ts new file mode 100644 index 0000000000..a8a93eb9be --- /dev/null +++ b/packages/frontend/src/directives/container.ts @@ -0,0 +1,21 @@ +import { Directive } from 'vue'; + +const map = new WeakMap<HTMLElement, ResizeObserver>(); + +export default { + mounted(el: HTMLElement, binding, vn) { + const ro = new ResizeObserver((entries, observer) => { + el.style.setProperty('--containerHeight', el.offsetHeight + 'px'); + }); + ro.observe(el); + map.set(el, ro); + }, + + unmounted(el, binding, vn) { + const ro = map.get(el); + if (ro) { + ro.disconnect(); + map.delete(el); + } + }, +} as Directive; diff --git a/packages/frontend/src/directives/index.ts b/packages/frontend/src/directives/index.ts index a690fd6c42..854f0a544e 100644 --- a/packages/frontend/src/directives/index.ts +++ b/packages/frontend/src/directives/index.ts @@ -11,6 +11,7 @@ import clickAnime from './click-anime'; import panel from './panel'; import adaptiveBorder from './adaptive-border'; import adaptiveBg from './adaptive-bg'; +import container from './container'; export default function(app: App) { app.directive('userPreview', userPreview); @@ -25,4 +26,5 @@ export default function(app: App) { app.directive('panel', panel); app.directive('adaptive-border', adaptiveBorder); app.directive('adaptive-bg', adaptiveBg); + app.directive('container', container); } |