-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcomponents_home_Home.bs.html
More file actions
463 lines (388 loc) · 81.8 KB
/
Copy pathcomponents_home_Home.bs.html
File metadata and controls
463 lines (388 loc) · 81.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
<!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Source: components/home/Home.bs</title><!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(baseURL=(baseURL="https://api.jellyrock.app/").replace(/https?:\/\//i,"")).substr(baseURL.indexOf("/"))</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="fallback-dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><a href="/" class="sidebar-title sidebar-title-anchor">JellyRock Code Documentation</a><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-AlbumTrackList.html">AlbumTrackList</a></div><div class="sidebar-section-children"><a href="module-Alpha.html">Alpha</a></div><div class="sidebar-section-children"><a href="module-AlphaKeyboard.html">AlphaKeyboard</a></div><div class="sidebar-section-children"><a href="module-ApiClient.html">ApiClient</a></div><div class="sidebar-section-children"><a href="module-ApiQueueTask.html">ApiQueueTask</a></div><div class="sidebar-section-children"><a href="module-ApiTask.html">ApiTask</a></div><div class="sidebar-section-children"><a href="module-AudioPlayer.html">AudioPlayer</a></div><div class="sidebar-section-children"><a href="module-AudioPlayerView.html">AudioPlayerView</a></div><div class="sidebar-section-children"><a href="module-BackdropFader.html">BackdropFader</a></div><div class="sidebar-section-children"><a href="module-BaseGridView.html">BaseGridView</a></div><div class="sidebar-section-children"><a href="module-BrandingConfigTask.html">BrandingConfigTask</a></div><div class="sidebar-section-children"><a href="module-BrowseRowItem.html">BrowseRowItem</a></div><div class="sidebar-section-children"><a href="module-Clock.html">Clock</a></div><div class="sidebar-section-children"><a href="module-CommunityRating.html">CommunityRating</a></div><div class="sidebar-section-children"><a href="module-ConfigData.html">ConfigData</a></div><div class="sidebar-section-children"><a href="module-ConfigItem.html">ConfigItem</a></div><div class="sidebar-section-children"><a href="module-ConfigList.html">ConfigList</a></div><div class="sidebar-section-children"><a href="module-CriticRating.html">CriticRating</a></div><div class="sidebar-section-children"><a href="module-ExtrasRowList.html">ExtrasRowList</a></div><div class="sidebar-section-children"><a href="module-ExtrasSlider.html">ExtrasSlider</a></div><div class="sidebar-section-children"><a href="module-FavoritesRows.html">FavoritesRows</a></div><div class="sidebar-section-children"><a href="module-FocusableOverview.html">FocusableOverview</a></div><div class="sidebar-section-children"><a href="module-FontDownloadTask.html">FontDownloadTask</a></div><div class="sidebar-section-children"><a href="module-FontScalingTask.html">FontScalingTask</a></div><div class="sidebar-section-children"><a href="module-GenericPresenter.html">GenericPresenter</a></div><div class="sidebar-section-children"><a href="module-GetFiltersTask.html">GetFiltersTask</a></div><div class="sidebar-section-children"><a href="module-GetNextEpisodeTask.html">GetNextEpisodeTask</a></div><div class="sidebar-section-children"><a href="module-GetPlaybackInfoTask.html">GetPlaybackInfoTask</a></div><div class="sidebar-section-children"><a href="module-GetShuffleItemsTask.html">GetShuffleItemsTask</a></div><div class="sidebar-section-children"><a href="module-Gradient.html">Gradient</a></div><div class="sidebar-section-children"><a href="module-GridItem.html">GridItem</a></div><div class="sidebar-section-children"><a href="module-GridItemSmall.html">GridItemSmall</a></div><div class="sidebar-section-children"><a href="module-GridPresenterBase.html">GridPresenterBase</a></div><div class="sidebar-section-children"><a href="module-HexKeyboard.html">HexKeyboard</a></div><div class="sidebar-section-children"><a href="module-Home.html">Home</a></div><div class="sidebar-section-children"><a href="module-HomeAction.html">HomeAction</a></div><div class="sidebar-section-children"><a href="module-HomeRows.html">HomeRows</a></div><div class="sidebar-section-children"><a href="module-IconButton.html">IconButton</a></div><div class="sidebar-section-children"><a href="module-IntegerKeyboard.html">IntegerKeyboard</a></div><div class="sidebar-section-children"><a href="module-ItemDetails.html">ItemDetails</a></div><div class="sidebar-section-children"><a href="module-ItemGridOptions.html">ItemGridOptions</a></div><div class="sidebar-section-children"><a href="module-JRButtonGroup.html">JRButtonGroup</a></div><div class="sidebar-section-children"><a href="module-JRButtons.html">JRButtons</a></div><div class="sidebar-section-children"><a href="module-JRDropdown.html">JRDropdown</a></div><div class="sidebar-section-children"><a href="module-JRDropdownItem.html">JRDropdownItem</a></div><div class="sidebar-section-children"><a href="module-JRLabel.html">JRLabel</a></div><div class="sidebar-section-children"><a href="module-JRLabelList.html">JRLabelList</a></div><div class="sidebar-section-children"><a href="module-JRMarkupGrid.html">JRMarkupGrid</a></div><div class="sidebar-section-children"><a href="module-JRMessageDialog.html">JRMessageDialog</a></div><div class="sidebar-section-children"><a href="module-JROverhang.html">JROverhang</a></div><div class="sidebar-section-children"><a href="module-JROverhangIcon.html">JROverhangIcon</a></div><div class="sidebar-section-children"><a href="module-JRPlaceholder.html">JRPlaceholder</a></div><div class="sidebar-section-children"><a href="module-JRPoster.html">JRPoster</a></div><div class="sidebar-section-children"><a href="module-JRPosterGrid.html">JRPosterGrid</a></div><div class="sidebar-section-children"><a href="module-JRRowItem.html">JRRowItem</a></div><div class="sidebar-section-children"><a href="module-JRRowList.html">JRRowList</a></div><div class="sidebar-section-children"><a href="module-JRScene.html">JRScene</a></div><div class="sidebar-section-children"><a href="module-JRScreen.html">JRScreen</a></div><div class="sidebar-section-children"><a href="module-JRScrollingLabel.html">JRScrollingLabel</a></div><div class="sidebar-section-children"><a href="module-JRServer.html">JRServer</a></div><div class="sidebar-section-children"><a href="module-JRTab.html">JRTab</a></div><div class="sidebar-section-children"><a href="module-JRTabBar.html">JRTabBar</a></div><div class="sidebar-section-children"><a href="module-JRTimeGrid.html">JRTimeGrid</a></div><div class="sidebar-section-children"><a href="module-JellyfinDataTransformer.html">JellyfinDataTransformer</a></div><div class="sidebar-section-children"><a href="module-JellyfinUserSettings.html">JellyfinUserSettings</a></div><div class="sidebar-section-children"><a href="module-LabelDisabledLarge.html">LabelDisabledLarge</a></div><div class="sidebar-section-children"><a href="module-LabelDisabledLarger.html">LabelDisabledLarger</a></div><div class="sidebar-section-children"><a href="module-LabelDisabledLargest.html">LabelDisabledLargest</a></div><div class="sidebar-section-children"><a href="module-LabelDisabledMedium.html">LabelDisabledMedium</a></div><div class="sidebar-section-children"><a href="module-LabelDisabledSmall.html">LabelDisabledSmall</a></div><div class="sidebar-section-children"><a href="module-LabelDisabledSmaller.html">LabelDisabledSmaller</a></div><div class="sidebar-section-children"><a href="module-LabelDisabledSmallest.html">LabelDisabledSmallest</a></div><div class="sidebar-section-children"><a href="module-LabelErrorLarge.html">LabelErrorLarge</a></div><div class="sidebar-section-children"><a href="module-LabelErrorLarger.html">LabelErrorLarger</a></div><div class="sidebar-section-children"><a href="module-LabelErrorLargest.html">LabelErrorLargest</a></div><div class="sidebar-section-children"><a href="module-LabelErrorMedium.html">LabelErrorMedium</a></div><div class="sidebar-section-children"><a href="module-LabelErrorSmall.html">LabelErrorSmall</a></div><div class="sidebar-section-children"><a href="module-LabelErrorSmaller.html">LabelErrorSmaller</a></div><div class="sidebar-section-children"><a href="module-LabelErrorSmallest.html">LabelErrorSmallest</a></div><div class="sidebar-section-children"><a href="module-LabelLarge.html">LabelLarge</a></div><div class="sidebar-section-children"><a href="module-LabelLarger.html">LabelLarger</a></div><div class="sidebar-section-children"><a href="module-LabelLargest.html">LabelLargest</a></div><div class="sidebar-section-children"><a href="module-LabelMedium.html">LabelMedium</a></div><div class="sidebar-section-children"><a href="module-LabelPrimaryLarge.html">LabelPrimaryLarge</a></div><div class="sidebar-section-children"><a href="module-LabelPrimaryLarger.html">LabelPrimaryLarger</a></div><div class="sidebar-section-children"><a href="module-LabelPrimaryLargest.html">LabelPrimaryLargest</a></div><div class="sidebar-section-children"><a href="module-LabelPrimaryMedium.html">LabelPrimaryMedium</a></div><div class="sidebar-section-children"><a href="module-LabelPrimarySmall.html">LabelPrimarySmall</a></div><div class="sidebar-section-children"><a href="module-LabelPrimarySmaller.html">LabelPrimarySmaller</a></div><div class="sidebar-section-children"><a href="module-LabelPrimarySmallest.html">LabelPrimarySmallest</a></div><div class="sidebar-section-children"><a href="module-LabelSecondaryLarge.html">LabelSecondaryLarge</a></div><div class="sidebar-section-children"><a href="module-LabelSecondaryLarger.html">LabelSecondaryLarger</a></div><div class="sidebar-section-children"><a href="module-LabelSecondaryLargest.html">LabelSecondaryLargest</a></div><div class="sidebar-section-children"><a href="module-LabelSecondaryMedium.html">LabelSecondaryMedium</a></div><div class="sidebar-section-children"><a href="module-LabelSecondarySmall.html">LabelSecondarySmall</a></div><div class="sidebar-section-children"><a href="module-LabelSecondarySmaller.html">LabelSecondarySmaller</a></div><div class="sidebar-section-children"><a href="module-LabelSecondarySmallest.html">LabelSecondarySmallest</a></div><div class="sidebar-section-children"><a href="module-LabelSmall.html">LabelSmall</a></div><div class="sidebar-section-children"><a href="module-LabelSmaller.html">LabelSmaller</a></div><div class="sidebar-section-children"><a href="module-LabelSmallest.html">LabelSmallest</a></div><div class="sidebar-section-children"><a href="module-LanguagePicker.html">LanguagePicker</a></div><div class="sidebar-section-children"><a href="module-LiveTVPresenter.html">LiveTVPresenter</a></div><div class="sidebar-section-children"><a href="module-LoadChannelListForQueueTask.html">LoadChannelListForQueueTask</a></div><div class="sidebar-section-children"><a href="module-LoadChannelsTask.html">LoadChannelsTask</a></div><div class="sidebar-section-children"><a href="module-LoadItemsTask.html">LoadItemsTask</a></div><div class="sidebar-section-children"><a href="module-LoadItemsTask2.html">LoadItemsTask2</a></div><div class="sidebar-section-children"><a href="module-LoadPhotoTask.html">LoadPhotoTask</a></div><div class="sidebar-section-children"><a href="module-LoadProgramDetailsTask.html">LoadProgramDetailsTask</a></div><div class="sidebar-section-children"><a href="module-LoadScreenSaverTimeoutTask.html">LoadScreenSaverTimeoutTask</a></div><div class="sidebar-section-children"><a href="module-LoadSheduleTask.html">LoadSheduleTask</a></div><div class="sidebar-section-children"><a href="module-LoadVideoContentTask.html">LoadVideoContentTask</a></div><div class="sidebar-section-children"><a href="module-LoginScene.html">LoginScene</a></div><div class="sidebar-section-children"><a href="module-MediaSegmentAction.html">MediaSegmentAction</a></div><div class="sidebar-section-children"><a href="module-MediaSegmentType.html">MediaSegmentType</a></div><div class="sidebar-section-children"><a href="module-MockSceneManager.html">MockSceneManager</a></div><div class="sidebar-section-children"><a href="module-MoviePresenter.html">MoviePresenter</a></div><div class="sidebar-section-children"><a href="module-MusicArtistGridItem.html">MusicArtistGridItem</a></div><div class="sidebar-section-children"><a href="module-MusicPresenter.html">MusicPresenter</a></div><div class="sidebar-section-children"><a href="module-OSD.html">OSD</a></div><div class="sidebar-section-children"><a href="module-OSDButtonGroup.html">OSDButtonGroup</a></div><div class="sidebar-section-children"><a href="module-OptionNode.html">OptionNode</a></div><div class="sidebar-section-children"><a href="module-OptionsButton.html">OptionsButton</a></div><div class="sidebar-section-children"><a href="module-OptionsData.html">OptionsData</a></div><div class="sidebar-section-children"><a href="module-OptionsSlider.html">OptionsSlider</a></div><div class="sidebar-section-children"><a href="module-OverviewDialog.html">OverviewDialog</a></div><div class="sidebar-section-children"><a href="module-PhotoDetails.html">PhotoDetails</a></div><div class="sidebar-section-children"><a href="module-PhotoPresenter.html">PhotoPresenter</a></div><div class="sidebar-section-children"><a href="module-PlaybackDialog.html">PlaybackDialog</a></div><div class="sidebar-section-children"><a href="module-PresentationBackdrop.html">PresentationBackdrop</a></div><div class="sidebar-section-children"><a href="module-ProgramDetails.html">ProgramDetails</a></div><div class="sidebar-section-children"><a href="module-PublicUserData.html">PublicUserData</a></div><div class="sidebar-section-children"><a href="module-QueueManager.html">QueueManager</a></div><div class="sidebar-section-children"><a href="module-QuickConnect.html">QuickConnect</a></div><div class="sidebar-section-children"><a href="module-QuickConnectDialog.html">QuickConnectDialog</a></div><div class="sidebar-section-children"><a href="module-QuickConnectEnabledTask.html">QuickConnectEnabledTask</a></div><div class="sidebar-section-children"><a href="module-QuickPlayTask.html">QuickPlayTask</a></div><div class="sidebar-section-children"><a href="module-RadioDialog.html">RadioDialog</a></div><div class="sidebar-section-children"><a href="module-RecordProgramTask.html">RecordProgramTask</a></div><div class="sidebar-section-children"><a href="module-RectangleBackgroundPrimary.html">RectangleBackgroundPrimary</a></div><div class="sidebar-section-children"><a href="module-RectangleBackgroundSecondary.html">RectangleBackgroundSecondary</a></div><div class="sidebar-section-children"><a href="module-RectangleSecondary.html">RectangleSecondary</a></div><div class="sidebar-section-children"><a href="module-RefreshLiveTvMetadataTask.html">RefreshLiveTvMetadataTask</a></div><div class="sidebar-section-children"><a href="module-ResumeButton.html">ResumeButton</a></div><div class="sidebar-section-children"><a href="module-SceneManager.html">SceneManager</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelDisabledLarge.html">ScrollingLabelDisabledLarge</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelDisabledLarger.html">ScrollingLabelDisabledLarger</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelDisabledLargest.html">ScrollingLabelDisabledLargest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelDisabledMedium.html">ScrollingLabelDisabledMedium</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelDisabledSmall.html">ScrollingLabelDisabledSmall</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelDisabledSmaller.html">ScrollingLabelDisabledSmaller</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelDisabledSmallest.html">ScrollingLabelDisabledSmallest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelErrorLarge.html">ScrollingLabelErrorLarge</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelErrorLarger.html">ScrollingLabelErrorLarger</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelErrorLargest.html">ScrollingLabelErrorLargest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelErrorMedium.html">ScrollingLabelErrorMedium</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelErrorSmall.html">ScrollingLabelErrorSmall</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelErrorSmaller.html">ScrollingLabelErrorSmaller</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelErrorSmallest.html">ScrollingLabelErrorSmallest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelLarge.html">ScrollingLabelLarge</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelLarger.html">ScrollingLabelLarger</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelLargest.html">ScrollingLabelLargest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelMedium.html">ScrollingLabelMedium</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelPrimaryLarge.html">ScrollingLabelPrimaryLarge</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelPrimaryLarger.html">ScrollingLabelPrimaryLarger</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelPrimaryLargest.html">ScrollingLabelPrimaryLargest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelPrimaryMedium.html">ScrollingLabelPrimaryMedium</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelPrimarySmall.html">ScrollingLabelPrimarySmall</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelPrimarySmaller.html">ScrollingLabelPrimarySmaller</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelPrimarySmallest.html">ScrollingLabelPrimarySmallest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSecondaryLarge.html">ScrollingLabelSecondaryLarge</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSecondaryLarger.html">ScrollingLabelSecondaryLarger</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSecondaryLargest.html">ScrollingLabelSecondaryLargest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSecondaryMedium.html">ScrollingLabelSecondaryMedium</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSecondarySmall.html">ScrollingLabelSecondarySmall</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSecondarySmaller.html">ScrollingLabelSecondarySmaller</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSecondarySmallest.html">ScrollingLabelSecondarySmallest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSmall.html">ScrollingLabelSmall</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSmaller.html">ScrollingLabelSmaller</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSmallest.html">ScrollingLabelSmallest</a></div><div class="sidebar-section-children"><a href="module-SearchBox.html">SearchBox</a></div><div class="sidebar-section-children"><a href="module-SearchResults.html">SearchResults</a></div><div class="sidebar-section-children"><a href="module-SearchRow.html">SearchRow</a></div><div class="sidebar-section-children"><a href="module-SearchTask.html">SearchTask</a></div><div class="sidebar-section-children"><a href="module-ServerAction.html">ServerAction</a></div><div class="sidebar-section-children"><a href="module-ServerDiscoveryTask.html">ServerDiscoveryTask</a></div><div class="sidebar-section-children"><a href="module-SessionDataTransformer.html">SessionDataTransformer</a></div><div class="sidebar-section-children"><a href="module-SetServerScreen.html">SetServerScreen</a></div><div class="sidebar-section-children"><a href="module-SideEffectTask.html">SideEffectTask</a></div><div class="sidebar-section-children"><a href="module-SongItem.html">SongItem</a></div><div class="sidebar-section-children"><a href="module-Spinner.html">Spinner</a></div><div class="sidebar-section-children"><a href="module-StandardDialog.html">StandardDialog</a></div><div class="sidebar-section-children"><a href="module-SubtitleSelection.html">SubtitleSelection</a></div><div class="sidebar-section-children"><a href="module-TVShowPresenter.html">TVShowPresenter</a></div><div class="sidebar-section-children"><a href="module-TextButton.html">TextButton</a></div><div class="sidebar-section-children"><a href="module-TextSizeTask.html">TextSizeTask</a></div><div class="sidebar-section-children"><a href="module-Toast.html">Toast</a></div><div class="sidebar-section-children"><a href="module-TrackDropdown.html">TrackDropdown</a></div><div class="sidebar-section-children"><a href="module-TrackDropdownRow.html">TrackDropdownRow</a></div><div class="sidebar-section-children"><a href="module-TrickplayCarousel.html">TrickplayCarousel</a></div><div class="sidebar-section-children"><a href="module-TrickplayTileLoader.html">TrickplayTileLoader</a></div><div class="sidebar-section-children"><a href="module-UserData.html">UserData</a></div><div class="sidebar-section-children"><a href="module-UserItem.html">UserItem</a></div><div class="sidebar-section-children"><a href="module-UserRow.html">UserRow</a></div><div class="sidebar-section-children"><a href="module-UserSelect.html">UserSelect</a></div><div class="sidebar-section-children"><a href="module-VertButtonGroup.html">VertButtonGroup</a></div><div class="sidebar-section-children"><a href="module-VideoNotification.html">VideoNotification</a></div><div class="sidebar-section-children"><a href="module-VideoPlayerView.html">VideoPlayerView</a></div><div class="sidebar-section-children"><a href="module-VideoProgressBar.html">VideoProgressBar</a></div><div class="sidebar-section-children"><a href="module-ViewCreator.html">ViewCreator</a></div><div class="sidebar-section-children"><a href="module-apiPool.html">apiPool</a></div><div class="sidebar-section-children"><a href="module-backdrop.html">backdrop</a></div><div class="sidebar-section-children"><a href="module-baseRequest.html">baseRequest</a></div><div class="sidebar-section-children"><a href="module-captionTask.html">captionTask</a></div><div class="sidebar-section-children"><a href="module-chapterItems.html">chapterItems</a></div><div class="sidebar-section-children"><a href="module-conditional.html">conditional</a></div><div class="sidebar-section-children"><a href="module-config.html">config</a></div><div class="sidebar-section-children"><a href="module-deviceCapabilities.html">deviceCapabilities</a></div><div class="sidebar-section-children"><a href="module-displaySettings.html">displaySettings</a></div><div class="sidebar-section-children"><a href="module-extrasLayout.html">extrasLayout</a></div><div class="sidebar-section-children"><a href="module-image.html">image</a></div><div class="sidebar-section-children"><a href="module-imageHelpers.html">imageHelpers</a></div><div class="sidebar-section-children"><a href="module-itemImageUrl.html">itemImageUrl</a></div><div class="sidebar-section-children"><a href="module-items.html">items</a></div><div class="sidebar-section-children"><a href="module-languages.html">languages</a></div><div class="sidebar-section-children"><a href="module-libraryViewFactory.html">libraryViewFactory</a></div><div class="sidebar-section-children"><a href="module-liveTv.html">liveTv</a></div><div class="sidebar-section-children"><a href="module-main.html">main</a></div><div class="sidebar-section-children"><a href="module-mediaDisplayTitle.html">mediaDisplayTitle</a></div><div class="sidebar-section-children"><a href="module-mediaSegments.html">mediaSegments</a></div><div class="sidebar-section-children"><a href="module-migrations.html">migrations</a></div><div class="sidebar-section-children"><a href="module-misc.html">misc</a></div><div class="sidebar-section-children"><a href="module-nodeHelpers.html">nodeHelpers</a></div><div class="sidebar-section-children"><a href="module-nodeUtils.html">nodeUtils</a></div><div class="sidebar-section-children"><a href="module-placeholderImage.html">placeholderImage</a></div><div class="sidebar-section-children"><a href="module-queueBackdropHelper.html">queueBackdropHelper</a></div><div class="sidebar-section-children"><a href="module-quickplay.html">quickplay</a></div><div class="sidebar-section-children"><a href="module-rowItemImage.html">rowItemImage</a></div><div class="sidebar-section-children"><a href="module-rowItemText.html">rowItemText</a></div><div class="sidebar-section-children"><a href="module-rowListWrap.html">rowListWrap</a></div><div class="sidebar-section-children"><a href="module-schedule.html">schedule</a></div><div class="sidebar-section-children"><a href="module-sdkV1.html">sdkV1</a></div><div class="sidebar-section-children"><a href="module-sdkV2.html">sdkV2</a></div><div class="sidebar-section-children"><a href="module-section.html">section</a></div><div class="sidebar-section-children"><a href="module-sectionScroller.html">sectionScroller</a></div><div class="sidebar-section-children"><a href="module-settings.html">settings</a></div><div class="sidebar-section-children"><a href="module-showScenes.html">showScenes</a></div><div class="sidebar-section-children"><a href="module-streamSelection.html">streamSelection</a></div><div class="sidebar-section-children"><a href="module-subtitles.html">subtitles</a></div><div class="sidebar-section-children"><a href="module-textureManager.html">textureManager</a></div><div class="sidebar-section-children"><a href="module-timeouts.html">timeouts</a></div><div class="sidebar-section-children"><a href="module-trackClusterFocus.html">trackClusterFocus</a></div><div class="sidebar-section-children"><a href="module-translate.html">translate</a></div><div class="sidebar-section-children"><a href="module-translateLocale.html">translateLocale</a></div><div class="sidebar-section-children"><a href="module-trickplay.html">trickplay</a></div><div class="sidebar-section-children"><a href="module-url.html">url</a></div><div class="sidebar-section-children"><a href="module-userAuth.html">userAuth</a></div><div class="sidebar-section-children"><a href="module-voiceTransport.html">voiceTransport</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-ApiClient.ApiClient.html">ApiClient</a></div><div class="sidebar-section-children"><a href="module-GenericPresenter.GenericPresenter.html">GenericPresenter</a></div><div class="sidebar-section-children"><a href="module-GridPresenterBase.GridPresenterBase.html">GridPresenterBase</a></div><div class="sidebar-section-children"><a href="module-JellyfinDataTransformer.JellyfinDataTransformer.html">JellyfinDataTransformer</a></div><div class="sidebar-section-children"><a href="module-LiveTVPresenter.LiveTVPresenter.html">LiveTVPresenter</a></div><div class="sidebar-section-children"><a href="module-MoviePresenter.MoviePresenter.html">MoviePresenter</a></div><div class="sidebar-section-children"><a href="module-MusicPresenter.MusicPresenter.html">MusicPresenter</a></div><div class="sidebar-section-children"><a href="module-PhotoPresenter.PhotoPresenter.html">PhotoPresenter</a></div><div class="sidebar-section-children"><a href="module-SessionDataTransformer.SessionDataTransformer.html">SessionDataTransformer</a></div><div class="sidebar-section-children"><a href="module-TVShowPresenter.TVShowPresenter.html">TVShowPresenter</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-namespaces"><div>Namespaces</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="extrasLayout.html">extrasLayout</a></div><div class="sidebar-section-children"><a href="nodeHelpers.html">nodeHelpers</a></div><div class="sidebar-section-children"><a href="nodeUtils.html">nodeUtils</a></div><div class="sidebar-section-children"><a href="quickplay.html">quickplay</a></div><div class="sidebar-section-children"><a href="sdkV1.html">sdkV1</a></div><div class="sidebar-section-children"><a href="sdkV1_sdkV1.html">sdkV1/sdkV1</a></div><div class="sidebar-section-children"><a href="sdkV1_sdkV1_users.html">sdkV1/sdkV1/users</a></div><div class="sidebar-section-children"><a href="sdkV2.html">sdkV2</a></div><div class="sidebar-section-children"><a href="sdkV2_sdkV2.html">sdkV2/sdkV2</a></div><div class="sidebar-section-children"><a href="sdkV2_sdkV2_users.html">sdkV2/sdkV2/users</a></div><div class="sidebar-section-children"><a href="timeouts.html">timeouts</a></div><div class="sidebar-section-children"><a href="trackClusterFocus.html">trackClusterFocus</a></div><div class="sidebar-section-children"><a href="trickplay.html">trickplay</a></div><div class="sidebar-section-children"><a href="voiceTransport.html">voiceTransport</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"><div class="external-link navbar-item"><a id="github-link" href="https://github.com/jellyrock/api-docs" target="_blank">Source</a></div><div class="external-link navbar-item"><a id="jellyfin-link" href="https://jellyfin.org/docs/" target="_blank">Jellyfin docs</a></div><div class="external-link navbar-item"><a id="jellyfin-link" href="https://api.jellyfin.org/" target="_blank">Jellyfin API docs</a></div></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section id="source-page" class="source-page"><header><h1 id="title" class="has-anchor">components_home_Home.bs</h1></header><article><pre class="prettyprint source lang-js"><code>import "pkg:/source/api/ApiClient.bs"
import "pkg:/source/api/apiPool.bs"
import "pkg:/source/enums/HomeAction.bs"
import "pkg:/source/roku_modules/log/LogMixin.brs"
import "pkg:/source/translationKeys.bs"
import "pkg:/source/utils/config.bs"
import "pkg:/source/utils/deviceCapabilities.bs"
import "pkg:/source/utils/misc.bs"
import "pkg:/source/utils/textureManager.bs"
import "pkg:/source/utils/translate.bs"
sub init()
m.log = new log.Logger("Home")
m.log.verbose("init")
m.isFirstRun = true
m.top.isOptionsAvailable = true
' HomeRows starts in XML as the default tab content
m.homeRows = m.top.findNode("homeRows")
m.activeContent = m.homeRows
m.activeTabId = "home"
' Proxy item selection from the active content. Cleanup happens via
' destroyActiveContent() against m.activeContent (which aliases m.homeRows
' or m.favoritesRows depending on the active tab).
m.homeRows.observeField("selectedItem", "onRowItemSelected")
m.homeRows.observeField("quickPlayNode", "onQuickPlayNode")
' Voice search setup — matches BaseGridView's pattern:
' Set voiceEnabled once in init(), never set it to false.
' Only toggle active on screen show/hide.
initVoiceBox()
' Tab configuration
m.top.overhangTabs = [
{ title: translate(translationKeys.LabelHome), id: "home" },
{ title: translate(translationKeys.LabelFavorites), id: "favorites" }
]
m.top.selectedTabId = "home"
m.top.observeField("selectedTabId", "onTabChanged")
end sub
sub refresh()
if not isValid(m.activeContent) then return
if m.activeTabId = "home"
m.activeContent.callFunc("updateHomeRows")
else if m.activeTabId = "favorites"
m.activeContent.callFunc("loadFavorites")
end if
end sub
' Entry point called by Main.bs createAndShowHomeGroup() BEFORE pushScene().
' Starting data loads before the screen transition completes improves perceived performance.
sub loadLibraries()
if not isValid(m.homeRows)
m.log.error("Cannot load libraries - homeRows is invalid")
return
end if
m.homeRows.callFunc("loadLibraries")
end sub
' JRScreen hook called when the screen is displayed by the screen manager
sub onScreenShown()
m.log.info("onScreenShown")
' Configure overhang UI
scene = m.top.getScene()
globalUser = m.global.user
overhang = scene.findNode("overhang")
if isValid(overhang)
overhang.isLogoVisible = true
overhang.currentUser = globalUser.name
m.overhang = overhang
' Cache overhang element references and observe their events ONCE.
' onScreenShown runs on every return (e.g. back from Settings) —
' calling observeField again would stack duplicate observers, causing
' actions to fire N times (1 extra per show).
if not isValid(m.tabBar)
tabBar = overhang.callFunc("getTabBar")
if isValid(tabBar)
m.tabBar = tabBar
m.tabBar.observeField("requestFocusReturn", "onTabBarFocusReturn")
end if
end if
if not isValid(m.userDropdown)
userDropdown = overhang.callFunc("getUserDropdown")
if isValid(userDropdown)
m.userDropdown = userDropdown
m.userDropdown.observeField("requestFocusReturn", "onUserDropdownFocusReturn")
m.userDropdown.observeField("selectedAction", "onUserMenuAction")
end if
end if
' Enable overhang icons (search + settings) and observe their events once
overhang.shouldShowIcons = true
if not isValid(m.searchIcon)
overhang.observeField("iconAction", "onOverhangIconAction")
searchIcon = overhang.callFunc("getSearchIcon")
if isValid(searchIcon)
m.searchIcon = searchIcon
m.searchIcon.observeField("requestFocusReturn", "onIconFocusReturn")
end if
settingsIcon = overhang.callFunc("getSettingsIcon")
if isValid(settingsIcon)
m.settingsIcon = settingsIcon
m.settingsIcon.observeField("requestFocusReturn", "onIconFocusReturn")
end if
end if
' Hide clock if user preference is set
if globalUser.settings.uiDesignHideClock
overhang.callFunc("hideClock")
end if
end if
' Re-activate voice capture — matching BaseGridView's onScreenShown pattern.
' Only toggle active; voiceEnabled was set once in init() and never changed.
if isValid(m.voiceBox)
m.voiceBox.active = true
end if
' Restore focus. Priority:
' 1. Overhang element that triggered the last navigation (icon/dropdown action)
' — these are children of the overhang, not Home, so SceneManager's
' lastFocus walk can't find them.
' 2. SceneManager's lastFocus (normal in-group focus restoration).
' 3. Active content (fallback).
' Reset overhang element tracking so the next UP defaults to the active tab
m.lastOverhangElement = invalid
if isValid(m.lastOverhangFocus)
m.lastOverhangFocus.setFocus(true)
m.lastOverhangFocus = invalid
else if isValid(m.top.lastFocus) and m.top.lastFocus.id <> "homeVoiceBox"
m.top.lastFocus.setFocus(true)
else if isValid(m.activeContent)
m.activeContent.setFocus(true)
else
m.top.setFocus(true)
end if
' First run: post device capabilities to the server via fire-and-forget side effect.
' No response handling needed — Main.bs already called loadLibraries() before
' pushing this screen, so data is already in flight.
if m.isFirstRun
m.isFirstRun = false
SubmitSideEffect(GetApi().BuildPostSessionCapabilitiesRequest(getDeviceCapabilities()))
else
' Subsequent visits: refresh the active tab's data in place
refresh()
end if
' Restore texture management — reactivate and restore buffer range so cells reload.
if isValid(m.activeContent) and isValid(m.activeContent.content)
updateTextureBufferRange(m.activeContent.content, m.activeContent.rowItemFocused[0], m.activeContent.rowItemFocused[1], m.activeContent.numRows)
activateTextureManager(m.activeContent.content)
end if
' Re-evaluate backdrop setting visibility (updates when user changes setting from Settings screen)
scene.callFunc("refreshBackdropSetting")
end sub
' JRScreen hook called when the screen is hidden by the screen manager
sub onScreenHidden()
m.log.info("onScreenHidden")
' Release texture memory — cells with renderTracking "none" unload their URIs.
if isValid(m.activeContent) and isValid(m.activeContent.content)
hideTextureManager(m.activeContent.content)
end if
' Deactivate voice so other screens can claim the voice route.
' Only toggle active — never set voiceEnabled=false (matches BaseGridView pattern).
if isValid(m.voiceBox)
m.voiceBox.active = false
end if
scene = m.top.getScene()
overhang = scene.findNode("overhang")
if isValid(overhang)
overhang.isLogoVisible = false
overhang.shouldShowIcons = false
overhang.currentUser = ""
end if
end sub
' ============================================
' VOICE SEARCH
' ============================================
' initVoiceBox: One-time voice setup in init() — matches BaseGridView's pattern.
' Sets voiceEnabled=true ONCE and never sets it back to false. The firmware
' silently manages voiceEnabled when other screens claim voice routing.
' Only `active` is toggled on screen show/hide.
sub initVoiceBox()
m.voiceBox = m.top.findNode("homeVoiceBox")
if not isValid(m.voiceBox)
m.log.error("initVoiceBox: homeVoiceBox not found!")
return
end if
m.voiceBox.opacity = 0.0001
m.voiceBox.hintText = translate(translationKeys.LabelUseVoiceRemoteToSearch)
m.voiceBox.voiceEnabled = true
m.voiceBox.active = true
m.voiceBox.observeField("text", "onVoiceSearch")
end sub
' onVoiceSearch: Fires when voice input is captured by the hidden VoiceTextEditBox.
' Signals Main.bs to open SearchResults with the spoken query pre-populated.
sub onVoiceSearch()
voiceText = m.voiceBox.text
if voiceText = "" then return
' Reset for next voice search
m.voiceBox.text = ""
m.top.voiceQuery = voiceText
end sub
' ============================================
' TAB HANDLING
' ============================================
' Called when selectedTabId changes (via SceneManager proxy from overhang tab bar).
' Destroys the old tab's content and creates the new tab's content.
sub onTabChanged()
tabId = m.top.selectedTabId
if tabId = m.activeTabId then return
' Destroy the current content
destroyActiveContent()
m.activeTabId = tabId
if tabId = "home"
' Create HomeRows, add to scene, load data
m.homeRows = CreateObject("roSGNode", "HomeRows")
m.activeContent = m.homeRows
m.top.insertChild(m.homeRows, 0)
m.homeRows.observeField("selectedItem", "onRowItemSelected")
m.homeRows.observeField("quickPlayNode", "onQuickPlayNode")
m.homeRows.callFunc("loadLibraries")
m.homeRows.setFocus(true)
else if tabId = "favorites"
' Create FavoritesRows, add to scene, load data
m.favoritesRows = CreateObject("roSGNode", "FavoritesRows")
m.activeContent = m.favoritesRows
m.top.insertChild(m.favoritesRows, 0)
m.favoritesRows.observeField("selectedItem", "onRowItemSelected")
m.favoritesRows.observeField("quickPlayNode", "onQuickPlayNode")
m.favoritesRows.callFunc("loadFavorites")
m.favoritesRows.setFocus(true)
end if
end sub
' Destroys the currently active tab content and removes it from the scene
sub destroyActiveContent()
if not isValid(m.activeContent) then return
m.activeContent.unobserveField("selectedItem")
m.activeContent.unobserveField("quickPlayNode")
if m.activeTabId = "home" and isValid(m.homeRows)
m.homeRows.callFunc("onDestroy")
m.top.removeChild(m.homeRows)
m.homeRows = invalid
else if m.activeTabId = "favorites" and isValid(m.favoritesRows)
m.favoritesRows.callFunc("onDestroy")
m.top.removeChild(m.favoritesRows)
m.favoritesRows = invalid
end if
m.activeContent = invalid
end sub
' Returns the currently active row list
function getActiveRows() as object
return m.activeContent
end function
' Proxy selectedItem from whichever row list fires it
sub onRowItemSelected(msg)
m.top.selectedItem = msg.getData()
end sub
' Proxy quickPlayNode from whichever row list fires it.
' Must pass through invalid clears so Home.quickPlayNode doesn't retain
' a stale value that re-fires the m.port observer on screen restoration.
sub onQuickPlayNode(msg)
m.top.quickPlayNode = msg.getData()
end sub
' ============================================
' FOCUS MANAGEMENT
' ============================================
function onKeyEvent(key as string, press as boolean) as boolean
if not press then return false
' UP at top of content → focus the overhang.
' First entry after screen show defaults to the tab bar (active tab).
' Subsequent entries restore the last overhang element the user was on.
if key = "up"
activeRows = getActiveRows()
rowItemFocused = activeRows?.rowItemFocused
if isValid(activeRows) and type(rowItemFocused) = "roArray" and rowItemFocused.count() >= 2 and rowItemFocused[0] = 0
' Restore last overhang element if the user has visited before
if isValid(m.lastOverhangElement)
m.lastOverhangElement.setFocus(true)
return true
end if
' First visit — default to the tab bar (active tab)
' Lazy-init: tab bar may not exist during first onScreenShown (pushScene
' calls onScreenShown before registerOverhangData creates the tab bar)
if not isValid(m.tabBar) and isValid(m.overhang)
tabBar = m.overhang.callFunc("getTabBar")
if isValid(tabBar)
m.tabBar = tabBar
m.tabBar.observeField("requestFocusReturn", "onTabBarFocusReturn")
end if
end if
if isValid(m.tabBar)
m.tabBar.setFocus(true)
return true
end if
end if
end if
return false
end function
' User dropdown signals DOWN was pressed — return focus to active content
sub onUserDropdownFocusReturn()
m.lastOverhangElement = m.userDropdown
if isValid(m.activeContent)
m.activeContent.setFocus(true)
end if
end sub
' User dropdown menu item was selected — proxy to Home's interface for Main.bs.
' Saves the dropdown so onScreenShown can restore focus when the user returns,
' then moves focus into Home's tree so pushScene can properly manage focus transfer.
sub onUserMenuAction()
if isValid(m.userDropdown)
m.lastOverhangFocus = m.userDropdown
' Move focus to Home group (not activeContent — that would visibly highlight
' a row item before the screen transition). m.top is in Home's tree, which
' satisfies SceneManager.pushScene() without any visible focus jump.
m.top.setFocus(true)
m.top.userMenuAction = m.userDropdown.selectedAction
end if
end sub
' Overhang icon (search/settings) was pressed — proxy to Home's interface for Main.bs.
' Saves the focused icon for focus restoration on return, then moves focus to
' Home group BEFORE firing the action. This ensures SceneManager.pushScene()
' can find focus in Home's tree. We focus m.top (not activeContent) to avoid
' a visible focus jump to the row list before the screen transition.
sub onOverhangIconAction()
if isValid(m.overhang)
' Determine which icon fired the action and save it for focus restoration.
' Use the action ID rather than hasFocus() — the field observer callback
' may fire after focus has already moved, making hasFocus() unreliable.
action = m.overhang.iconAction
if action = HomeAction.OPEN_SEARCH and isValid(m.searchIcon)
m.lastOverhangFocus = m.searchIcon
else if action = HomeAction.OPEN_SETTINGS and isValid(m.settingsIcon)
m.lastOverhangFocus = m.settingsIcon
end if
' Move focus to Home group — not activeContent (avoids visible row highlight)
m.top.setFocus(true)
m.top.userMenuAction = m.overhang.iconAction
end if
end sub
' Overhang icon signals DOWN was pressed — return focus to active content
sub onIconFocusReturn(msg as object)
m.lastOverhangElement = msg.getRoSGNode()
if isValid(m.activeContent)
m.activeContent.setFocus(true)
end if
end sub
' Tab bar signals DOWN was pressed — return focus to active content
sub onTabBarFocusReturn()
m.lastOverhangElement = m.tabBar
if isValid(m.activeContent)
m.activeContent.setFocus(true)
end if
end sub
' ============================================
' TEARDOWN
' ============================================
' onDestroy: Full teardown releasing all resources before component removal
' Called automatically by SceneManager.popScene() / clearScenes()
sub onDestroy()
m.log.verbose("onDestroy")
m.top.unobserveField("selectedTabId")
' Release voice box — match BaseGridView: never set voiceEnabled=false,
' just unobserve and release the reference.
if isValid(m.voiceBox)
m.voiceBox.unobserveField("text")
m.voiceBox = invalid
end if
' Release tab bar observer
if isValid(m.tabBar)
m.tabBar.unobserveField("requestFocusReturn")
m.tabBar = invalid
end if
' Release user dropdown observers
if isValid(m.userDropdown)
m.userDropdown.unobserveField("requestFocusReturn")
m.userDropdown.unobserveField("selectedAction")
m.userDropdown = invalid
end if
' Release overhang icon observers
m.lastOverhangFocus = invalid
m.lastOverhangElement = invalid
if isValid(m.overhang)
m.overhang.unobserveField("iconAction")
end if
if isValid(m.searchIcon)
m.searchIcon.unobserveField("requestFocusReturn")
m.searchIcon = invalid
end if
if isValid(m.settingsIcon)
m.settingsIcon.unobserveField("requestFocusReturn")
m.settingsIcon = invalid
end if
' Destroy active tab content
destroyActiveContent()
end sub
</code></pre></article></section><footer class="footer" id="PeOAagUepe"><div class="wrapper"><span class="jsdoc-message">Automatically generated using <a href="https://github.com/jsdoc/jsdoc" target="_blank">JSDoc</a> and the <a href="https://github.com/ankitskvmdam/clean-jsdoc-theme" target="_blank">clean-jsdoc-theme</a>.</span><script defer="defer" src="/_a/script.js" data-website-id="07139597-641c-42e6-8f5a-cbb0d9182a20" data-host-url="https://api.jellyrock.app/_a"></script></div></footer></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><a href="/" class="sidebar-title sidebar-title-anchor">JellyRock Code Documentation</a><div class="mobile-nav-links"><div class="external-link navbar-item"><a id="github-link-mobile" href="https://github.com/jellyrock/api-docs" target="_blank">Source</a></div><div class="external-link navbar-item"><a id="jellyfin-link-mobile" href="https://jellyfin.org/docs/" target="_blank">Jellyfin docs</a></div><div class="external-link navbar-item"><a id="jellyfin-link-mobile" href="https://api.jellyfin.org/" target="_blank">Jellyfin API docs</a></div></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-AlbumTrackList.html">AlbumTrackList</a></div><div class="sidebar-section-children"><a href="module-Alpha.html">Alpha</a></div><div class="sidebar-section-children"><a href="module-AlphaKeyboard.html">AlphaKeyboard</a></div><div class="sidebar-section-children"><a href="module-ApiClient.html">ApiClient</a></div><div class="sidebar-section-children"><a href="module-ApiQueueTask.html">ApiQueueTask</a></div><div class="sidebar-section-children"><a href="module-ApiTask.html">ApiTask</a></div><div class="sidebar-section-children"><a href="module-AudioPlayer.html">AudioPlayer</a></div><div class="sidebar-section-children"><a href="module-AudioPlayerView.html">AudioPlayerView</a></div><div class="sidebar-section-children"><a href="module-BackdropFader.html">BackdropFader</a></div><div class="sidebar-section-children"><a href="module-BaseGridView.html">BaseGridView</a></div><div class="sidebar-section-children"><a href="module-BrandingConfigTask.html">BrandingConfigTask</a></div><div class="sidebar-section-children"><a href="module-BrowseRowItem.html">BrowseRowItem</a></div><div class="sidebar-section-children"><a href="module-Clock.html">Clock</a></div><div class="sidebar-section-children"><a href="module-CommunityRating.html">CommunityRating</a></div><div class="sidebar-section-children"><a href="module-ConfigData.html">ConfigData</a></div><div class="sidebar-section-children"><a href="module-ConfigItem.html">ConfigItem</a></div><div class="sidebar-section-children"><a href="module-ConfigList.html">ConfigList</a></div><div class="sidebar-section-children"><a href="module-CriticRating.html">CriticRating</a></div><div class="sidebar-section-children"><a href="module-ExtrasRowList.html">ExtrasRowList</a></div><div class="sidebar-section-children"><a href="module-ExtrasSlider.html">ExtrasSlider</a></div><div class="sidebar-section-children"><a href="module-FavoritesRows.html">FavoritesRows</a></div><div class="sidebar-section-children"><a href="module-FocusableOverview.html">FocusableOverview</a></div><div class="sidebar-section-children"><a href="module-FontDownloadTask.html">FontDownloadTask</a></div><div class="sidebar-section-children"><a href="module-FontScalingTask.html">FontScalingTask</a></div><div class="sidebar-section-children"><a href="module-GenericPresenter.html">GenericPresenter</a></div><div class="sidebar-section-children"><a href="module-GetFiltersTask.html">GetFiltersTask</a></div><div class="sidebar-section-children"><a href="module-GetNextEpisodeTask.html">GetNextEpisodeTask</a></div><div class="sidebar-section-children"><a href="module-GetPlaybackInfoTask.html">GetPlaybackInfoTask</a></div><div class="sidebar-section-children"><a href="module-GetShuffleItemsTask.html">GetShuffleItemsTask</a></div><div class="sidebar-section-children"><a href="module-Gradient.html">Gradient</a></div><div class="sidebar-section-children"><a href="module-GridItem.html">GridItem</a></div><div class="sidebar-section-children"><a href="module-GridItemSmall.html">GridItemSmall</a></div><div class="sidebar-section-children"><a href="module-GridPresenterBase.html">GridPresenterBase</a></div><div class="sidebar-section-children"><a href="module-HexKeyboard.html">HexKeyboard</a></div><div class="sidebar-section-children"><a href="module-Home.html">Home</a></div><div class="sidebar-section-children"><a href="module-HomeAction.html">HomeAction</a></div><div class="sidebar-section-children"><a href="module-HomeRows.html">HomeRows</a></div><div class="sidebar-section-children"><a href="module-IconButton.html">IconButton</a></div><div class="sidebar-section-children"><a href="module-IntegerKeyboard.html">IntegerKeyboard</a></div><div class="sidebar-section-children"><a href="module-ItemDetails.html">ItemDetails</a></div><div class="sidebar-section-children"><a href="module-ItemGridOptions.html">ItemGridOptions</a></div><div class="sidebar-section-children"><a href="module-JRButtonGroup.html">JRButtonGroup</a></div><div class="sidebar-section-children"><a href="module-JRButtons.html">JRButtons</a></div><div class="sidebar-section-children"><a href="module-JRDropdown.html">JRDropdown</a></div><div class="sidebar-section-children"><a href="module-JRDropdownItem.html">JRDropdownItem</a></div><div class="sidebar-section-children"><a href="module-JRLabel.html">JRLabel</a></div><div class="sidebar-section-children"><a href="module-JRLabelList.html">JRLabelList</a></div><div class="sidebar-section-children"><a href="module-JRMarkupGrid.html">JRMarkupGrid</a></div><div class="sidebar-section-children"><a href="module-JRMessageDialog.html">JRMessageDialog</a></div><div class="sidebar-section-children"><a href="module-JROverhang.html">JROverhang</a></div><div class="sidebar-section-children"><a href="module-JROverhangIcon.html">JROverhangIcon</a></div><div class="sidebar-section-children"><a href="module-JRPlaceholder.html">JRPlaceholder</a></div><div class="sidebar-section-children"><a href="module-JRPoster.html">JRPoster</a></div><div class="sidebar-section-children"><a href="module-JRPosterGrid.html">JRPosterGrid</a></div><div class="sidebar-section-children"><a href="module-JRRowItem.html">JRRowItem</a></div><div class="sidebar-section-children"><a href="module-JRRowList.html">JRRowList</a></div><div class="sidebar-section-children"><a href="module-JRScene.html">JRScene</a></div><div class="sidebar-section-children"><a href="module-JRScreen.html">JRScreen</a></div><div class="sidebar-section-children"><a href="module-JRScrollingLabel.html">JRScrollingLabel</a></div><div class="sidebar-section-children"><a href="module-JRServer.html">JRServer</a></div><div class="sidebar-section-children"><a href="module-JRTab.html">JRTab</a></div><div class="sidebar-section-children"><a href="module-JRTabBar.html">JRTabBar</a></div><div class="sidebar-section-children"><a href="module-JRTimeGrid.html">JRTimeGrid</a></div><div class="sidebar-section-children"><a href="module-JellyfinDataTransformer.html">JellyfinDataTransformer</a></div><div class="sidebar-section-children"><a href="module-JellyfinUserSettings.html">JellyfinUserSettings</a></div><div class="sidebar-section-children"><a href="module-LabelDisabledLarge.html">LabelDisabledLarge</a></div><div class="sidebar-section-children"><a href="module-LabelDisabledLarger.html">LabelDisabledLarger</a></div><div class="sidebar-section-children"><a href="module-LabelDisabledLargest.html">LabelDisabledLargest</a></div><div class="sidebar-section-children"><a href="module-LabelDisabledMedium.html">LabelDisabledMedium</a></div><div class="sidebar-section-children"><a href="module-LabelDisabledSmall.html">LabelDisabledSmall</a></div><div class="sidebar-section-children"><a href="module-LabelDisabledSmaller.html">LabelDisabledSmaller</a></div><div class="sidebar-section-children"><a href="module-LabelDisabledSmallest.html">LabelDisabledSmallest</a></div><div class="sidebar-section-children"><a href="module-LabelErrorLarge.html">LabelErrorLarge</a></div><div class="sidebar-section-children"><a href="module-LabelErrorLarger.html">LabelErrorLarger</a></div><div class="sidebar-section-children"><a href="module-LabelErrorLargest.html">LabelErrorLargest</a></div><div class="sidebar-section-children"><a href="module-LabelErrorMedium.html">LabelErrorMedium</a></div><div class="sidebar-section-children"><a href="module-LabelErrorSmall.html">LabelErrorSmall</a></div><div class="sidebar-section-children"><a href="module-LabelErrorSmaller.html">LabelErrorSmaller</a></div><div class="sidebar-section-children"><a href="module-LabelErrorSmallest.html">LabelErrorSmallest</a></div><div class="sidebar-section-children"><a href="module-LabelLarge.html">LabelLarge</a></div><div class="sidebar-section-children"><a href="module-LabelLarger.html">LabelLarger</a></div><div class="sidebar-section-children"><a href="module-LabelLargest.html">LabelLargest</a></div><div class="sidebar-section-children"><a href="module-LabelMedium.html">LabelMedium</a></div><div class="sidebar-section-children"><a href="module-LabelPrimaryLarge.html">LabelPrimaryLarge</a></div><div class="sidebar-section-children"><a href="module-LabelPrimaryLarger.html">LabelPrimaryLarger</a></div><div class="sidebar-section-children"><a href="module-LabelPrimaryLargest.html">LabelPrimaryLargest</a></div><div class="sidebar-section-children"><a href="module-LabelPrimaryMedium.html">LabelPrimaryMedium</a></div><div class="sidebar-section-children"><a href="module-LabelPrimarySmall.html">LabelPrimarySmall</a></div><div class="sidebar-section-children"><a href="module-LabelPrimarySmaller.html">LabelPrimarySmaller</a></div><div class="sidebar-section-children"><a href="module-LabelPrimarySmallest.html">LabelPrimarySmallest</a></div><div class="sidebar-section-children"><a href="module-LabelSecondaryLarge.html">LabelSecondaryLarge</a></div><div class="sidebar-section-children"><a href="module-LabelSecondaryLarger.html">LabelSecondaryLarger</a></div><div class="sidebar-section-children"><a href="module-LabelSecondaryLargest.html">LabelSecondaryLargest</a></div><div class="sidebar-section-children"><a href="module-LabelSecondaryMedium.html">LabelSecondaryMedium</a></div><div class="sidebar-section-children"><a href="module-LabelSecondarySmall.html">LabelSecondarySmall</a></div><div class="sidebar-section-children"><a href="module-LabelSecondarySmaller.html">LabelSecondarySmaller</a></div><div class="sidebar-section-children"><a href="module-LabelSecondarySmallest.html">LabelSecondarySmallest</a></div><div class="sidebar-section-children"><a href="module-LabelSmall.html">LabelSmall</a></div><div class="sidebar-section-children"><a href="module-LabelSmaller.html">LabelSmaller</a></div><div class="sidebar-section-children"><a href="module-LabelSmallest.html">LabelSmallest</a></div><div class="sidebar-section-children"><a href="module-LanguagePicker.html">LanguagePicker</a></div><div class="sidebar-section-children"><a href="module-LiveTVPresenter.html">LiveTVPresenter</a></div><div class="sidebar-section-children"><a href="module-LoadChannelListForQueueTask.html">LoadChannelListForQueueTask</a></div><div class="sidebar-section-children"><a href="module-LoadChannelsTask.html">LoadChannelsTask</a></div><div class="sidebar-section-children"><a href="module-LoadItemsTask.html">LoadItemsTask</a></div><div class="sidebar-section-children"><a href="module-LoadItemsTask2.html">LoadItemsTask2</a></div><div class="sidebar-section-children"><a href="module-LoadPhotoTask.html">LoadPhotoTask</a></div><div class="sidebar-section-children"><a href="module-LoadProgramDetailsTask.html">LoadProgramDetailsTask</a></div><div class="sidebar-section-children"><a href="module-LoadScreenSaverTimeoutTask.html">LoadScreenSaverTimeoutTask</a></div><div class="sidebar-section-children"><a href="module-LoadSheduleTask.html">LoadSheduleTask</a></div><div class="sidebar-section-children"><a href="module-LoadVideoContentTask.html">LoadVideoContentTask</a></div><div class="sidebar-section-children"><a href="module-LoginScene.html">LoginScene</a></div><div class="sidebar-section-children"><a href="module-MediaSegmentAction.html">MediaSegmentAction</a></div><div class="sidebar-section-children"><a href="module-MediaSegmentType.html">MediaSegmentType</a></div><div class="sidebar-section-children"><a href="module-MockSceneManager.html">MockSceneManager</a></div><div class="sidebar-section-children"><a href="module-MoviePresenter.html">MoviePresenter</a></div><div class="sidebar-section-children"><a href="module-MusicArtistGridItem.html">MusicArtistGridItem</a></div><div class="sidebar-section-children"><a href="module-MusicPresenter.html">MusicPresenter</a></div><div class="sidebar-section-children"><a href="module-OSD.html">OSD</a></div><div class="sidebar-section-children"><a href="module-OSDButtonGroup.html">OSDButtonGroup</a></div><div class="sidebar-section-children"><a href="module-OptionNode.html">OptionNode</a></div><div class="sidebar-section-children"><a href="module-OptionsButton.html">OptionsButton</a></div><div class="sidebar-section-children"><a href="module-OptionsData.html">OptionsData</a></div><div class="sidebar-section-children"><a href="module-OptionsSlider.html">OptionsSlider</a></div><div class="sidebar-section-children"><a href="module-OverviewDialog.html">OverviewDialog</a></div><div class="sidebar-section-children"><a href="module-PhotoDetails.html">PhotoDetails</a></div><div class="sidebar-section-children"><a href="module-PhotoPresenter.html">PhotoPresenter</a></div><div class="sidebar-section-children"><a href="module-PlaybackDialog.html">PlaybackDialog</a></div><div class="sidebar-section-children"><a href="module-PresentationBackdrop.html">PresentationBackdrop</a></div><div class="sidebar-section-children"><a href="module-ProgramDetails.html">ProgramDetails</a></div><div class="sidebar-section-children"><a href="module-PublicUserData.html">PublicUserData</a></div><div class="sidebar-section-children"><a href="module-QueueManager.html">QueueManager</a></div><div class="sidebar-section-children"><a href="module-QuickConnect.html">QuickConnect</a></div><div class="sidebar-section-children"><a href="module-QuickConnectDialog.html">QuickConnectDialog</a></div><div class="sidebar-section-children"><a href="module-QuickConnectEnabledTask.html">QuickConnectEnabledTask</a></div><div class="sidebar-section-children"><a href="module-QuickPlayTask.html">QuickPlayTask</a></div><div class="sidebar-section-children"><a href="module-RadioDialog.html">RadioDialog</a></div><div class="sidebar-section-children"><a href="module-RecordProgramTask.html">RecordProgramTask</a></div><div class="sidebar-section-children"><a href="module-RectangleBackgroundPrimary.html">RectangleBackgroundPrimary</a></div><div class="sidebar-section-children"><a href="module-RectangleBackgroundSecondary.html">RectangleBackgroundSecondary</a></div><div class="sidebar-section-children"><a href="module-RectangleSecondary.html">RectangleSecondary</a></div><div class="sidebar-section-children"><a href="module-RefreshLiveTvMetadataTask.html">RefreshLiveTvMetadataTask</a></div><div class="sidebar-section-children"><a href="module-ResumeButton.html">ResumeButton</a></div><div class="sidebar-section-children"><a href="module-SceneManager.html">SceneManager</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelDisabledLarge.html">ScrollingLabelDisabledLarge</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelDisabledLarger.html">ScrollingLabelDisabledLarger</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelDisabledLargest.html">ScrollingLabelDisabledLargest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelDisabledMedium.html">ScrollingLabelDisabledMedium</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelDisabledSmall.html">ScrollingLabelDisabledSmall</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelDisabledSmaller.html">ScrollingLabelDisabledSmaller</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelDisabledSmallest.html">ScrollingLabelDisabledSmallest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelErrorLarge.html">ScrollingLabelErrorLarge</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelErrorLarger.html">ScrollingLabelErrorLarger</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelErrorLargest.html">ScrollingLabelErrorLargest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelErrorMedium.html">ScrollingLabelErrorMedium</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelErrorSmall.html">ScrollingLabelErrorSmall</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelErrorSmaller.html">ScrollingLabelErrorSmaller</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelErrorSmallest.html">ScrollingLabelErrorSmallest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelLarge.html">ScrollingLabelLarge</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelLarger.html">ScrollingLabelLarger</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelLargest.html">ScrollingLabelLargest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelMedium.html">ScrollingLabelMedium</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelPrimaryLarge.html">ScrollingLabelPrimaryLarge</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelPrimaryLarger.html">ScrollingLabelPrimaryLarger</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelPrimaryLargest.html">ScrollingLabelPrimaryLargest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelPrimaryMedium.html">ScrollingLabelPrimaryMedium</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelPrimarySmall.html">ScrollingLabelPrimarySmall</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelPrimarySmaller.html">ScrollingLabelPrimarySmaller</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelPrimarySmallest.html">ScrollingLabelPrimarySmallest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSecondaryLarge.html">ScrollingLabelSecondaryLarge</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSecondaryLarger.html">ScrollingLabelSecondaryLarger</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSecondaryLargest.html">ScrollingLabelSecondaryLargest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSecondaryMedium.html">ScrollingLabelSecondaryMedium</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSecondarySmall.html">ScrollingLabelSecondarySmall</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSecondarySmaller.html">ScrollingLabelSecondarySmaller</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSecondarySmallest.html">ScrollingLabelSecondarySmallest</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSmall.html">ScrollingLabelSmall</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSmaller.html">ScrollingLabelSmaller</a></div><div class="sidebar-section-children"><a href="module-ScrollingLabelSmallest.html">ScrollingLabelSmallest</a></div><div class="sidebar-section-children"><a href="module-SearchBox.html">SearchBox</a></div><div class="sidebar-section-children"><a href="module-SearchResults.html">SearchResults</a></div><div class="sidebar-section-children"><a href="module-SearchRow.html">SearchRow</a></div><div class="sidebar-section-children"><a href="module-SearchTask.html">SearchTask</a></div><div class="sidebar-section-children"><a href="module-ServerAction.html">ServerAction</a></div><div class="sidebar-section-children"><a href="module-ServerDiscoveryTask.html">ServerDiscoveryTask</a></div><div class="sidebar-section-children"><a href="module-SessionDataTransformer.html">SessionDataTransformer</a></div><div class="sidebar-section-children"><a href="module-SetServerScreen.html">SetServerScreen</a></div><div class="sidebar-section-children"><a href="module-SideEffectTask.html">SideEffectTask</a></div><div class="sidebar-section-children"><a href="module-SongItem.html">SongItem</a></div><div class="sidebar-section-children"><a href="module-Spinner.html">Spinner</a></div><div class="sidebar-section-children"><a href="module-StandardDialog.html">StandardDialog</a></div><div class="sidebar-section-children"><a href="module-SubtitleSelection.html">SubtitleSelection</a></div><div class="sidebar-section-children"><a href="module-TVShowPresenter.html">TVShowPresenter</a></div><div class="sidebar-section-children"><a href="module-TextButton.html">TextButton</a></div><div class="sidebar-section-children"><a href="module-TextSizeTask.html">TextSizeTask</a></div><div class="sidebar-section-children"><a href="module-Toast.html">Toast</a></div><div class="sidebar-section-children"><a href="module-TrackDropdown.html">TrackDropdown</a></div><div class="sidebar-section-children"><a href="module-TrackDropdownRow.html">TrackDropdownRow</a></div><div class="sidebar-section-children"><a href="module-TrickplayCarousel.html">TrickplayCarousel</a></div><div class="sidebar-section-children"><a href="module-TrickplayTileLoader.html">TrickplayTileLoader</a></div><div class="sidebar-section-children"><a href="module-UserData.html">UserData</a></div><div class="sidebar-section-children"><a href="module-UserItem.html">UserItem</a></div><div class="sidebar-section-children"><a href="module-UserRow.html">UserRow</a></div><div class="sidebar-section-children"><a href="module-UserSelect.html">UserSelect</a></div><div class="sidebar-section-children"><a href="module-VertButtonGroup.html">VertButtonGroup</a></div><div class="sidebar-section-children"><a href="module-VideoNotification.html">VideoNotification</a></div><div class="sidebar-section-children"><a href="module-VideoPlayerView.html">VideoPlayerView</a></div><div class="sidebar-section-children"><a href="module-VideoProgressBar.html">VideoProgressBar</a></div><div class="sidebar-section-children"><a href="module-ViewCreator.html">ViewCreator</a></div><div class="sidebar-section-children"><a href="module-apiPool.html">apiPool</a></div><div class="sidebar-section-children"><a href="module-backdrop.html">backdrop</a></div><div class="sidebar-section-children"><a href="module-baseRequest.html">baseRequest</a></div><div class="sidebar-section-children"><a href="module-captionTask.html">captionTask</a></div><div class="sidebar-section-children"><a href="module-chapterItems.html">chapterItems</a></div><div class="sidebar-section-children"><a href="module-conditional.html">conditional</a></div><div class="sidebar-section-children"><a href="module-config.html">config</a></div><div class="sidebar-section-children"><a href="module-deviceCapabilities.html">deviceCapabilities</a></div><div class="sidebar-section-children"><a href="module-displaySettings.html">displaySettings</a></div><div class="sidebar-section-children"><a href="module-extrasLayout.html">extrasLayout</a></div><div class="sidebar-section-children"><a href="module-image.html">image</a></div><div class="sidebar-section-children"><a href="module-imageHelpers.html">imageHelpers</a></div><div class="sidebar-section-children"><a href="module-itemImageUrl.html">itemImageUrl</a></div><div class="sidebar-section-children"><a href="module-items.html">items</a></div><div class="sidebar-section-children"><a href="module-languages.html">languages</a></div><div class="sidebar-section-children"><a href="module-libraryViewFactory.html">libraryViewFactory</a></div><div class="sidebar-section-children"><a href="module-liveTv.html">liveTv</a></div><div class="sidebar-section-children"><a href="module-main.html">main</a></div><div class="sidebar-section-children"><a href="module-mediaDisplayTitle.html">mediaDisplayTitle</a></div><div class="sidebar-section-children"><a href="module-mediaSegments.html">mediaSegments</a></div><div class="sidebar-section-children"><a href="module-migrations.html">migrations</a></div><div class="sidebar-section-children"><a href="module-misc.html">misc</a></div><div class="sidebar-section-children"><a href="module-nodeHelpers.html">nodeHelpers</a></div><div class="sidebar-section-children"><a href="module-nodeUtils.html">nodeUtils</a></div><div class="sidebar-section-children"><a href="module-placeholderImage.html">placeholderImage</a></div><div class="sidebar-section-children"><a href="module-queueBackdropHelper.html">queueBackdropHelper</a></div><div class="sidebar-section-children"><a href="module-quickplay.html">quickplay</a></div><div class="sidebar-section-children"><a href="module-rowItemImage.html">rowItemImage</a></div><div class="sidebar-section-children"><a href="module-rowItemText.html">rowItemText</a></div><div class="sidebar-section-children"><a href="module-rowListWrap.html">rowListWrap</a></div><div class="sidebar-section-children"><a href="module-schedule.html">schedule</a></div><div class="sidebar-section-children"><a href="module-sdkV1.html">sdkV1</a></div><div class="sidebar-section-children"><a href="module-sdkV2.html">sdkV2</a></div><div class="sidebar-section-children"><a href="module-section.html">section</a></div><div class="sidebar-section-children"><a href="module-sectionScroller.html">sectionScroller</a></div><div class="sidebar-section-children"><a href="module-settings.html">settings</a></div><div class="sidebar-section-children"><a href="module-showScenes.html">showScenes</a></div><div class="sidebar-section-children"><a href="module-streamSelection.html">streamSelection</a></div><div class="sidebar-section-children"><a href="module-subtitles.html">subtitles</a></div><div class="sidebar-section-children"><a href="module-textureManager.html">textureManager</a></div><div class="sidebar-section-children"><a href="module-timeouts.html">timeouts</a></div><div class="sidebar-section-children"><a href="module-trackClusterFocus.html">trackClusterFocus</a></div><div class="sidebar-section-children"><a href="module-translate.html">translate</a></div><div class="sidebar-section-children"><a href="module-translateLocale.html">translateLocale</a></div><div class="sidebar-section-children"><a href="module-trickplay.html">trickplay</a></div><div class="sidebar-section-children"><a href="module-url.html">url</a></div><div class="sidebar-section-children"><a href="module-userAuth.html">userAuth</a></div><div class="sidebar-section-children"><a href="module-voiceTransport.html">voiceTransport</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-ApiClient.ApiClient.html">ApiClient</a></div><div class="sidebar-section-children"><a href="module-GenericPresenter.GenericPresenter.html">GenericPresenter</a></div><div class="sidebar-section-children"><a href="module-GridPresenterBase.GridPresenterBase.html">GridPresenterBase</a></div><div class="sidebar-section-children"><a href="module-JellyfinDataTransformer.JellyfinDataTransformer.html">JellyfinDataTransformer</a></div><div class="sidebar-section-children"><a href="module-LiveTVPresenter.LiveTVPresenter.html">LiveTVPresenter</a></div><div class="sidebar-section-children"><a href="module-MoviePresenter.MoviePresenter.html">MoviePresenter</a></div><div class="sidebar-section-children"><a href="module-MusicPresenter.MusicPresenter.html">MusicPresenter</a></div><div class="sidebar-section-children"><a href="module-PhotoPresenter.PhotoPresenter.html">PhotoPresenter</a></div><div class="sidebar-section-children"><a href="module-SessionDataTransformer.SessionDataTransformer.html">SessionDataTransformer</a></div><div class="sidebar-section-children"><a href="module-TVShowPresenter.TVShowPresenter.html">TVShowPresenter</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-namespaces"><div>Namespaces</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="extrasLayout.html">extrasLayout</a></div><div class="sidebar-section-children"><a href="nodeHelpers.html">nodeHelpers</a></div><div class="sidebar-section-children"><a href="nodeUtils.html">nodeUtils</a></div><div class="sidebar-section-children"><a href="quickplay.html">quickplay</a></div><div class="sidebar-section-children"><a href="sdkV1.html">sdkV1</a></div><div class="sidebar-section-children"><a href="sdkV1_sdkV1.html">sdkV1/sdkV1</a></div><div class="sidebar-section-children"><a href="sdkV1_sdkV1_users.html">sdkV1/sdkV1/users</a></div><div class="sidebar-section-children"><a href="sdkV2.html">sdkV2</a></div><div class="sidebar-section-children"><a href="sdkV2_sdkV2.html">sdkV2/sdkV2</a></div><div class="sidebar-section-children"><a href="sdkV2_sdkV2_users.html">sdkV2/sdkV2/users</a></div><div class="sidebar-section-children"><a href="timeouts.html">timeouts</a></div><div class="sidebar-section-children"><a href="trackClusterFocus.html">trackClusterFocus</a></div><div class="sidebar-section-children"><a href="trickplay.html">trickplay</a></div><div class="sidebar-section-children"><a href="voiceTransport.html">voiceTransport</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>