aboutsummaryrefslogtreecommitdiff
path: root/resources
diff options
context:
space:
mode:
authorThomas Hackl <hackl@data-quest.de>2023-03-23 14:49:21 +0000
committerDavid Siegfried <david.siegfried@uni-vechta.de>2023-03-23 14:49:21 +0000
commit3aecaab4d0387b063c9e02a3523eec4d9a70df4e (patch)
tree3f861af53d15695253aedcbbf417aa73d4c47b12 /resources
parent2a697c4ba43f5521c2c5348f25cb3254894ce91a (diff)
Resolve "Responsive Navigation: Aufklappen der Sidebar erfordert Scrollen an den Seitenanfang"
Closes #2360, #2337, #2318, and #2152 Merge request studip/studip!1587
Diffstat (limited to 'resources')
-rw-r--r--resources/assets/javascripts/bootstrap/responsive.js2
-rw-r--r--resources/assets/javascripts/bootstrap/sidebar.js6
-rw-r--r--resources/assets/javascripts/entry-base.js1
-rw-r--r--resources/assets/javascripts/lib/sidebar.js15
-rw-r--r--resources/assets/stylesheets/scss/courseware.scss2
-rw-r--r--resources/assets/stylesheets/scss/responsive.scss35
-rw-r--r--resources/assets/stylesheets/scss/sidebar.scss3
-rw-r--r--resources/vue/components/responsive/ResponsiveContentBar.vue16
-rw-r--r--resources/vue/components/responsive/ResponsiveNavigation.vue7
9 files changed, 30 insertions, 57 deletions
diff --git a/resources/assets/javascripts/bootstrap/responsive.js b/resources/assets/javascripts/bootstrap/responsive.js
index af06f28..7ee9b15 100644
--- a/resources/assets/javascripts/bootstrap/responsive.js
+++ b/resources/assets/javascripts/bootstrap/responsive.js
@@ -6,7 +6,7 @@ STUDIP.domReady(() => {
document.documentElement.classList.add('fullscreen-mode');
const sidebar = document.getElementById('sidebar');
if (sidebar) {
- sidebar.style.display = 'none';
+ sidebar.ariaHidden = 'true';
}
}
diff --git a/resources/assets/javascripts/bootstrap/sidebar.js b/resources/assets/javascripts/bootstrap/sidebar.js
deleted file mode 100644
index 04630c0..0000000
--- a/resources/assets/javascripts/bootstrap/sidebar.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// Set correct sidebar height for stickyness
-STUDIP.domReady(() => {
- if (!STUDIP.Responsive.isResponsive()) {
- STUDIP.Sidebar.adjustHeight();
- }
-});
diff --git a/resources/assets/javascripts/entry-base.js b/resources/assets/javascripts/entry-base.js
index f6f5595..70b78e7 100644
--- a/resources/assets/javascripts/entry-base.js
+++ b/resources/assets/javascripts/entry-base.js
@@ -28,7 +28,6 @@ import "./bootstrap/studip_helper_attributes.js"
import "./bootstrap/header_magic.js"
import "./bootstrap/header_navigation.js"
import "./bootstrap/personal_notifications.js"
-import "./bootstrap/sidebar.js"
import "./bootstrap/dialog.js"
import "./bootstrap/jsupdater.js"
import "./bootstrap/files.js"
diff --git a/resources/assets/javascripts/lib/sidebar.js b/resources/assets/javascripts/lib/sidebar.js
index d3d67d5..3cb1c05 100644
--- a/resources/assets/javascripts/lib/sidebar.js
+++ b/resources/assets/javascripts/lib/sidebar.js
@@ -18,19 +18,4 @@ const Sidebar = {
}
};
-Sidebar.adjustHeight = () => {
- const display = $('#sidebar').css('display');
-
- if (display === 'none') {
- $('#sidebar').css('display', 'block');
- }
- const lastWidget = $('.sidebar-widget:last-child');
- if (lastWidget.length > 0) {
- const height = lastWidget.offset().top + lastWidget.height();
- $('#sidebar').css('height', height + 'px');
- }
- if (display === 'none') {
- $('#sidebar').css('display', 'none');
- }
-}
export default Sidebar;
diff --git a/resources/assets/stylesheets/scss/courseware.scss b/resources/assets/stylesheets/scss/courseware.scss
index 34f9df3..175b2a6 100644
--- a/resources/assets/stylesheets/scss/courseware.scss
+++ b/resources/assets/stylesheets/scss/courseware.scss
@@ -5376,5 +5376,5 @@ s h e l f i t e m s
}
}
/* * * * * * * * * * * * * * * * * *
-s h e l f i t e m s e n d
+s h e l f i t e m s e n d
* * * * * * * * * * * * * * * * * */
diff --git a/resources/assets/stylesheets/scss/responsive.scss b/resources/assets/stylesheets/scss/responsive.scss
index 6dc068d..57047bc 100644
--- a/resources/assets/stylesheets/scss/responsive.scss
+++ b/resources/assets/stylesheets/scss/responsive.scss
@@ -261,8 +261,10 @@ $sidebarOut: -330px;
}
}
-.cw-ribbon-button-zoom {
- display: none;
+#responsive-contentbar-container {
+ position: fixed;
+ width: 100vw;
+ z-index: 1000;
}
.responsive-display,
@@ -314,8 +316,11 @@ $sidebarOut: -330px;
#sidebar {
background-color: $white;
max-height: calc(100vh - 100px);
+ left: 15px;
position: absolute;
+ top: 116px;
transform: translateX($sidebarOut);
+ visibility: hidden;
z-index: 100;
&.responsive-hide {
@@ -328,10 +333,9 @@ $sidebarOut: -330px;
@media not prefers-reduced-motion {
animation: slide-in $transition-duration forwards;
}
-
- left: 15px;
- position: relative;
- top: 60px;
+ position: sticky;
+ top: 100px;
+ visibility: visible;
}
.sidebar-image {
@@ -347,6 +351,9 @@ $sidebarOut: -330px;
}
@keyframes slide-in {
+ 0% {
+ transform: translateX($sidebarOut);
+ }
100% {
transform: translateX($sidebarIn);
}
@@ -374,6 +381,7 @@ $sidebarOut: -330px;
}
#content-wrapper {
+ margin-top: 65px;
width: calc(100vw - 2 * $page-margin);
}
@@ -387,7 +395,6 @@ $sidebarOut: -330px;
justify-content: stretch;
margin-bottom: 15px;
padding-bottom: 0.5em;
- padding-left: 5px;
.contentbar-nav,
.cw-ribbon-nav {
@@ -441,7 +448,7 @@ $sidebarOut: -330px;
}
> .contentbar-wrapper-right {
- flex: 1;
+ flex: 0;
left: 5px;
position: relative;
@@ -489,6 +496,7 @@ $sidebarOut: -330px;
}
#toc {
+ max-width: 100vw;
position: absolute;
right: -8px;
top: -21px;
@@ -550,6 +558,7 @@ $sidebarOut: -330px;
#sidebar {
height: 100%;
position: fixed;
+ top: 75px;
transform: translateX($sidebarOut);
-webkit-transform: translateX($sidebarOut);
top: 80px;
@@ -613,12 +622,6 @@ $sidebarOut: -330px;
display: none;
}
- #responsive-contentbar-container {
- position: fixed;
- width: 100vw;
- z-index: 1000;
- }
-
#responsive-contentbar {
padding-left: 15px;
@@ -628,10 +631,6 @@ $sidebarOut: -330px;
}
}
- #sidebar.responsive-hide {
- top: 110px;
- }
-
#content-wrapper {
flex: 1;
margin-top: 75px;
diff --git a/resources/assets/stylesheets/scss/sidebar.scss b/resources/assets/stylesheets/scss/sidebar.scss
index 4d4efc0..c009e0e 100644
--- a/resources/assets/stylesheets/scss/sidebar.scss
+++ b/resources/assets/stylesheets/scss/sidebar.scss
@@ -2,11 +2,14 @@
background: $white;
border-left: 0;
display: inline-block;
+ height: max-content;
+ margin-bottom: $page-margin + 35px;
margin-top: 15px;
padding: 0 5px 7px 15px;
position: sticky;
text-align: left;
top: 50px;
+ width: $sidebar-width;
z-index: 2;
.sidebar-image {
diff --git a/resources/vue/components/responsive/ResponsiveContentBar.vue b/resources/vue/components/responsive/ResponsiveContentBar.vue
index 6899c3b..051b83f 100644
--- a/resources/vue/components/responsive/ResponsiveContentBar.vue
+++ b/resources/vue/components/responsive/ResponsiveContentBar.vue
@@ -69,32 +69,28 @@ export default {
const content = document.getElementById('content-wrapper');
const pageTitle = document.getElementById('page-title-container');
if (this.sidebarOpen) {
+ sidebar.ariaHidden = 'true';
sidebar.classList.add('responsive-hide');
sidebar.classList.remove('responsive-show');
if (document.documentElement.classList.contains('responsive-display')
&& !document.documentElement.classList.contains('fullscreen-mode')) {
- content.style.display = null;
- pageTitle.style.display = null;
+ content.style.display = '';
+ pageTitle.style.display = '';
}
if (!document.documentElement.classList.contains('responsive-display')) {
document.body.style.display = 'flex';
}
- // Hide sidebar after slide-out animation has ended so that it isn't focusable anymore.
- setTimeout(() => {
- sidebar.style.display = 'none';
- }, 301);
-
this.sidebarOpen = false;
} else {
- sidebar.style.display = '';
-
+ sidebar.ariaHidden = '';
sidebar.classList.add('responsive-show');
sidebar.classList.remove('responsive-hide');
+
if (document.documentElement.classList.contains('responsive-display')
- && !document.documentElement.classList.contains('fullscreen-mode')) {
+ && !document.documentElement.classList.contains('fullscreen-mode')) {
// Set a timeout here so that the content "disappears" after slide-in aninmation is finished.
setTimeout(() => {
content.style.display = 'none';
diff --git a/resources/vue/components/responsive/ResponsiveNavigation.vue b/resources/vue/components/responsive/ResponsiveNavigation.vue
index 500c030..81b6a4d 100644
--- a/resources/vue/components/responsive/ResponsiveNavigation.vue
+++ b/resources/vue/components/responsive/ResponsiveNavigation.vue
@@ -312,7 +312,7 @@ export default {
siteTitle.textContent = this.initialTitle;
}
- sidebar.style.display = 'none';
+ sidebar.ariaHidden = 'true';
} else {
document.documentElement.classList.remove('fullscreen-mode');
@@ -327,8 +327,7 @@ export default {
siteTitle.textContent = siteTitle.dataset.originalTitle.trim();
}
- sidebar.style.display = '';
-
+ sidebar.ariaHidden = '';
}
this.isFullscreen = state;
@@ -447,11 +446,9 @@ export default {
this.isFullscreen = true;
STUDIP.eventBus.emit('fullscreen-enabled');
- document.getElementById('sidebar').style.display = 'none';
} else {
this.isFullscreen = false;
STUDIP.eventBus.emit('fullscreen-disabled');
- document.getElementById('sidebar').style.display = '';
}
break;
case 'HEADER':