From 161e1aff2ffb086b3ed9811dd95511e2a284c968 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Tue, 18 Aug 2020 20:08:49 +0200 Subject: [PATCH 1/2] Fix tabs always focusing the active tab in TV layout --- src/elements/emby-tabs/emby-tabs.js | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/elements/emby-tabs/emby-tabs.js b/src/elements/emby-tabs/emby-tabs.js index db7ad56f5d..e9966189bb 100644 --- a/src/elements/emby-tabs/emby-tabs.js +++ b/src/elements/emby-tabs/emby-tabs.js @@ -12,7 +12,7 @@ import 'scrollStyles'; const buttonClass = 'emby-tab-button'; const activeButtonClass = buttonClass + '-active'; - function setActiveTabButton(tabs, newButton, oldButton, animate) { + function setActiveTabButton(tabs, newButton) { newButton.classList.add(activeButtonClass); } @@ -77,7 +77,7 @@ import 'scrollStyles'; const previousIndex = current ? parseInt(current.getAttribute('data-index')) : null; - setActiveTabButton(tabs, tabButton, current, true); + setActiveTabButton(tabs, tabButton); const index = parseInt(tabButton.getAttribute('data-index')); @@ -101,6 +101,15 @@ import 'scrollStyles'; } } + function onFocusOut(e) { + const parentContainer = e.target.parentNode; + const previousFocus = parentContainer.querySelector('.lastFocused'); + if (previousFocus) { + previousFocus.classList.remove('lastFocused'); + } + e.target.classList.add('lastFocused'); + } + function initScroller(tabs) { if (tabs.scroller) { return; @@ -146,13 +155,18 @@ import 'scrollStyles'; dom.addEventListener(this, 'click', onClick, { passive: true }); + + dom.addEventListener(this, 'focusout', onFocusOut); }; - EmbyTabs.focus = function () { - const selected = this.querySelector('.' + activeButtonClass); + EmbyTabs.focus = function onFocusIn() { + const selectedTab = this.querySelector('.' + activeButtonClass); + const lastFocused = this.querySelector('.lastFocused'); - if (selected) { - focusManager.focus(selected); + if (lastFocused) { + focusManager.focus(lastFocused); + } else if (selectedTab) { + focusManager.focus(selectedTab); } else { focusManager.autoFocus(this); } From 61a7dba96497101f19d0d693ffb9b8909aef4413 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Tue, 18 Aug 2020 20:31:10 +0200 Subject: [PATCH 2/2] Fix sonarcloud warning --- src/elements/emby-tabs/emby-tabs.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/elements/emby-tabs/emby-tabs.js b/src/elements/emby-tabs/emby-tabs.js index e9966189bb..7e16e31dd4 100644 --- a/src/elements/emby-tabs/emby-tabs.js +++ b/src/elements/emby-tabs/emby-tabs.js @@ -12,7 +12,7 @@ import 'scrollStyles'; const buttonClass = 'emby-tab-button'; const activeButtonClass = buttonClass + '-active'; - function setActiveTabButton(tabs, newButton) { + function setActiveTabButton(newButton) { newButton.classList.add(activeButtonClass); } @@ -77,7 +77,7 @@ import 'scrollStyles'; const previousIndex = current ? parseInt(current.getAttribute('data-index')) : null; - setActiveTabButton(tabs, tabButton); + setActiveTabButton(tabButton); const index = parseInt(tabButton.getAttribute('data-index')); @@ -192,7 +192,7 @@ import 'scrollStyles'; const newTabButton = tabButtons[currentIndex]; if (newTabButton) { - setActiveTabButton(this, newTabButton, current, false); + setActiveTabButton(newTabButton); } } @@ -240,7 +240,7 @@ import 'scrollStyles'; })); const currentTabButton = tabButtons[current]; - setActiveTabButton(tabs, tabButtons[selected], currentTabButton, false); + setActiveTabButton(tabButtons[selected]); if (current !== selected && currentTabButton) { currentTabButton.classList.remove(activeButtonClass);