diff options
author | Christopher Ng <chrng8@gmail.com> | 2024-09-05 16:19:22 -0700 |
---|---|---|
committer | Christopher Ng <chrng8@gmail.com> | 2024-09-05 16:19:22 -0700 |
commit | 65ced2dd40412047a304de8d311e644ad91f5557 (patch) | |
tree | c2476008106fb3115bc05f386c9946332d0517a4 | |
parent | 9aafc0f989ea78e3536299da96861ea8a6c13f43 (diff) | |
download | nextcloud-server-65ced2dd40412047a304de8d311e644ad91f5557.tar.gz nextcloud-server-65ced2dd40412047a304de8d311e644ad91f5557.zip |
fix: Fix inaccessible content on public pages due to overlapping footer
Signed-off-by: Christopher Ng <chrng8@gmail.com>
-rw-r--r-- | core/Listener/BeforeTemplateRenderedListener.php | 4 | ||||
-rw-r--r-- | core/css/public.scss | 14 | ||||
-rw-r--r-- | core/src/public.ts | 26 | ||||
-rw-r--r-- | webpack.modules.js | 1 |
4 files changed, 33 insertions, 12 deletions
diff --git a/core/Listener/BeforeTemplateRenderedListener.php b/core/Listener/BeforeTemplateRenderedListener.php index e3533f1c6ce..4ce892664e9 100644 --- a/core/Listener/BeforeTemplateRenderedListener.php +++ b/core/Listener/BeforeTemplateRenderedListener.php @@ -33,6 +33,10 @@ class BeforeTemplateRenderedListener implements IEventListener { Util::addScript('core', 'unsupported-browser-redirect'); } + if ($event->getResponse()->getRenderAs() === TemplateResponse::RENDER_AS_PUBLIC) { + Util::addScript('core', 'public'); + } + \OC_Util::addStyle('server', null, true); if ($event instanceof BeforeLoginTemplateRenderedEvent) { diff --git a/core/css/public.scss b/core/css/public.scss index 79f406b44d5..80743246876 100644 --- a/core/css/public.scss +++ b/core/css/public.scss @@ -3,19 +3,9 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ #body-public { - --footer-height: calc(var(--default-line-height) + 2 * var(--default-grid-baseline));; - - &:has(.footer__legal-links), - &:has(.footer__simple-sign-up) { - --footer-height: calc(2 * var(--default-line-height) + 3 * var(--default-grid-baseline));; - } - - &:has(.footer__legal-links):has(.footer__simple-sign-up) { - --footer-height: calc(3 * var(--default-line-height) + 3 * var(--default-grid-baseline)); - } + --footer-height: calc(2lh + 2 * var(--default-grid-baseline)); // Set the initial value, will be updated programmatically to match the actual height .header-end { - #header-primary-action a { color: var(--color-primary-element-text); } @@ -51,6 +41,7 @@ #content { min-height: var(--body-height, calc(100% - var(--footer-height))); + padding-block-end: var(--footer-height); } #app-content-vue { @@ -89,7 +80,6 @@ align-items: center; justify-content: center; - height: var(--footer-height); width: calc(100% - 2 * var(--body-container-margin)); margin-inline: var(--body-container-margin); padding-block: var(--default-grid-baseline); diff --git a/core/src/public.ts b/core/src/public.ts new file mode 100644 index 00000000000..ce4af8aa2ac --- /dev/null +++ b/core/src/public.ts @@ -0,0 +1,26 @@ +/** + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +const body = document.body +const footer = document.querySelector('footer') +let prevHeight = footer?.offsetHeight + +const onResize: ResizeObserverCallback = (entries) => { + for (const entry of entries) { + const height = entry.contentRect.height + if (height === prevHeight) { + return + } + prevHeight = height + body.style.setProperty('--footer-height', `${height}px`) + } +} + +if (footer) { + new ResizeObserver(onResize) + .observe(footer, { + box: 'border-box', // <footer> is border-box + }) +} diff --git a/webpack.modules.js b/webpack.modules.js index 577f6f4a852..305bb4bafcd 100644 --- a/webpack.modules.js +++ b/webpack.modules.js @@ -26,6 +26,7 @@ module.exports = { 'legacy-unified-search': path.join(__dirname, 'core/src', 'legacy-unified-search.js'), 'unsupported-browser': path.join(__dirname, 'core/src', 'unsupported-browser.js'), 'unsupported-browser-redirect': path.join(__dirname, 'core/src', 'unsupported-browser-redirect.js'), + public: path.join(__dirname, 'core/src', 'public.ts'), }, dashboard: { main: path.join(__dirname, 'apps/dashboard/src', 'main.js'), |