Skip to content

Commit d893e7d

Browse files
fix(Tweaks): Mobile menu notification badge transition (#1958)
Co-authored-by: April Sylph <28949509+AprilSylph@users.noreply.github.com>
1 parent 8eb6165 commit d893e7d

2 files changed

Lines changed: 29 additions & 2 deletions

File tree

src/features/tweaks/subtle_activity_mutuals.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ const processLabels = labels => labels.forEach(label => {
7575
span.classList.add(spanClass);
7676
});
7777

78+
// Resolves after (at least) one browser repaint. A single requestAnimationFrame callback is fired just before
79+
// the currently pending frame repaint; a second will be scheduled to affect the following frame.
7880
const waitForRender = () =>
7981
new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve)));
8082

src/utils/mobile_menu_badge_hide.js

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,20 @@ import { pageModifications } from './mutations.js';
55

66
const mobileBadgeSelector = `header ${keyToCss('hamburger')} + ${keyToCss('notificationBadge')}`;
77
const hideBadgeClass = 'xkit-hide-mobile-menu-badge';
8+
const noTransitionClass = 'xkit-hide-mobile-menu-badge-no-transition';
9+
10+
// Load injected utility into module cache
11+
inject('/main_world/unbury_mobile_badge_data.js');
812

913
document.documentElement.append(
10-
buildStyle(`.${hideBadgeClass} ${mobileBadgeSelector} { transform: scale(0); }`),
14+
buildStyle(`
15+
.${hideBadgeClass} ${mobileBadgeSelector} {
16+
transform: scale(0);
17+
}
18+
.${noTransitionClass} ${mobileBadgeSelector} {
19+
transition: none;
20+
}
21+
`),
1122
);
1223

1324
/** @typedef {'home' | 'communities' | 'activity' | 'messages' | 'inbox' | 'account'} NotificationType */
@@ -58,5 +69,19 @@ export const mobileMenuBadgeHide = Object.freeze({
5869
},
5970
});
6071

61-
pageModifications.register(mobileBadgeSelector, () => mobileMenuBadgeHide.trigger());
72+
// Resolves after (at least) one browser repaint. A single requestAnimationFrame callback is fired just before
73+
// the currently pending frame repaint; a second will be scheduled to affect the following frame.
74+
const waitForRender = () =>
75+
new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve)));
76+
77+
const onResizeIntoTabletLayout = async () => {
78+
document.documentElement.classList.add(noTransitionClass);
79+
80+
mobileMenuBadgeHide.trigger();
81+
82+
await waitForRender();
83+
document.documentElement.classList.remove(noTransitionClass);
84+
};
85+
86+
pageModifications.register(mobileBadgeSelector, onResizeIntoTabletLayout);
6287
setInterval(() => mobileMenuBadgeHide.trigger(), 10_000);

0 commit comments

Comments
 (0)