Skip the user menu initialization if there are no items
authorAlexander Ebert <ebert@woltlab.com>
Wed, 4 Aug 2021 11:49:05 +0000 (13:49 +0200)
committerAlexander Ebert <ebert@woltlab.com>
Wed, 4 Aug 2021 11:49:05 +0000 (13:49 +0200)
ts/WoltLabSuite/Core/Ui/Mobile.ts
ts/WoltLabSuite/Core/Ui/Page/Menu/User.ts
wcfsetup/install/files/js/WoltLabSuite/Core/Ui/Mobile.js
wcfsetup/install/files/js/WoltLabSuite/Core/Ui/Page/Menu/User.js

index 4f5f3ef7693f4fc89bd96e7b4506a5978945d792..bda5ab1f35089f111fea7fa3bba967f13a054d58 100644 (file)
@@ -31,7 +31,7 @@ let _enableMobileMenu = false;
 const _knownMessages = new WeakSet<HTMLElement>();
 let _mobileSidebarEnabled = false;
 let _pageMenuMain: UiPageMenuMain;
-let _pageMenuUser: UiPageMenuUser;
+let _pageMenuUser: UiPageMenuUser | undefined = undefined;
 let _messageGroups: HTMLCollection | null = null;
 const _sidebars: HTMLElement[] = [];
 
@@ -164,7 +164,10 @@ function initMessages(): void {
 function initMobileMenu(): void {
   if (_enableMobileMenu) {
     _pageMenuMain = new UiPageMenuMain();
-    _pageMenuUser = new UiPageMenuUser();
+
+    if (UiPageMenuUser.hasValidMenu()) {
+      _pageMenuUser = new UiPageMenuUser();
+    }
   }
 }
 
@@ -376,7 +379,7 @@ export function enable(): void {
   _enabled = true;
   if (_enableMobileMenu) {
     _pageMenuMain.enable();
-    _pageMenuUser.enable();
+    _pageMenuUser?.enable();
   }
 }
 
@@ -396,7 +399,7 @@ export function disable(): void {
   _enabled = false;
   if (_enableMobileMenu) {
     _pageMenuMain.disable();
-    _pageMenuUser.disable();
+    _pageMenuUser?.disable();
   }
 }
 
index dd26e3bb7fd60cd853a68c4681fea9fe404a54c7..1efcc28777a6f3c48cc1d686b09e56bccbc178d2 100644 (file)
@@ -22,14 +22,6 @@ class UiPageMenuUser extends UiPageMenuAbstract {
    * Initializes the touch-friendly fullscreen user menu.
    */
   constructor() {
-    // check if user menu is actually empty
-    const menu = document.querySelector("#pageUserMenuMobile > .menuOverlayItemList")!;
-    if (menu.childElementCount === 1 && menu.children[0].classList.contains("menuOverlayTitle")) {
-      const userPanel = document.querySelector("#pageHeader .userPanel")!;
-      userPanel.classList.add("hideUserPanel");
-      return;
-    }
-
     super("com.woltlab.wcf.UserMenuMobile", "pageUserMenuMobile", "#pageHeader .userPanel");
 
     EventHandler.add("com.woltlab.wcf.userMenu", "updateBadge", (data) => this.updateBadge(data));
@@ -79,6 +71,17 @@ class UiPageMenuUser extends UiPageMenuAbstract {
       }
     });
   }
+
+  static hasValidMenu(): boolean {
+    const menu = document.querySelector("#pageUserMenuMobile > .menuOverlayItemList")!;
+    if (menu.childElementCount === 1 && menu.children[0].classList.contains("menuOverlayTitle")) {
+      const userPanel = document.querySelector("#pageHeader .userPanel")!;
+      userPanel.classList.add("hideUserPanel");
+      return false;
+    }
+
+    return true;
+  }
 }
 
 Core.enableLegacyInheritance(UiPageMenuUser);
index 45de7cd1d4a92934c7f681d7f275b25b81fec1cd..ba3b5603dbf05f17668b22da90f8cad586d92375 100644 (file)
@@ -28,7 +28,7 @@ define(["require", "exports", "tslib", "../Core", "../Dom/Change/Listener", "../
     const _knownMessages = new WeakSet();
     let _mobileSidebarEnabled = false;
     let _pageMenuMain;
-    let _pageMenuUser;
+    let _pageMenuUser = undefined;
     let _messageGroups = null;
     const _sidebars = [];
     function init() {
@@ -138,7 +138,9 @@ define(["require", "exports", "tslib", "../Core", "../Dom/Change/Listener", "../
     function initMobileMenu() {
         if (_enableMobileMenu) {
             _pageMenuMain = new Main_1.default();
-            _pageMenuUser = new User_1.default();
+            if (User_1.default.hasValidMenu()) {
+                _pageMenuUser = new User_1.default();
+            }
         }
     }
     function closeAllMenus() {
@@ -316,7 +318,7 @@ define(["require", "exports", "tslib", "../Core", "../Dom/Change/Listener", "../
         _enabled = true;
         if (_enableMobileMenu) {
             _pageMenuMain.enable();
-            _pageMenuUser.enable();
+            _pageMenuUser === null || _pageMenuUser === void 0 ? void 0 : _pageMenuUser.enable();
         }
     }
     exports.enable = enable;
@@ -336,7 +338,7 @@ define(["require", "exports", "tslib", "../Core", "../Dom/Change/Listener", "../
         _enabled = false;
         if (_enableMobileMenu) {
             _pageMenuMain.disable();
-            _pageMenuUser.disable();
+            _pageMenuUser === null || _pageMenuUser === void 0 ? void 0 : _pageMenuUser.disable();
         }
     }
     exports.disable = disable;
index d07e20c418f68a0fe4bdb372a3d00d8651fbba08..e3c0c59113ec517974d52aa6198a06b3463bf823 100644 (file)
@@ -17,13 +17,6 @@ define(["require", "exports", "tslib", "../../../Core", "../../../Event/Handler"
          * Initializes the touch-friendly fullscreen user menu.
          */
         constructor() {
-            // check if user menu is actually empty
-            const menu = document.querySelector("#pageUserMenuMobile > .menuOverlayItemList");
-            if (menu.childElementCount === 1 && menu.children[0].classList.contains("menuOverlayTitle")) {
-                const userPanel = document.querySelector("#pageHeader .userPanel");
-                userPanel.classList.add("hideUserPanel");
-                return;
-            }
             super("com.woltlab.wcf.UserMenuMobile", "pageUserMenuMobile", "#pageHeader .userPanel");
             EventHandler.add("com.woltlab.wcf.userMenu", "updateBadge", (data) => this.updateBadge(data));
             this.button.setAttribute("aria-label", Language.get("wcf.menu.user"));
@@ -64,6 +57,15 @@ define(["require", "exports", "tslib", "../../../Core", "../../../Event/Handler"
                 }
             });
         }
+        static hasValidMenu() {
+            const menu = document.querySelector("#pageUserMenuMobile > .menuOverlayItemList");
+            if (menu.childElementCount === 1 && menu.children[0].classList.contains("menuOverlayTitle")) {
+                const userPanel = document.querySelector("#pageHeader .userPanel");
+                userPanel.classList.add("hideUserPanel");
+                return false;
+            }
+            return true;
+        }
     }
     Core.enableLegacyInheritance(UiPageMenuUser);
     return UiPageMenuUser;