@@ -158,6 +158,23 @@ const createModal = async ({ title, text, buttons }) => {
158158
159159 document . querySelector ( ".modal" ) . classList . add ( "is-visible" ) ;
160160} ;
161+ const waitForSelector = ( selector ) => {
162+ return new Promise ( ( resolve ) => {
163+ if ( document . querySelector ( selector ) ) return resolve ( document . querySelector ( selector ) ) ;
164+
165+ const observer = new MutationObserver ( ( ) => {
166+ if ( document . querySelector ( selector ) ) {
167+ resolve ( document . querySelector ( selector ) ) ;
168+ observer . disconnect ( ) ;
169+ }
170+ } ) ;
171+
172+ observer . observe ( document , {
173+ childList : true ,
174+ subtree : true
175+ } ) ;
176+ } ) ;
177+ } ;
161178
162179if ( new URLSearchParams ( location . search ) . get ( "geoblock-warning" ) != null ) {
163180 createModal ( {
@@ -168,9 +185,13 @@ if (new URLSearchParams(location.search).get("geoblock-warning") != null) {
168185 } ) ;
169186} ;
170187if ( new URLSearchParams ( location . search ) . get ( "androidtv" ) != null ) {
188+ document . body . classList . add ( "androidtv" ) ;
171189 document . querySelector ( "#tv-style" ) . media = "" ;
190+ waitForSelector ( ".channel" ) . then ( el => el . focus ( ) ) ;
172191
173192 window . addEventListener ( "keydown" , e => {
193+ if ( document . activeElement . classList . contains ( "channel-program" ) || document . activeElement . classList . contains ( "channel" ) ) document . activeElement . closest ( ".channel" ) . scrollIntoView ( { block : "center" } ) ;
194+ if ( document . activeElement . classList . contains ( "hbbtv-enabler" ) && ( e . key === "Enter" || e . key === " " ) ) document . activeElement . click ( )
174195 if ( window . location . hash != "#canPressBack" ) window . location . hash = "canPressBack" ;
175196 if ( ! document . querySelector ( "#settings" ) . classList . contains ( "visible" ) ) {
176197 if ( e . key === "Enter" || e . key === " " || e . key === "MediaPlayPause" ) {
@@ -188,7 +209,10 @@ if (new URLSearchParams(location.search).get("androidtv") != null) {
188209 document . querySelector ( "#channels-column" ) . style . width = "0%" ;
189210 document . querySelector ( "#channels-column" ) . style . transform = "translateX(-33.3333vw)" ;
190211 } else if ( e . key === "ArrowUp" || e . key === "ArrowDown" ) {
191- if ( document . querySelector ( ".channel.watching" ) != null && document . querySelector ( "#channels-column" ) . style . width === "0%" ) document . querySelector ( ".channel.watching" ) . focus ( ) ;
212+ if ( document . querySelector ( ".channel.watching" ) != null && document . querySelector ( "#channels-column" ) . style . width === "0%" ) {
213+ if ( document . querySelector ( ".channel.watching .channel-program" ) ) document . querySelector ( ".channel.watching .channel-program" ) . focus ( )
214+ else document . querySelector ( ".channel.watching" ) . focus ( ) ;
215+ } ;
192216 document . querySelector ( "#channels-column" ) . style . width = "33.3333%" ;
193217 document . querySelector ( "#channels-column" ) . style . transform = "translateX(0)" ;
194218 } ;
@@ -205,7 +229,10 @@ if (new URLSearchParams(location.search).get("androidtv") != null) {
205229 document . querySelector ( "#channels" ) . classList . toggle ( "tv-settings-open" ) ;
206230 if ( document . querySelector ( ":focus" ) != null ) document . querySelector ( ":focus" ) . blur ( ) ;
207231 } else if ( document . querySelector ( "#channels-column" ) . style . width === "0%" ) {
208- if ( document . querySelector ( ".channel.watching" ) != null ) document . querySelector ( ".channel.watching" ) . focus ( ) ;
232+ if ( document . querySelector ( ".channel.watching" ) != null ) {
233+ if ( document . querySelector ( ".channel.watching .channel-program" ) ) document . querySelector ( ".channel.watching .channel-program" ) . focus ( )
234+ else document . querySelector ( ".channel.watching" ) . focus ( ) ;
235+ } ;
209236 document . querySelector ( "#channels-column" ) . style . width = "33.3333%" ;
210237 document . querySelector ( "#channels-column" ) . style . transform = "translateX(0)" ;
211238 } ;
@@ -1097,7 +1124,7 @@ document.querySelectorAll(".channel").forEach(el => {
10971124 el . addEventListener ( "click" , ( ) => alert ( returnErrorMessage ( el . dataset . disabled ) ) ) ;
10981125 } else {
10991126 el . addEventListener ( "click" , async e => {
1100- if ( ! [ "channel-program" , "channel-program-progress" , "channel-program-progress-background" , "channel-program-times" ] . includes ( e . target . className ) && e . target . nodeName != "B" ) {
1127+ if ( ( ! [ "channel-program" , "channel-program-progress" , "channel-program-progress-background" , "channel-program-times" ] . includes ( e . target . className ) && e . target . nodeName != "B" ) || new URLSearchParams ( location . search ) . get ( "androidtv" ) != null ) {
11011128 currentlyPlaying = el ;
11021129
11031130 if ( state . schedule != { } ) {
0 commit comments