summaryrefslogtreecommitdiff
path: root/packages/client/src
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-12-26 13:06:27 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2022-12-26 13:06:27 +0900
commit78ee06985efae82b1627b4b256c0e90d1db3b97d (patch)
tree5d0cd577285f802bdc6b2c44d9ad0662be545beb /packages/client/src
parentfix style (diff)
parentfix(client): prevent infinite resize loop (#9232) (diff)
downloadsharkey-78ee06985efae82b1627b4b256c0e90d1db3b97d.tar.gz
sharkey-78ee06985efae82b1627b4b256c0e90d1db3b97d.tar.bz2
sharkey-78ee06985efae82b1627b4b256c0e90d1db3b97d.zip
Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop
Diffstat (limited to 'packages/client/src')
-rw-r--r--packages/client/src/components/global/MkSpacer.vue23
-rw-r--r--packages/client/src/directives/size.ts10
2 files changed, 30 insertions, 3 deletions
diff --git a/packages/client/src/components/global/MkSpacer.vue b/packages/client/src/components/global/MkSpacer.vue
index c7d53f2ee7..b3a42d77e7 100644
--- a/packages/client/src/components/global/MkSpacer.vue
+++ b/packages/client/src/components/global/MkSpacer.vue
@@ -24,6 +24,8 @@ let ro: ResizeObserver;
let root = $ref<HTMLElement>();
let content = $ref<HTMLElement>();
let margin = $ref(0);
+const widthHistory = [null, null] as [number | null, number | null];
+const heightHistory = [null, null] as [number | null, number | null];
const shouldSpacerMin = inject('shouldSpacerMin', false);
const adjust = (rect: { width: number; height: number; }) => {
@@ -47,9 +49,26 @@ onMounted(() => {
height: entries[0].borderBoxSize[0].blockSize,
});
*/
+
+ const width = root!.offsetWidth;
+ const height = root!.offsetHeight;
+
+ //#region Prevent infinite resizing
+ // https://github.com/misskey-dev/misskey/issues/9076
+ const pastWidth = widthHistory.pop();
+ widthHistory.unshift(width);
+ const pastHeight = heightHistory.pop();
+ heightHistory.unshift(height);
+
+
+ if (pastWidth === width && pastHeight === height) {
+ return;
+ }
+ //#endregion
+
adjust({
- width: root!.offsetWidth,
- height: root!.offsetHeight,
+ width,
+ height,
});
});
ro.observe(root!);
diff --git a/packages/client/src/directives/size.ts b/packages/client/src/directives/size.ts
index b514f4e38b..da8bd78ea1 100644
--- a/packages/client/src/directives/size.ts
+++ b/packages/client/src/directives/size.ts
@@ -8,6 +8,7 @@ const mountings = new Map<Element, {
resize: ResizeObserver;
intersection?: IntersectionObserver;
previousWidth: number;
+ twoPreviousWidth: number;
}>();
type ClassOrder = {
@@ -66,7 +67,13 @@ function calc(el: Element) {
delete info.intersection;
}
- mountings.set(el, Object.assign(info, { previousWidth: width }));
+ mountings.set(el, { ...info, ...{ previousWidth: width, twoPreviousWidth: info.previousWidth }});
+
+ // Prevent infinite resizing
+ // https://github.com/misskey-dev/misskey/issues/9076
+ if (info.twoPreviousWidth === width) {
+ return;
+ }
const cached = cache.get(getOrderName(width, info.value));
if (cached) {
@@ -90,6 +97,7 @@ export default {
value: binding.value,
resize,
previousWidth: 0,
+ twoPreviousWidth: 0,
});
calc(src);