@@ -5,9 +5,20 @@ import { pageModifications } from './mutations.js';
55
66const mobileBadgeSelector = `header ${ keyToCss ( 'hamburger' ) } + ${ keyToCss ( 'notificationBadge' ) } ` ;
77const 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
913document . 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 ) ;
6287setInterval ( ( ) => mobileMenuBadgeHide . trigger ( ) , 10_000 ) ;
0 commit comments