From 1db7283ba9f027d51c9b2fd5b0132d71a8d15d63 Mon Sep 17 00:00:00 2001 From: Daniel <50356015+danny007in@users.noreply.github.com> Date: Wed, 31 May 2023 13:37:51 +0530 Subject: [PATCH] bug fix minor js code --- src/ts/card-widget.ts | 4 ++-- src/ts/direct-chat.ts | 4 ++-- src/ts/layout.ts | 4 ++-- src/ts/push-menu.ts | 4 ++-- src/ts/treeview.ts | 14 ++++++++------ src/ts/util/index.ts | 28 +++++++++++++++------------- 6 files changed, 31 insertions(+), 27 deletions(-) diff --git a/src/ts/card-widget.ts b/src/ts/card-widget.ts index 0c5f65c61..0c7bc7b03 100644 --- a/src/ts/card-widget.ts +++ b/src/ts/card-widget.ts @@ -6,7 +6,7 @@ */ import { - domReady, + onDOMContentLoaded, slideUp, slideDown } from './util/index' @@ -243,7 +243,7 @@ class CardWidget { * ==================================================== */ -domReady(() => { +onDOMContentLoaded(() => { const collapseBtn = document.querySelectorAll(SELECTOR_DATA_COLLAPSE) collapseBtn.forEach(btn => { diff --git a/src/ts/direct-chat.ts b/src/ts/direct-chat.ts index f4c596750..cf090193e 100644 --- a/src/ts/direct-chat.ts +++ b/src/ts/direct-chat.ts @@ -6,7 +6,7 @@ */ import { - domReady + onDOMContentLoaded } from './util/index' /** @@ -58,7 +58,7 @@ class DirectChat { * ==================================================== */ -domReady(() => { +onDOMContentLoaded(() => { const button = document.querySelectorAll(SELECTOR_DATA_TOGGLE) button.forEach(btn => { diff --git a/src/ts/layout.ts b/src/ts/layout.ts index 31326c478..84bfdb6f1 100644 --- a/src/ts/layout.ts +++ b/src/ts/layout.ts @@ -6,7 +6,7 @@ */ import { - domReady + onDOMContentLoaded } from './util/index' /** @@ -42,7 +42,7 @@ class Layout { } } -domReady(() => { +onDOMContentLoaded(() => { const data = new Layout(document.body) data.holdTransition() setTimeout(() => { diff --git a/src/ts/push-menu.ts b/src/ts/push-menu.ts index 492bab579..1aad37165 100644 --- a/src/ts/push-menu.ts +++ b/src/ts/push-menu.ts @@ -6,7 +6,7 @@ */ import { - domReady + onDOMContentLoaded } from './util/index' /** @@ -134,7 +134,7 @@ class PushMenu { * ------------------------------------------------------------------------ */ -domReady(() => { +onDOMContentLoaded(() => { const sidebar = document?.querySelector(SELECTOR_APP_SIDEBAR) as HTMLElement | undefined if (sidebar) { diff --git a/src/ts/treeview.ts b/src/ts/treeview.ts index 372c3b4f3..fb2c747ed 100644 --- a/src/ts/treeview.ts +++ b/src/ts/treeview.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ /** * -------------------------------------------- * AdminLTE treeview.ts @@ -6,7 +7,7 @@ */ import { - domReady, + onDOMContentLoaded, slideDown, slideUp } from './util/index' @@ -27,6 +28,7 @@ const EVENT_COLLAPSED = `collapsed${EVENT_KEY}` const CLASS_NAME_MENU_OPEN = 'menu-open' const SELECTOR_NAV_ITEM = '.nav-item' +const SELECTOR_NAV_LINK = '.nav-link' const SELECTOR_TREEVIEW_MENU = '.nav-treeview' const SELECTOR_DATA_TOGGLE = '[data-lte-toggle="treeview"]' @@ -93,19 +95,19 @@ class Treeview { * ------------------------------------------------------------------------ */ -domReady(() => { +onDOMContentLoaded(() => { const button = document.querySelectorAll(SELECTOR_DATA_TOGGLE) button.forEach(btn => { btn.addEventListener('click', event => { - const target = event.target as HTMLAnchorElement + const target = event.target as HTMLElement + const targetItem = target.closest(SELECTOR_NAV_ITEM) as HTMLElement | undefined + const targetLink = target.closest(SELECTOR_NAV_LINK) as HTMLAnchorElement | undefined - if (target.getAttribute('href') === '#') { + if (target?.getAttribute('href') === '#' || targetLink?.getAttribute('href') === '#') { event.preventDefault() } - const targetItem = target.closest(SELECTOR_NAV_ITEM) as HTMLElement | undefined - if (targetItem) { const data = new Treeview(targetItem, Default) data.toggle() diff --git a/src/ts/util/index.ts b/src/ts/util/index.ts index 0a870dccd..5e5447b08 100644 --- a/src/ts/util/index.ts +++ b/src/ts/util/index.ts @@ -1,16 +1,19 @@ -const domReady = (callBack: () => void) => { - if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', callBack) - } else { - callBack() - } -} +const domContentLoadedCallbacks: Array<() => void> = [] -const windowReady = (callBack: () => void) => { - if (document.readyState === 'complete') { - callBack() +const onDOMContentLoaded = (callback: () => void): void => { + if (document.readyState === 'loading') { + // add listener on the first call when the document is in loading state + if (!domContentLoadedCallbacks.length) { + document.addEventListener('DOMContentLoaded', () => { + for (const callback of domContentLoadedCallbacks) { + callback() + } + }) + } + + domContentLoadedCallbacks.push(callback) } else { - window.addEventListener('load', callBack) + callback() } } @@ -91,8 +94,7 @@ const slideToggle = (target: HTMLElement, duration = 500) => { } export { - domReady, - windowReady, + onDOMContentLoaded, slideUp, slideDown, slideToggle