diff --git a/app.vue b/app.vue index cbc7ae5..562ec73 100644 --- a/app.vue +++ b/app.vue @@ -18,68 +18,7 @@ const siteAccentStyle = computed(() => ({ '--site-accent': siteAccentColor.value })) -const isSitePageNavigating = ref(false) - -if (import.meta.client) { - const nuxtApp = useNuxtApp() - const router = useRouter() - - /** @type {ReturnType | null} */ - let hideOverlayTimer = null - let navigationOverlayToken = 0 - - /** - * 공개 페이지 이동 로딩 오버레이를 표시한다. - * @returns {void} - */ - const showSitePageNavigationOverlay = () => { - navigationOverlayToken += 1 - clearTimeout(hideOverlayTimer) - hideOverlayTimer = null - isSitePageNavigating.value = true - } - - /** - * 새 화면이 실제로 그려진 뒤 공개 페이지 이동 로딩 오버레이를 숨긴다. - * @returns {void} - */ - const scheduleHideSitePageNavigationOverlay = () => { - const token = navigationOverlayToken - - requestAnimationFrame(() => { - requestAnimationFrame(() => { - hideOverlayTimer = setTimeout(() => { - if (token !== navigationOverlayToken) { - return - } - - isSitePageNavigating.value = false - hideOverlayTimer = null - }, 120) - }) - }) - } - - /** - * 오류·취소 상황에서 공개 페이지 이동 로딩 오버레이를 즉시 숨긴다. - * @returns {void} - */ - const hideSitePageNavigationOverlayImmediately = () => { - clearTimeout(hideOverlayTimer) - hideOverlayTimer = null - isSitePageNavigating.value = false - } - - router.beforeEach((to, from) => { - if (to.fullPath !== from.fullPath) { - showSitePageNavigationOverlay() - } - }) - router.onError(hideSitePageNavigationOverlayImmediately) - nuxtApp.hook('page:loading:start', showSitePageNavigationOverlay) - nuxtApp.hook('page:finish', scheduleHideSitePageNavigationOverlay) - nuxtApp.hook('app:error', hideSitePageNavigationOverlayImmediately) -} +const isSitePageNavigating = useState('site-page-veil', () => false) useHead(() => ({ titleTemplate: (titleChunk) => titleChunk || appSiteSettings.value.title, @@ -97,27 +36,18 @@ useHead(() => ({