MDL-66890 forumreport_summary: Improved filter close keyboard response
[moodle.git] / mod / forum / report / summary / amd / src / filters.js
index 63040c6..d53503a 100644 (file)
@@ -96,7 +96,7 @@ export const init = (root) => {
     };
 
     // Close the relevant filter.
     };
 
     // Close the relevant filter.
-    var closeOpenFilters = (openFilterButton, openFilter) => {
+    const closeOpenFilters = (openFilterButton, openFilter) => {
         openFilter.classList.add('hidden');
         openFilter.setAttribute('data-openfilter', 'false');
 
         openFilter.classList.add('hidden');
         openFilter.setAttribute('data-openfilter', 'false');
 
@@ -145,14 +145,17 @@ export const init = (root) => {
 
         // Add listeners to handle closing filter.
         const closeListener = e => {
 
         // Add listeners to handle closing filter.
         const closeListener = e => {
-            if (e.target.id !== referenceElement.id && popperContent !== e.target.closest('[data-openfilter="true"]')) {
+            if (e.target.id !== referenceElement.id && popperContent !== e.target.closest('[data-openfilter="true"]') &&
+                    (typeof e.keyCode === 'undefined' || e.keyCode === KeyCodes.enter || e.keyCode === KeyCodes.space)) {
                 closeOpenFilters(referenceElement, popperContent);
                 document.removeEventListener('click', closeListener);
                 closeOpenFilters(referenceElement, popperContent);
                 document.removeEventListener('click', closeListener);
+                document.removeEventListener('keyup', closeListener);
                 document.removeEventListener('keyup', escCloseListener);
             }
         };
 
         document.addEventListener('click', closeListener);
                 document.removeEventListener('keyup', escCloseListener);
             }
         };
 
         document.addEventListener('click', closeListener);
+        document.addEventListener('keyup', closeListener);
 
         const escCloseListener = e => {
             if (e.keyCode === KeyCodes.escape) {
 
         const escCloseListener = e => {
             if (e.keyCode === KeyCodes.escape) {
@@ -205,14 +208,17 @@ export const init = (root) => {
 
         // Add listener to handle closing filter.
         const closeListener = e => {
 
         // Add listener to handle closing filter.
         const closeListener = e => {
-            if (e.target.id !== referenceElement.id && popperContent !== e.target.closest('[data-openfilter="true"]')) {
+            if (e.target.id !== referenceElement.id && popperContent !== e.target.closest('[data-openfilter="true"]') &&
+                    (typeof e.keyCode === 'undefined' || e.keyCode === KeyCodes.enter || e.keyCode === KeyCodes.space)) {
                 closeOpenFilters(referenceElement, popperContent);
                 document.removeEventListener('click', closeListener);
                 closeOpenFilters(referenceElement, popperContent);
                 document.removeEventListener('click', closeListener);
+                document.removeEventListener('keyup', closeListener);
                 document.removeEventListener('keyup', escCloseListener);
             }
         };
 
         document.addEventListener('click', closeListener);
                 document.removeEventListener('keyup', escCloseListener);
             }
         };
 
         document.addEventListener('click', closeListener);
+        document.addEventListener('keyup', closeListener);
 
         const escCloseListener = e => {
             if (e.keyCode === KeyCodes.escape) {
 
         const escCloseListener = e => {
             if (e.keyCode === KeyCodes.escape) {