From efac46858c894c81de74013d373b2c2f27d086e5 Mon Sep 17 00:00:00 2001 From: Tilman Vatteroth Date: Wed, 7 Jun 2023 22:57:35 +0200 Subject: [PATCH] fix: move dark mode and transparent body hook into renderer These hooks are only necessary for the document and simple renderer. The slideshow handles theming itself. Signed-off-by: Tilman Vatteroth --- .../hooks/use-transparent-body-background.ts | 16 ++++++++++++++++ .../document/document-markdown-renderer.tsx | 5 +++++ .../simple/simple-markdown-renderer.tsx | 5 +++++ frontend/src/pages/render.tsx | 10 +--------- 4 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 frontend/src/components/render-page/hooks/use-transparent-body-background.ts diff --git a/frontend/src/components/render-page/hooks/use-transparent-body-background.ts b/frontend/src/components/render-page/hooks/use-transparent-body-background.ts new file mode 100644 index 000000000..6e8a8487d --- /dev/null +++ b/frontend/src/components/render-page/hooks/use-transparent-body-background.ts @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2023 The HedgeDoc developers (see AUTHORS file) + * + * SPDX-License-Identifier: AGPL-3.0-only + */ +import { useEffect } from 'react' + +/** + * Makes the HTML body transparent. + */ +export const useTransparentBodyBackground = () => { + useEffect(() => { + document.body.classList.add('bg-transparent') + return () => document.body.classList.remove('bg-transparent') + }, []) +} diff --git a/frontend/src/components/render-page/renderers/document/document-markdown-renderer.tsx b/frontend/src/components/render-page/renderers/document/document-markdown-renderer.tsx index 7733859cd..efacb57fa 100644 --- a/frontend/src/components/render-page/renderers/document/document-markdown-renderer.tsx +++ b/frontend/src/components/render-page/renderers/document/document-markdown-renderer.tsx @@ -3,6 +3,7 @@ * * SPDX-License-Identifier: AGPL-3.0-only */ +import { useApplyDarkModeStyle } from '../../../../hooks/dark-mode/use-apply-dark-mode-style' import { cypressId } from '../../../../utils/cypress-attribute' import type { ScrollProps } from '../../../editor-page/synced-scroll/scroll-props' import type { LineMarkers } from '../../../markdown-renderer/extensions/linemarker/add-line-marker-markdown-it-plugin' @@ -12,6 +13,7 @@ import { useMarkdownExtensions } from '../../../markdown-renderer/hooks/use-mark import { MarkdownToReact } from '../../../markdown-renderer/markdown-to-react/markdown-to-react' import { useDocumentSyncScrolling } from '../../hooks/sync-scroll/use-document-sync-scrolling' import { useOnHeightChange } from '../../hooks/use-on-height-change' +import { useTransparentBodyBackground } from '../../hooks/use-transparent-body-background' import { RendererType } from '../../window-post-message-communicator/rendering-message' import type { CommonMarkdownRendererProps, HeightChangeRendererProps } from '../common-markdown-renderer-props' import { DocumentTocSidebar } from './document-toc-sidebar' @@ -69,6 +71,9 @@ export const DocumentMarkdownRenderer: React.FC = ) useCalculateLineMarkerPosition(markdownBodyRef, currentLineMarkers.current, recalculateLineMarkers) + useTransparentBodyBackground() + useApplyDarkModeStyle() + return (
= ({ useOnHeightChange(rendererRef, onHeightChange) const extensions = useMarkdownExtensions(baseUrl, RendererType.SIMPLE, []) + useTransparentBodyBackground() + useApplyDarkModeStyle() + return (
diff --git a/frontend/src/pages/render.tsx b/frontend/src/pages/render.tsx index d6036feb5..5fc8d313a 100644 --- a/frontend/src/pages/render.tsx +++ b/frontend/src/pages/render.tsx @@ -5,21 +5,13 @@ */ import { RendererToEditorCommunicatorContextProvider } from '../components/editor-page/render-context/renderer-to-editor-communicator-context-provider' import { RenderPageContent } from '../components/render-page/render-page-content' -import { useApplyDarkModeStyle } from '../hooks/dark-mode/use-apply-dark-mode-style' import type { NextPage } from 'next' -import React, { useEffect } from 'react' +import React from 'react' /** * Renders the actual markdown renderer that receives the content and metadata via iframe communication. */ export const RenderPage: NextPage = () => { - useEffect(() => { - document.body.classList.add('bg-transparent') - return () => document.body.classList.remove('bg-transparent') - }, []) - - useApplyDarkModeStyle() - return (