From 8d2c6f5ae8a99218d277ae2aa7ad1abaa72378d1 Mon Sep 17 00:00:00 2001
From: Thomas Hackl <hackl@data-quest.de>
Date: Wed, 10 Apr 2024 10:52:48 +0000
Subject: [PATCH] Resolve "Barrierefreiheit: "Back to top" ist nicht per
 Tabulator erreichbar"

Closes #3941

Merge request studip/studip!2800
---
 .../assets/javascripts/lib/scroll_to_top.js   | 22 ++++++++++++-------
 templates/layouts/base.php                    |  2 +-
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/resources/assets/javascripts/lib/scroll_to_top.js b/resources/assets/javascripts/lib/scroll_to_top.js
index 2a754027a24..9b0d3ee38d5 100644
--- a/resources/assets/javascripts/lib/scroll_to_top.js
+++ b/resources/assets/javascripts/lib/scroll_to_top.js
@@ -4,9 +4,9 @@ let fold;
 let was_below_the_fold = false;
 
 const back_to_top = function(scrolltop) {
-    var is_below_the_fold = scrolltop > fold;
+    let is_below_the_fold = scrolltop > fold;
     if (is_below_the_fold !== was_below_the_fold) {
-        $('#scroll-to-top').toggleClass('hide', !is_below_the_fold);
+        document.getElementById('scroll-to-top').classList.toggle('hide', !is_below_the_fold);
         was_below_the_fold = is_below_the_fold;
     }
 };
@@ -23,15 +23,21 @@ const ScrollToTop = {
     },
     disable() {
         Scroll.removeHandler('header');
-        $('#scroll-to-top').addClass('hide');
+        document.getElementById('scroll-to-top').classList.add('hide');
     },
     moveBack() {
-        $('#scroll-to-top').on('click', function(e) {
-            $('html, body').stop().animate({
-                scrollTop: (0)
-            }, 1000, 'easeInOutExpo');
-            e.preventDefault();
+        document.getElementById('scroll-to-top').addEventListener('click', (evt)  => {
+            evt.preventDefault();
+            this.toTop();
         });
+        document.getElementById('scroll-to-top').addEventListener('keypress', (evt) => {
+            if (evt.code === 'Space') {
+                this.toTop();
+            }
+        });
+    },
+    toTop() {
+        window.scroll({top: 0, left: 0, behavior: 'smooth'});
     }
 };
 
diff --git a/templates/layouts/base.php b/templates/layouts/base.php
index 180e0207d09..2db1f7eab8b 100644
--- a/templates/layouts/base.php
+++ b/templates/layouts/base.php
@@ -96,7 +96,7 @@ $lang_attr = str_replace('_', '-', $_SESSION['_language']);
     </main>
     <!-- End main content -->
 
-    <a id="scroll-to-top" class="hide">
+    <a id="scroll-to-top" class="hide" tabindex="0" title="<?= _('Zurück zum Seitenanfang') ?>">
         <?= Icon::create('arr_1up', 'info_alt')->asImg(24, ['class' => '']) ?>
     </a>
 
-- 
GitLab