From dce0bb4424502920f115a5c7883d70e4a28ad76f Mon Sep 17 00:00:00 2001
From: Alexander Purr <purr@ub.uni-leipzig.de>
Date: Wed, 18 Oct 2023 16:04:50 +0200
Subject: [PATCH] refs #24792 [fid_adlr] remove inline script

* move chevron-down into svg
* move inline script into js head script section
** on delegate keydown to click
** move focus
** remove legacy lang switcher
* close menu toggler on escape
* remove debugger
---
 themes/fid_adlr/images/chevron-down.svg       |  1 +
 themes/fid_adlr/scss/components/_forms.scss   |  3 +-
 themes/fid_adlr/templates/header.phtml        | 29 ++++++++++++++-----
 .../templates/search/searchTabs.phtml         |  7 ++++-
 4 files changed, 30 insertions(+), 10 deletions(-)
 create mode 100644 themes/fid_adlr/images/chevron-down.svg

diff --git a/themes/fid_adlr/images/chevron-down.svg b/themes/fid_adlr/images/chevron-down.svg
new file mode 100644
index 00000000000..21fc7eaa023
--- /dev/null
+++ b/themes/fid_adlr/images/chevron-down.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="12px" y="0px" width="24px" height="3px" viewBox="0 0 6 3" enable-background="new 0 0 6 3" xml:space="preserve"><polygon points="5.992,0 2.992,3 -0.008,0 "/></svg>
\ No newline at end of file
diff --git a/themes/fid_adlr/scss/components/_forms.scss b/themes/fid_adlr/scss/components/_forms.scss
index 8d2ca3de318..74581ba96e5 100644
--- a/themes/fid_adlr/scss/components/_forms.scss
+++ b/themes/fid_adlr/scss/components/_forms.scss
@@ -38,8 +38,7 @@ form {
 
   select,
   #advSearchForm select {
-    // FIXME: change background-image to chevron-down as svg
-    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMTJweCIgeT0iMHB4IiB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzcHgiIHZpZXdCb3g9IjAgMCA2IDMiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYgMyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBvbHlnb24gcG9pbnRzPSI1Ljk5MiwwIDIuOTkyLDMgLTAuMDA4LDAgIi8+PC9zdmc+);
+    background-image: url('../images/chevron-down.svg');
   }
 
   // Change Autocomplete styles in Chrome
diff --git a/themes/fid_adlr/templates/header.phtml b/themes/fid_adlr/templates/header.phtml
index ed0a9e8863d..64fb2120537 100644
--- a/themes/fid_adlr/templates/header.phtml
+++ b/themes/fid_adlr/templates/header.phtml
@@ -142,8 +142,7 @@
                data-toggle="dropdown"
                tabindex="3"
                aria-controls="langmenu"
-               aria-expanded="false"
-               onkeydown="forceFocus('#langmenu li a')">
+               aria-expanded="false">
               <span class="sr-only">Toggle language</span>
               <span class="decorate"><?= $this->layout()->userLang ?></span>
               <i class="icon icon-chevron-down" aria-hidden="true"></i>
@@ -154,8 +153,7 @@
               <?php foreach ($this->layout()->allLangs as $langCode => $langName): ?>
                 <li<?= $this->layout()->userLang == $langCode ? ' class="active"' : '' ?>>
                   <?php $fullLangName = $this->displayLanguageOption($langName); ?>
-                  <a class="btn" href="#"
-                    <?= $this->layout()->userLang != $langCode ? 'onClick="document.langForm.mylang.value=\'' . $langCode . '\';document.langForm.submit()"' : '' ?>>
+                  <a class="btn" href="<?=$this->escapeHtmlAttr($this->url()->addQueryParameters(['lng' => $langCode])) ?>" rel="nofollow">
                     <?= $fullLangName ? ($this->layout()->userLang != $langCode ? $this->transEsc($fullLangName) : $fullLangName) : $langCode ?>
                   </a>
                 </li>
@@ -173,7 +171,6 @@
       <div>
         <a class="navbar-header-link collapsed"
            id="submenuToggler"
-           onkeydown='clickElementOnKeyDown(event, "#submenuToggler"); forceFocus(".submenu-collapse li a")'
            tabindex="4"
            data-toggle="collapse"
            data-target="header, #submenu, #language-dropdown, #register-menu">
@@ -229,8 +226,7 @@
               <li class="visible-xs visible-sm visible-md submenu-additionals-lang" >
                <?php foreach ($this->layout()->allLangs as $langCode => $langName): ?>
                 <?php $fullLangName = $this->displayLanguageOption($langName); ?>
-                <a href="#"
-                  <?= $this->layout()->userLang != $langCode ? 'onClick="document.langForm.mylang.value=\'' . $langCode . '\';document.langForm.submit()"' : '' ?>>
+                <a href="<?=$this->escapeHtmlAttr($this->url()->addQueryParameters(['lng' => $langCode])) ?>" rel="nofollow">
                   <span <?= $this->layout()->userLang == $langCode ? ' class="active"' : '' ?>><?= $fullLangName ? ($this->layout()->userLang != $langCode ? $this->transEsc($fullLangName) : $fullLangName) : $langCode ?></span>
                 </a>
                 <?php endforeach; ?>
@@ -298,6 +294,25 @@
 				$('#language-dropdown').collapse('hide');
 			}
 		});
+    
+    // #17913, catch keydown and move focus
+    $('#quickfilter-language').on('keydown', function(){
+        forceFocus('#langmenu li a')
+    });
+  
+    // #17913, catch keydown: delegate click and move focus
+    $("#submenuToggler").on('keydown', function(){
+      clickElementOnKeyDown(event, "#submenuToggler");
+      forceFocus(".submenu-collapse li a");
+    });
+
+    // #24792 handle esc for closing toggler
+    $("#submenu .submenu-collapse").on('keydown', function() {
+        if (event.key === 'Escape') {
+          document.getElementById("submenuToggler").click();
+          forceFocus("#submenuToggler");
+        }
+    });
 	});
 
 	function clickElementOnKeyDown(event, elementId) {
diff --git a/themes/fid_adlr/templates/search/searchTabs.phtml b/themes/fid_adlr/templates/search/searchTabs.phtml
index 5bf70f6e630..faf2d9e0ace 100644
--- a/themes/fid_adlr/templates/search/searchTabs.phtml
+++ b/themes/fid_adlr/templates/search/searchTabs.phtml
@@ -45,7 +45,7 @@
             <?php endif; ?>
           />
           <?php $id = "filter-" . str_replace(' ', '', $tab['label']); ?>
-          <label tabindex="0" onkeydown="clickElementOnKeyDown(event, '#<?=$id?>');" for="<?=$id?>"><?= $this->transEsc($tab['label']) ?></label>
+          <label tabindex="0" for="<?=$id?>"><?= $this->transEsc($tab['label']) ?></label>
         <?php elseif ($block = $this->permission()->getAlternateContent($tab['permission'])): ?>
           <input type="radio" id="filter-<?= str_replace(' ', '', $tab['label']) . '_permission_denied' ?>" disabled />
           <label tabindex="0" for="filter-<?= str_replace(' ', '', $tab['label']) . '_permission_denied' ?>"><?=$block?></label>
@@ -88,6 +88,11 @@
 
             return true;
         });
+        
+        // #17913; delegate keydown on filter-option-lable as click event to real input
+        $(".filter-option label").on('keydown', function() {
+            clickElementOnKeyDown(event, '#' + $(this).attr('for'));
+        });
     });
 JS;
 ?>
-- 
GitLab