Compare commits

...

1292 Commits

Author SHA1 Message Date
Joshua M. Boniface
c25db80cbd Bump version to 10.5.5 2020-04-26 15:26:31 -04:00
dkanada
e33ffbe9aa Merge pull request #1113 from MrTimscampi/tv-genres-title
Add title and year to posters in TV genres view

(cherry picked from commit ddc094dbfa)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-26 14:39:22 -04:00
dkanada
f68bdaa276 Merge pull request #1109 from jellyfin/change-to-google-cast
Change Chromecast player name to Google Cast

(cherry picked from commit f78bcd556d)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-26 14:39:21 -04:00
dkanada
e804227d6d Merge pull request #1108 from nielsvanvelzen/androidtv-exists
Add Android icon for Android TV in devices page

(cherry picked from commit 14fcf7e3a5)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-26 14:39:20 -04:00
dkanada
9092d7fc06 Merge pull request #1105 from thornbill/restore-user-menu
Restore user menu on mobile

(cherry picked from commit 511fe3b61c)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-26 14:39:19 -04:00
dkanada
148920f2f9 Merge pull request #1104 from dmitrylyzo/fix-undefined-variable
Fix reference to undefined variable

(cherry picked from commit 7646c17688)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-26 14:39:19 -04:00
Vasily
482fa20364 Merge pull request #1095 from JustAMan/fix-subs-on-mobile
Fix .ass subtitles not starting on mobile

(cherry picked from commit a4324665f0)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-26 14:39:18 -04:00
dkanada
b102201607 Merge pull request #1093 from MrTimscampi/mobile-fixes-2
Fix some mobile navigation issues

(cherry picked from commit 542a738926)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-26 14:39:17 -04:00
dkanada
7909c0874b Merge pull request #1074 from dmitrylyzo/playback_delayed_update
Move delayed volume update to playbackManager

(cherry picked from commit 5063c4f050)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-26 14:39:16 -04:00
dkanada
d691f4c38f Merge pull request #1022 from ferferga/fix-mobile-layout
Fix mobile layout for itemdetails

(cherry picked from commit d4427e8a37)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-26 14:39:14 -04:00
dkanada
b4adc677fd Merge pull request #872 from Artiume/patch-10
Update ISO playback warning

(cherry picked from commit 9f6ec50715)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-26 14:39:10 -04:00
dkanada
fd66c5a3fb Merge pull request #1111 from dmitrylyzo/fix-old-browser-template-string
Change template string to generic one to support older browsers
2020-04-21 13:15:24 +09:00
Dmitry Lyzo
364bbc988d Change template string to generic one to support older browsers 2020-04-20 19:04:49 +03:00
Joshua M. Boniface
51722fd225 Bump version to 10.5.4 2020-04-12 19:31:34 -04:00
Joshua M. Boniface
a158b1f85a Merge pull request #1072 from ferferga/fix-recent
Move "hide watched media" checkbox

(cherry picked from commit 6246dce320)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-12 19:31:07 -04:00
dkanada
0bb732c60a Merge pull request #1070 from redSpoutnik/subtitle-sync-subtitleOctopus
Set subtitle-sync for SubtitlesOctopus

(cherry picked from commit b311ad120e)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-12 19:31:01 -04:00
Vasily
2782127ba8 Merge pull request #1068 from jellyfin/download
Pass title and filename to native shell

(cherry picked from commit ed3b140379)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-12 19:30:59 -04:00
dkanada
6a80b4caeb Merge pull request #1049 from JustAMan/fix-ff-newline-subs
Fix newline breaks in SRT subtitles shown in Firefox

(cherry picked from commit b44c8c0c52)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-12 19:29:07 -04:00
dkanada
b2e95b0ee6 Merge pull request #1048 from JustAMan/bump-octopus
Use patched octopus that works on Cordova

(cherry picked from commit ce84ead81f)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-12 19:29:05 -04:00
Vasily
b262b98e83 Merge pull request #1047 from ZadenRB/date-added-dropdown-fix
Fix inconsistent value in drop down list on library page

(cherry picked from commit 14df43c6cb)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-12 19:27:26 -04:00
Vasily
b52cb34319 Merge pull request #1040 from JustAMan/fix-native-hls-resume
Fix native hls resume

(cherry picked from commit 2223a16813)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-12 19:26:28 -04:00
Anthony Lavado
914ef1e566 Merge pull request #963 from MrTimscampi/fix-logo-size
Don't scale logo on details page

(cherry picked from commit 64a61201d6)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-12 19:26:25 -04:00
Joshua M. Boniface
f832206145 Merge pull request #1018 from MrTimscampi/backport-octopus
Backport changes to Octopus
2020-04-05 13:01:49 -04:00
Joshua M. Boniface
46fcdf91b8 Merge pull request #1028 from ZadenRB/itemdetails-alignment
Fixed alignment of subsections on item details page

(cherry picked from commit 7215e14c39)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-05 12:58:40 -04:00
Vasily
3c953d5ffd Merge pull request #1020 from JustAMan/fix-attachment-urls
Fix attachment delivery urls

(cherry picked from commit 50122d0253)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-05 12:58:16 -04:00
Vasily
6c28570e82 Merge pull request #1005 from JustAMan/update-octopus
Switch to new version of JavascriptSubtitlesOctopus, enable new options

(cherry picked from commit b782688505)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-05 12:57:38 -04:00
Vasily
acf632e77e Merge pull request #1003 from MrTimscampi/admin-logo
Fix admin drawer logo showing up everywhere

(cherry picked from commit 9a65e0351a)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-05 12:55:32 -04:00
dkanada
44c273f531 Merge pull request #1000 from Nazar78/tizen5.0-h264-level-52
Support H264 Level 52 (Tizen 5.0)

(cherry picked from commit 4c72a8381c)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-05 12:55:02 -04:00
dkanada
ef09b24f0c Merge pull request #970 from MrTimscampi/mobile-menu
Clean up the menus on mobile

(cherry picked from commit 601b75a1a8)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-05 12:54:41 -04:00
dkanada
87bcf40e81 Merge pull request #937 from dmitrylyzo/fix_radio_style
Fix radio style

(cherry picked from commit 8a1262eedd)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-04-05 12:54:21 -04:00
Joshua M. Boniface
3cae48be23 Bump version for 10.5.3 2020-04-05 12:53:18 -04:00
MrTimscampi
ecc65dfa3b Backport changes to Octopus 2020-04-04 12:49:15 +02:00
Joshua M. Boniface
9be3f2e731 Merge pull request #969 from dmitrylyzo/tizen_xvid
Fix XviD playback on Tizen

(cherry picked from commit 31d9b35615)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-22 15:26:45 -04:00
dkanada
44c7b75dbb Merge pull request #932 from MrTimscampi/mobile-fixes
Show hamburger menu on mobile and fix title padding

(cherry picked from commit c49c45ee53)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-22 15:26:25 -04:00
dkanada
253b0d96d6 Merge pull request #904 from dmitrylyzo/fix_player_data
Clear player data after stop

(cherry picked from commit d5779e115d)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-22 15:25:53 -04:00
Joshua M. Boniface
7fb75c6d82 Bump version to 10.5.2 2020-03-22 12:09:05 -04:00
dkanada
98816bcce0 Merge pull request #958 from MrTimscampi/listview-missing
Show missing indicator in ListView

(cherry picked from commit 1688a3999c)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-22 11:52:13 -04:00
Vasily
067e43c0d3 Merge pull request #955 from thornbill/fix-schedules-direct
Fix schedules direct buttons being hidden by default

(cherry picked from commit 298e36388f)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-22 11:51:27 -04:00
dkanada
a956d602f9 Merge pull request #951 from dtparr/fixUrl
Correct the url in the wizardstart.html to remove the administrator folder

(cherry picked from commit 857ed5401e)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-22 11:50:48 -04:00
dkanada
9cf6ccc73c Merge pull request #931 from dmitrylyzo/fix_radio
Fix radiobutton and checkbox

(cherry picked from commit 9b54dec5e8)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-22 11:50:17 -04:00
dkanada
b3b9f355c3 Merge pull request #919 from dmitrylyzo/fix_icons-2
Fix icons doubling and WebOS support

(cherry picked from commit c5171a2fa0)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-22 11:49:43 -04:00
dkanada
b2d2b1360c Merge pull request #907 from MrTimscampi/artwork-optimal-size
Improve image loading speed and sizes

(cherry picked from commit bdfa8b0121)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-22 11:49:15 -04:00
dkanada
af7f626a43 Merge pull request #948 from MrTimscampi/fix-artist-backdrop
Fix artist details ribbon

(cherry picked from commit 6b22a1113e)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-15 23:11:48 -04:00
Joshua M. Boniface
5568d945a7 Merge pull request #943 from jellyfin/dependabot/npm_and_yarn/acorn-6.4.1
Bump acorn from 6.2.1 to 6.4.1

(cherry picked from commit 08919544e4)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-15 23:11:17 -04:00
dkanada
4dc5535a02 Merge pull request #936 from macr/master
Fix "Copy Stream URL" for iOS.

(cherry picked from commit 0b107b3770)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-15 23:08:49 -04:00
dkanada
b6f5435750 Merge pull request #929 from mark-monteiro/fix-networking-config
Fix Network Settings Page

(cherry picked from commit 00c01d2a4b)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-15 23:08:21 -04:00
dkanada
8db63ab520 Merge pull request #926 from ThibaultNocchi/fix_925
Fixed broken links described by #925

(cherry picked from commit 5de205e44d)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-15 23:07:57 -04:00
dkanada
527c5fb43e Merge pull request #920 from dmitrylyzo/fix_slideshow-2
Fix slideshow 2

(cherry picked from commit 95f379021e)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-15 23:07:25 -04:00
Joshua M. Boniface
9ef4e95467 Bump version to 10.5.1 2020-03-15 23:04:37 -04:00
SaddFox
9a4d992c7c Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2020-03-08 13:55:21 -04:00
SaddFox
430c44dc55 Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2020-03-08 12:49:44 -04:00
이재현
24ea7fb086 Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2020-03-08 12:49:40 -04:00
Andreas
73df9a0de8 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2020-03-08 12:49:38 -04:00
SaddFox
108c36c359 Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2020-03-08 09:01:05 -04:00
sharkykh
1eaaa0fbab Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/
2020-03-08 09:01:04 -04:00
Scott Anecito
ef0df64357 Translated using Weblate (Japanese)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ja/
2020-03-07 22:03:47 -05:00
Constantin Matel
a2a04dc6b0 Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2020-03-07 22:03:47 -05:00
sharkykh
f63f8543fa Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/
2020-03-07 22:03:46 -05:00
Tomi
bc2305696e Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2020-03-07 22:03:34 -05:00
Leo Verto
ea74e16ef6 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2020-03-07 22:03:34 -05:00
dkanada
2a99df8365 Merge pull request #898 from dmitrylyzo/fix_recording_icon
Fix icon doubling
2020-03-08 03:02:49 +09:00
Joshua M. Boniface
75bbd4c8ba Merge pull request #903 from sparky8251/reduce-osd-hide-timeout
Reduced OSD timeout from 5 seconds to 3
2020-03-07 12:20:31 -05:00
sparky8251
feacdcd1aa Reduced OSD timeout from 5 seconds to 3 2020-03-07 12:01:36 -05:00
Joshua M. Boniface
9576cd61e0 Merge pull request #897 from dmitrylyzo/fix_arrow_buttons
Fix arrow buttons in library options
2020-03-07 11:40:12 -05:00
Dmitry Lyzo
acd9fe92b8 Fix sort button icon 2020-03-07 17:40:05 +03:00
Dmitry Lyzo
dcaa87e4cb Fix brightness indicator 2020-03-07 17:23:31 +03:00
Adam Bokor
45353d2e26 Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2020-03-07 05:35:52 -05:00
Dmitry Lyzo
9bf8731a59 Move setting of the default icon before the actual one 2020-03-07 13:23:42 +03:00
Dmitry Lyzo
7cb83755e6 Fix recording button icon 2020-03-07 13:15:30 +03:00
Dmitry Lyzo
137acb23a8 Fix arrow buttons in library options 2020-03-07 12:16:18 +03:00
Marcus Schelin
a76583de60 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-03-06 21:35:26 -05:00
Dmitry Lyzo
e89d3e8cce Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2020-03-06 21:35:26 -05:00
Nutjob
f3f50ab6fa Translated using Weblate (Italian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/
2020-03-06 21:35:25 -05:00
Terrance M
156d571bd6 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2020-03-06 17:43:56 -05:00
Scott Anecito
d4cef1cf4e Translated using Weblate (Japanese)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ja/
2020-03-06 14:45:56 -05:00
nextlooper42
6dd0d3b361 Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2020-03-06 14:45:55 -05:00
WWWesten
45db8f6e70 Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2020-03-06 14:45:54 -05:00
WWWesten
ae35618875 Translated using Weblate (Kazakh)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2020-03-06 14:45:54 -05:00
adi martha
cb3efea457 Translated using Weblate (Indonesian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/id/
2020-03-06 14:45:53 -05:00
TheGoose
df19087f7c Translated using Weblate (English (United Kingdom))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/
2020-03-06 14:45:53 -05:00
dkanada
94da80c494 Merge pull request #890 from shemanaev/patch-1
Fix itemdetails poster overlapping now playing bar
2020-03-06 22:08:01 +09:00
Denis
cd33c8c52c Fix itemdetails poster overlapping now playing bar 2020-03-06 14:04:29 +03:00
Joshua Boniface
ef624fb6f7 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2020-03-05 22:26:44 -05:00
dkanada
0a542d5a62 Merge pull request #884 from ferferga/padding-fixes
Fix padding in itemdetails' selectors
2020-03-05 17:41:50 +09:00
ferferga
c8cb5c2de3 Removed left margin 2020-03-05 09:30:47 +01:00
ferferga
21a3db2374 Removed testing leftover 2020-03-05 09:24:02 +01:00
ferferga
da9c811350 Fix lint 2020-03-05 09:18:52 +01:00
ferferga
67554037db Moved to classes 2020-03-05 09:03:45 +01:00
dkanada
62f5d40cc0 Merge pull request #883 from MrTimscampi/clutch-tabs-fix
Fix tabs hopping
2020-03-05 15:57:52 +09:00
dkanada
40f6ad3040 Merge pull request #885 from thornbill/inconstructable
Fix editing other user settings
2020-03-05 15:57:21 +09:00
Bill Thornton
ea8007428e Fix editing other user settings 2020-03-05 00:04:41 -05:00
ferferga
ac255e0593 Fix padding in itemdetails 2020-03-04 23:24:30 +01:00
MrTimscampi
acea76b450 Fix tabs hopping 2020-03-04 20:37:22 +01:00
Anthony Lavado
1bcd33e011 Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2020-03-04 13:53:05 -05:00
Vasily
4e9a2e2064 Merge pull request #801 from dkanada/strings
Update some strings
2020-03-04 21:24:33 +03:00
dkanada
2aa07e1a37 Merge pull request #882 from thornbill/safety-first
Add check for undefined elem in renderRecordings
2020-03-05 02:56:58 +09:00
dkanada
a80f5e50e7 translate media type string 2020-03-05 02:52:53 +09:00
dkanada
36e5f23266 Merge pull request #881 from ferferga/hoverbuttons
Fix for incorrect button positioning when hovering card
2020-03-05 02:49:26 +09:00
ferferga
0a9f26b141 Removed align-items 2020-03-04 18:44:25 +01:00
Bill Thornton
2b817073d8 Add check for undefined elem in renderRecordings 2020-03-04 12:42:45 -05:00
dkanada
36a26e698d improve transcode error message 2020-03-05 02:40:43 +09:00
ferferga
2915de6e0e Merge remote-tracking branch 'upstream/master' into hoverbuttons 2020-03-04 17:32:55 +01:00
Fernando
5838fc7da0 Fix for incorrect button positioning when hovering card 2020-03-04 16:59:42 +01:00
Bond-009
4dd09a0586 Merge pull request #880 from thornbill/stuck-in-the-middle
Fix text centering on multi-line titles
2020-03-04 16:51:29 +01:00
Bill Thornton
d2e2f83e14 Fix text centering on multi-line titles 2020-03-04 10:27:49 -05:00
dkanada
44e8e462a1 Merge pull request #878 from nyanmisaka/mobilebackdrop
Fix unsuitable backdrop on mobile
2020-03-04 20:49:35 +09:00
Nyanmisaka
af8088d25b fix unsuitable backdrop on mobile 2020-03-04 19:13:29 +08:00
Nyanmisaka
4d66c53263 Merge pull request #1 from jellyfin/master 2020-03-04 18:45:43 +08:00
dkanada
a44a9c0d7a Merge pull request #823 from MrTimscampi/details-rework
Details page artwork ribbon revamp
2020-03-04 16:23:36 +09:00
dkanada
9e459e3a29 Merge pull request #876 from JustAMan/pedal-to-the-metal
Expose option to turn on/off transcode throttling
2020-03-04 15:11:24 +09:00
MrTimscampi
7f019dfffb Fix one pixel issue on detials and add fixme 2020-03-03 19:39:05 +01:00
dkanada
4cedbc1c89 Merge pull request #746 from ferferga/servernotifications-fixes
Load gamepadtokey.js only when is necessary
2020-03-04 02:08:19 +09:00
ferferga
c8836c61f3 Function rename 2020-03-03 17:56:59 +01:00
Vasily
f094b68159 Merge pull request #877 from JustAMan/fix-checkbox
Stop checkbox showing a checkmark when unchecked
2020-03-03 19:51:54 +03:00
Vasily
15425175fc Implement code review suggestion 2020-03-03 19:51:20 +03:00
Vasily
3d4590b292 Try make lint happy 2020-03-03 19:48:13 +03:00
Vasily
e7fa3eae9d Stop checkbox showing a checkmark when unchecked 2020-03-03 19:43:01 +03:00
Vasily
318dbd9da1 Merge pull request #875 from JustAMan/oh-my-noncenter-eyes
Make card buttons be positioned properly
2020-03-03 19:19:39 +03:00
Vasily
264e0163ff Expose option to turn on/off transcode throttling 2020-03-03 19:09:33 +03:00
Vasily
5f5b0185b5 Make sure display property is set for card buttons regarding of loading order 2020-03-03 17:24:35 +03:00
Julien Machiels
8a69092106 Clarify return statement in itemdetailpage
Co-Authored-By: Vasily <JustAMan@users.noreply.github.com>
2020-03-03 13:31:57 +01:00
Vasily
9162f53b98 Merge pull request #874 from MrTimscampi/octopus
Use forked version of JavascriptSubtitlesOctopus
2020-03-03 14:32:06 +03:00
nextlooper42
1f6c140413 Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2020-03-03 05:25:03 -05:00
aschi2403
1e1b868882 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2020-03-03 01:01:59 -05:00
Adam Bokor
7de575b6c5 Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2020-03-02 14:16:27 -05:00
MrTimscampi
b1d1cee634 Use forked version of JavascriptSubtitlesOctopus
The fork contains an asm.js compatibility patch that we need for older client. This commit switched to using our forked version while we wait for an upstream merge.
2020-03-02 19:54:29 +01:00
Nyanmisaka
29232ac727 Translated using Weblate (English)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en/
2020-03-02 08:05:15 -05:00
Nyanmisaka
0e6ddc34b4 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2020-03-02 08:05:14 -05:00
Nyanmisaka
cb55e1a825 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2020-03-02 01:11:29 -05:00
MrTimscampi
a98b99850e Remove dead code 2020-03-01 15:33:41 +01:00
dkanada
7eee7d0d44 add generic restart warning 2020-03-01 23:15:40 +09:00
dkanada
42649af9f7 Merge pull request #866 from sorinyo2004/patch-1
Fix hover buttons layout on portraitCard
2020-03-01 22:49:52 +09:00
Vitorvlv
36abdf9349 Translated using Weblate (Portuguese (Brazil))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2020-03-01 02:28:50 -05:00
ferferga
3310d5b239 Fix for Firefox 2020-02-29 22:44:08 +01:00
Ignatius Bagus
ef97bdd9af Translated using Weblate (Indonesian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/id/
2020-02-29 15:49:16 -05:00
Václav Luňák
cac592ce13 Translated using Weblate (Czech)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2020-02-29 15:49:16 -05:00
MrTimscampi
6f35d6696e Fix linting issues 2020-02-29 21:38:07 +01:00
MrTimscampi
e6034e9bf2 Fix leftover green in themes 2020-02-29 20:47:05 +01:00
MrTimscampi
57bc5e5ee4 Fix noBackdrop pages 2020-02-29 20:47:05 +01:00
MrTimscampi
94cdd38de1 Changes to details page layout 2020-02-29 20:47:05 +01:00
MrTimscampi
4fdab1e8b6 Hide details page artwork if disabled by user 2020-02-29 20:46:32 +01:00
sorinyo2004
89d340e86f Fix hover buttons layout on portraitCard
In the collection screen, the hover buttons for movies was not inline (on a 1080 screen).
I have reduced the padding by 0.05 em on the cardOverlayButton-hover so the icons will fit on one line at the bottom of the postcard
2020-02-29 15:55:28 +02:00
Adam Bokor
d1e482946f Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2020-02-29 06:29:18 -05:00
Adam Bokor
0b95302e4c Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2020-02-29 04:10:16 -05:00
Nyanmisaka
e5dcd1031a Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2020-02-28 13:12:31 -05:00
Trí Nguyễn
c0ac5a3256 Translated using Weblate (Vietnamese)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/
2020-02-28 13:12:30 -05:00
ferferga
1f7b41e303 Fire input loop 2020-02-28 17:30:52 +01:00
ferferga
9c84b8268f Handle gamepads more gracefully based in window focus 2020-02-28 17:19:03 +01:00
ferferga
440675fbee Apply suggestions 2020-02-28 13:51:41 +01:00
ferferga
8a200e54af Final overhaul to gamepad handling 2020-02-28 10:09:46 +01:00
ferferga
04a3505672 Merge remote-tracking branch 'upstream/master' into servernotifications-fixes 2020-02-28 10:07:10 +01:00
Vincent Phan
7e369da67b Translated using Weblate (Vietnamese)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/
2020-02-26 12:11:28 -05:00
sharkykh
ac50a0b196 Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/
2020-02-26 12:11:28 -05:00
dkanada
e5a978feeb Merge pull request #856 from thornbill/lint-licker
Add eslint:recommended to eslint config
2020-02-27 01:26:00 +09:00
dkanada
d0dafcc266 Merge pull request #844 from thornbill/they-see-me-scrolling
Fix horizontal scrolling on emby-scrollers
2020-02-27 01:17:12 +09:00
dkanada
1914593eaa Merge pull request #860 from thornbill/fix-no-promises
Fix browsers that do not support Promises
2020-02-27 01:14:59 +09:00
Bill Thornton
8cdeaa8190 Remove questionable code 2020-02-26 10:51:34 -05:00
Bill Thornton
6f0b735b3d Fix inverted logic 2020-02-26 10:50:41 -05:00
Bill Thornton
15ef6bf945 Add missing semicolon warning 2020-02-26 10:49:53 -05:00
Bill Thornton
c46c6c2203 Fix browsers that do not support Promises 2020-02-26 10:29:52 -05:00
dkanada
89a5c2d590 Merge pull request #811 from grafixeyehero/nowplaying-tvmode
Fix nowplaying  for tv mode
2020-02-26 19:19:32 +09:00
dkanada
ee506b82c3 Merge pull request #846 from dmitrylyzo/fix_slideshow
Fix slideshow
2020-02-26 19:06:26 +09:00
dkanada
f888dcd744 Merge pull request #843 from grafixeyehero/webos-icon-fix
Webos icon fix
2020-02-26 18:02:56 +09:00
Bill Thornton
33bbd40174 Fix errors in cardBuilder 2020-02-26 02:26:18 -05:00
Bill Thornton
ce2fdc9df2 Fix errors in chromecasthelpers 2020-02-26 02:03:21 -05:00
Bill Thornton
6acff39055 Remove dead code 2020-02-26 02:00:13 -05:00
Bill Thornton
4c297573f1 Fix errors in htmlvideoplayer plugin 2020-02-26 01:58:15 -05:00
Bill Thornton
210e241c77 Suppress conditional assignment error in humanedate lib 2020-02-26 01:42:05 -05:00
Bill Thornton
29e7c4775b Fix undefined type in libraryoptionseditor 2020-02-26 01:39:40 -05:00
Bill Thornton
b30469654f Suppress no-control-regex in sanitizefilename 2020-02-26 01:39:10 -05:00
Bill Thornton
75ac5ed8b2 Suppress getter-return errors in compatibility tests 2020-02-26 01:23:28 -05:00
Bill Thornton
23c3536ace Suppress fallthrough error in subtitlesync 2020-02-26 01:12:48 -05:00
Bill Thornton
f12e24b1cb Fix undefined variables in tunerpicker 2020-02-26 01:07:23 -05:00
Bill Thornton
75b7afd531 Fix references to removed renderHasPendingRestart function 2020-02-26 01:01:21 -05:00
Bill Thornton
36224ce5f7 Fix undefined globalize error 2020-02-26 00:48:41 -05:00
Bill Thornton
45acf52548 Fix errors in itemdetailpage 2020-02-26 00:46:56 -05:00
Bill Thornton
335dc4eff4 Remove dead code 2020-02-26 00:42:58 -05:00
Bill Thornton
fb2fe462df Fix redundant double negation errors 2020-02-26 00:19:04 -05:00
Bill Thornton
f7997d5270 Add eslint:recommended and update rules and globals 2020-02-25 18:33:38 -05:00
이재현
8a1c7fb6f0 Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2020-02-25 18:29:16 -05:00
sharkykh
fbf675f919 Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/
2020-02-25 18:29:15 -05:00
Bill Thornton
3fd2a2b59d Remove IE8 support 2020-02-25 15:25:35 -05:00
Joshua M. Boniface
c4c3078e06 Merge pull request #854 from dmitrylyzo/fix-1
Fix variable reference
2020-02-25 14:25:36 -05:00
Dmitry Lyzo
911017a5df Fix variable reference 2020-02-25 21:27:17 +03:00
dkanada
b3da19a596 Merge pull request #816 from MrTimscampi/quiet
Make the console quieter by default
2020-02-25 22:45:26 +09:00
dkanada
9091284b78 uncomment one last line 2020-02-25 22:31:54 +09:00
dkanada
7d558dbc7e Merge pull request #849 from dkanada/error
Catch some errors and remove unused method
2020-02-25 22:28:05 +09:00
MOLOKAL
92cd838633 Translated using Weblate (Malay)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ms/
2020-02-25 07:10:01 -05:00
WWWesten
cd1f5512e3 Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2020-02-24 13:40:43 -05:00
4d1m
494558f7dd Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2020-02-24 13:40:42 -05:00
WWWesten
ac589eb922 Translated using Weblate (Kazakh)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2020-02-24 13:40:41 -05:00
dkanada
f60e396908 catch some errors and remove unused method 2020-02-24 22:25:08 +09:00
David Martins da Conceição
c87c6cb52a Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: http://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2020-02-23 23:40:20 -05:00
Daniel De Jesus
6924d082f5 Translated using Weblate (Spanish (Dominican Republic))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_DO/
2020-02-23 11:18:20 -05:00
Bond-009
1540e02146 Merge pull request #845 from thornbill/no-more-es6
Remove es6 env until babel is added
2020-02-23 14:36:53 +01:00
Dmitry Lyzo
baea3593a5 Sync button state with actual autoplay state 2020-02-23 11:48:01 +03:00
dkanada
a9be94a803 uncomment all log statements 2020-02-23 17:23:20 +09:00
Dmitry Lyzo
a87c4d97a0 Fix slideshow start/stop 2020-02-23 10:52:03 +03:00
Bill Thornton
4268a01e30 Remove es6 env until babel is added 2020-02-23 01:43:03 -05:00
Bill Thornton
5fb2c8bd82 Fix horizontal scrolling on emby-scrollers 2020-02-23 01:31:24 -05:00
dkanada
6d71fd9772 Merge pull request #838 from h1nk/master
Add missing final newlines
2020-02-23 10:39:15 +09:00
grafixeyehero
b20bd4d4b9 Fix 2 speakers icons 2020-02-23 02:40:08 +03:00
grafixeyehero
de28101f66 Fix 2 speakers icons next to volume slider #841 2020-02-23 02:32:44 +03:00
grafixeyehero
25f3be7e70 move underscore Icon to class 2020-02-23 01:47:17 +03:00
grafixeyehero
4b99f00552 move underscore Icon to class 2020-02-23 01:22:55 +03:00
Andreas Olsson
9334e1babe Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-02-22 17:18:15 -05:00
Adam Bokor
a75d37390e Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2020-02-22 17:18:14 -05:00
h1nk
a26091a165 Enforce final newlines in ESLint
See: https://github.com/jellyfin/jellyfin-web/pull/838#issuecomment-589933845
2020-02-22 11:55:57 -05:00
h1nk
598402d953 Add missing final newlines
Used this one-liner: https://unix.stackexchange.com/a/161853
2020-02-22 11:47:03 -05:00
Åskar Andersson
519ca6ba0b Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-02-22 05:06:45 -05:00
Andreas Olsson
ac02fb2d23 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-02-22 05:06:36 -05:00
Anders Bengtsson
a57e9c4f40 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-02-22 05:06:36 -05:00
Jonas Lundberg
a897460d8b Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-02-22 05:06:36 -05:00
Andreas Olsson
c762d32040 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-02-22 04:59:06 -05:00
Grasfer
6de77f364b Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-02-22 04:58:26 -05:00
Åskar Andersson
5ff1eb9801 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-02-22 04:58:25 -05:00
Andreas Olsson
bfb2b618ef Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-02-22 04:58:25 -05:00
Anders Bengtsson
ff914d715e Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-02-22 04:58:25 -05:00
Jonas Lundberg
10891bf6e2 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-02-22 04:56:20 -05:00
Anders Bengtsson
73f625ee02 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-02-22 04:56:20 -05:00
Andreas Olsson
cfafd519e8 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-02-22 04:56:20 -05:00
SleepyJesse
78a2760092 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2020-02-22 01:18:34 -05:00
Vincent Phan
b1065db0af Translated using Weblate (Vietnamese)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/
2020-02-22 01:18:34 -05:00
Andreas Olsson
b488656814 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-02-22 01:18:29 -05:00
nextlooper42
813693fd89 Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2020-02-22 01:18:27 -05:00
Saksol
99f5818a6c Translated using Weblate (Icelandic)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/is/
2020-02-22 01:18:27 -05:00
S1ckn3z
f7d383f76a Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2020-02-22 01:18:12 -05:00
grafixeyehero
a12da2309f apply suggustion change 2020-02-20 19:46:34 +03:00
dkanada
b377878fd3 Merge pull request #831 from nyanmisaka/high10
Mark h264 high10 as unsupported on mobile browsers
2020-02-21 00:05:57 +09:00
dkanada
2d41eb769f Merge pull request #834 from YouKnowBlom/fix-webos-support
Fix webOS support in videoosd.js and homesection.js
2020-02-20 21:17:47 +09:00
Andreas B
87a4f39844 Fix webOS support in videoosd.js and homesection.js 2020-02-20 11:23:08 +01:00
Nyanmisaka
a1f6db48b1 h264 high10 is not supported on mobile browsers 2020-02-20 17:38:22 +08:00
Alexander Brissman
c85e5ec48b Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2020-02-20 00:18:08 -05:00
dkanada
b3fa02cbc1 Merge pull request #787 from YouKnowBlom/player-pause-fix
Add delay on play/pause to prevent hiccup when entering/exiting fullscreen
2020-02-20 14:04:57 +09:00
dkanada
3b5a63f930 Merge pull request #814 from MrTimscampi/webos-icons
Fix icons on WebOS 4
2020-02-20 14:03:08 +09:00
Andreas B
6b2faaed8d fix linting errors 2020-02-19 16:54:55 +01:00
Andreas B
f52075eb26 Remove unnecessary check when clearing playPauseClickTimeout 2020-02-19 16:09:00 +01:00
Andreas B
41ea428237 Rename and move declaration of playerPauseClickTimeout 2020-02-19 16:07:06 +01:00
dkanada
9f42297077 Merge pull request #812 from dmitrylyzo/perfect_slider-2
Enhance volume slider
2020-02-19 23:49:38 +09:00
Daniel De Jesus
c3f518a4c4 Translated using Weblate (Spanish (Dominican Republic))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_DO/
2020-02-19 09:43:03 -05:00
SleepyJesse
17d931035e Translated using Weblate (Chinese (Traditional))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2020-02-19 09:43:03 -05:00
SleepyJesse
ac46dbe3ac Translated using Weblate (Chinese (Hong Kong))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/
2020-02-19 09:43:03 -05:00
SleepyJesse
5159d851ca Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2020-02-19 09:43:03 -05:00
nextlooper42
fb29a45087 Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2020-02-19 09:43:03 -05:00
lelamamalgache
af80b62376 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2020-02-19 09:43:03 -05:00
Philmo67
80c2fe2318 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2020-02-19 09:43:03 -05:00
Andreas B
805394d9a3 Add a message to home when no libraries have been created (#798)
* Add a prompt to home when no libraries exist

Resolves: #642

* Replace let with var in homesection.js

* Use centerMessage class in "no library" prompt

* Fix invalid closing tag

* Change \"no library\" prompt description for admins
2020-02-19 23:42:48 +09:00
Dmitry Lyzo
bafac46a33 Merge remote-tracking branch 'upstream/master' into perfect_slider-2 2020-02-19 11:11:32 +03:00
Dmitry Lyzo
4ea3b98c27 Extract setVolume/setVolumeDelayed 2020-02-19 11:10:12 +03:00
dkanada
7e6cbe685c Merge pull request #818 from dmitrylyzo/fix_focusscale
Fix cropping of scaled card (TV layout)
2020-02-19 16:45:00 +09:00
Daniel De Jesus
4be2aed45c Added translation using Weblate (Spanish (Dominican Republic)) 2020-02-18 21:54:46 -05:00
grafixeyehero
2d509e9fb6 apply suggestion make focus 2020-02-19 02:11:29 +03:00
grafixeyehero
7e58b448cd apply suggestion make position slider navigable by keyboard 2020-02-19 02:10:40 +03:00
Vasily
c3c0f6f3c6 Merge pull request #828 from Nickbert7/patch-1
Fix dashboard padding
2020-02-18 19:12:17 +03:00
4d1m
2cd1edda3b Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2020-02-18 10:49:32 -05:00
dkanada
dd5ec11ded Merge pull request #775 from joshuaboniface/acceleration-message
Alter hardware acceleration message
2020-02-19 00:49:23 +09:00
Niklas Fäth
b8c90dcc7f Fix dashboard padding 2020-02-18 16:46:17 +01:00
nextlooper42
5a1f3c1614 Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2020-02-18 01:18:09 -05:00
Alexander Brissman
5256f98c94 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2020-02-18 01:18:09 -05:00
zibius1
e125ad7057 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2020-02-18 01:18:08 -05:00
TheGoose
a77b281a95 Translated using Weblate (English (United Kingdom))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/
2020-02-18 01:18:06 -05:00
NeroBurner
62c580f249 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2020-02-18 01:18:05 -05:00
dkanada
1eef18c0f1 add link back to acceleration description 2020-02-18 14:28:36 +09:00
dkanada
5aae08cab9 change string 2020-02-18 14:23:42 +09:00
dkanada
a68b0baa74 Merge pull request #819 from dmitrylyzo/fix_scrollmanager
Disable scrollManager on emby-scroller in "native mode"
2020-02-18 14:16:21 +09:00
Dmitry Lyzo
bd596777aa Fix slider update by touch on iPhone/iPad (#807) 2020-02-18 14:13:49 +09:00
MrTimscampi
f1fb59ec26 Fix change requests and general formatting improvements 2020-02-17 20:41:04 +01:00
Jared Allard
cb48def4ae Translated using Weblate (Japanese)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ja/
2020-02-16 19:18:04 -05:00
tokiedokie
04c5f4bfdd Translated using Weblate (Japanese)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ja/
2020-02-16 19:18:04 -05:00
Adam Bokor
485549fedf Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2020-02-16 19:18:03 -05:00
Tuomo Björk
c354e16b52 Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2020-02-16 19:18:03 -05:00
Dmitry Lyzo
6ad85b3c45 Disable scrollManager on emby-scroller 2020-02-16 22:08:08 +03:00
Dmitry Lyzo
07268df35a Simplify expression 2020-02-16 22:06:37 +03:00
Dmitry Lyzo
54fdd34f77 Fix padding for plain itemscontainer 2020-02-16 17:42:00 +03:00
Tuomo Björk
7a9fbb3edf Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2020-02-16 06:24:38 -05:00
Kaspar Laineste
ac9807d93a Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2020-02-16 06:24:37 -05:00
Tuomo Björk
bf2caf5957 Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2020-02-16 06:22:49 -05:00
Kaspar Laineste
fb5adbce2d Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2020-02-16 06:22:49 -05:00
Tuomo Björk
a491c6b832 Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2020-02-16 06:22:11 -05:00
Kaspar Laineste
bef1747c3f Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2020-02-16 06:22:11 -05:00
Tuomo Björk
479fe2c889 Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2020-02-16 06:18:22 -05:00
Kaspar Laineste
df81f33360 Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2020-02-16 06:18:21 -05:00
MrTimscampi
e12e6731b2 Make the console quieter by default 2020-02-16 04:22:50 +01:00
Julien Machiels
e5343cada8 Fix Swiper on WebOS by importing ES5 version (#806) 2020-02-16 10:52:30 +09:00
tokiedokie
2557ec8fd3 Translated using Weblate (Japanese)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ja/
2020-02-15 20:48:05 -05:00
artiume
75fc964b9e Force Transcoding for LiveTv Capability (#636)
* Update useredit.html

* Update useredit.js

* Update en-us.json

* Update en-us.json

* Update useredit.js

* fix TV Shows to Square Tiles

* Update homesections.js

* Update src/strings/en-us.json

Co-Authored-By: Vasily <JustAMan@users.noreply.github.com>

Co-authored-by: Vasily <JustAMan@users.noreply.github.com>
2020-02-16 10:48:01 +09:00
dkanada
18aa3e31e0 Merge pull request #813 from MrTimscampi/icons
Add more icon types
2020-02-16 10:45:59 +09:00
MrTimscampi
ce959724af Add photo album type indicator 2020-02-16 02:34:40 +01:00
MrTimscampi
32663bee2e Fix details page poster placeholder icon size 2020-02-16 02:08:17 +01:00
MrTimscampi
229785b908 Fix more icons on WebOS 2020-02-16 01:53:29 +01:00
MrTimscampi
60f990052f Fix icon ligatures on older WebOS versions 2020-02-16 01:43:38 +01:00
MrTimscampi
a98b961b94 Fix icons on WebOS
WebOS 4 apparently has a ligature bug that prevents icons with an underscore from working as intended.
This replaces them with either the corresponding CSS class or unicode escape code, depending on context.
Refactoring is needed in order to be able to use CSS classes everywhere, so in the interest of time, this does the best available currently.

Fixes #678
2020-02-16 01:33:34 +01:00
Adam Bokor
23b4dfc8fa Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2020-02-15 18:18:00 -05:00
MrTimscampi
52ad0febe0 Fix details page ribbon position in TV layout 2020-02-15 22:34:10 +01:00
MrTimscampi
a47214bbb9 Add book and folder icons to cards 2020-02-15 22:15:17 +01:00
grafixeyehero
0e506a24b1 fix padding for tv mode 2020-02-15 19:24:36 +03:00
Dmitry Lyzo
ad0b67d2f6 Make delayed volume update 2020-02-15 18:37:31 +03:00
Dmitry Lyzo
bb1ba5a29e Make configurable slider progress bar update 2020-02-15 18:36:52 +03:00
4d1m
990e0de950 Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2020-02-14 22:50:26 -05:00
Adam Bokor
c9685d6614 Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2020-02-14 22:50:25 -05:00
grafixeyehero
dec26f6c0e Fix nowplaying for tv mode 2020-02-15 03:47:07 +03:00
dkanada
92d14bed85 Merge pull request #786 from dmitrylyzo/perfect_slider
Fix slider positioning on click and (try to) make it look the same in different browsers
2020-02-15 01:12:40 +09:00
dkanada
36118b926b add missing string 2020-02-14 23:24:38 +09:00
Vasily
85a6a444fe Merge pull request #797 from dkanada/style
Fix some minor style issues
2020-02-14 14:21:02 +03:00
nextlooper42
fe228a867e Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2020-02-14 03:18:00 -05:00
Dmitry Lyzo
798a679842 Fix slider update by touch on iPhone/iPad 2020-02-14 00:34:57 +03:00
Dmitry Lyzo
a0fa065667 Fix slider calculations for common case 2020-02-13 23:40:51 +03:00
Dmitry Lyzo
91c8776fbd Scale on hover with 'hoverthumb' style only 2020-02-13 23:15:01 +03:00
Nyanmisaka
5e84544c16 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2020-02-13 14:59:18 -05:00
dkanada
4c4f8ff800 fix some minor style issues 2020-02-14 03:17:39 +09:00
Vasily
8b1a23a56b Merge pull request #781 from MrTimscampi/poster-size
Tweak poster size on home screen
2020-02-13 13:02:38 +03:00
Dmitry Lyzo
dc95a76e10 Fix vertical position of slider progress bar 2020-02-13 12:43:00 +03:00
Dmitry Lyzo
f68f3634c0 Remove 'supportsNativeProgressStyle' in favor of buffer progress 2020-02-13 12:21:01 +03:00
Dmitry Lyzo
e13e6f38d5 Limit slider bubble position to its track 2020-02-13 11:50:22 +03:00
dkanada
c62976845e Merge pull request #755 from dmitrylyzo/native_select_server
Add server select support for NativeShell
2020-02-13 16:48:58 +09:00
Dmitry Lyzo
c4824abfb0 Make a style transition like a button 2020-02-13 09:37:12 +03:00
Dmitry Lyzo
7faa4dab2b Remove unused CSS 2020-02-13 09:11:05 +03:00
Adam Bokor
417e4bd12e Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2020-02-13 00:17:59 -05:00
Andreas B
6374802309 Fix linting errors in videoosd 2020-02-12 13:37:40 +01:00
dkanada
4acd0525dc Merge pull request #779 from MrTimscampi/list-actions
Fix action icons in lists wrapping to multiple lines
2020-02-12 21:01:49 +09:00
dkanada
077b682149 Merge pull request #785 from MrTimscampi/tomato
Update Rotten Tomatoes icons
2020-02-12 20:52:50 +09:00
Dmitry Lyzo
91631f266d Fix progress bar position on WebOS 3 2020-02-12 14:49:07 +03:00
Dmitry Lyzo
c6835f9c41 Make slider in Firefox same as in Chrome 2020-02-12 14:49:07 +03:00
Dmitry Lyzo
cc84fce75b Make slider in Edge same as in Chrome 2020-02-12 14:49:07 +03:00
Dmitry Lyzo
40c7dad241 Resize progress bar to slider range 2020-02-12 14:49:07 +03:00
Dmitry Lyzo
20a20ff9d1 Fix slider bubble position 2020-02-12 14:49:07 +03:00
Dmitry Lyzo
c44b94a7b7 Fix font size 2020-02-12 14:49:07 +03:00
Dmitry Lyzo
fe23ede57b Pass pointer events bypassing the slider thumb 2020-02-12 14:49:07 +03:00
Vasily
59b1ec6431 Merge pull request #747 from MrTimscampi/details-placeholder
Add placeholder image to detail pages and more placeholder icons
2020-02-12 14:23:09 +03:00
MrTimscampi
0b779d2fb5 Fix linting 2020-02-12 09:37:39 +01:00
ido1990
220bbb50a8 Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/
2020-02-12 03:17:53 -05:00
MrTimscampi
1f91034aa9 Merge remote-tracking branch 'upstream/master' into details-placeholder 2020-02-12 09:10:42 +01:00
j7johnny
be23d14f48 Translated using Weblate (Chinese (Traditional))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2020-02-11 12:17:57 -05:00
Alexander Brissman
8c81ce4a42 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2020-02-11 12:17:57 -05:00
Johan
b04b52d599 Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2020-02-11 12:17:56 -05:00
David
0a6de37929 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2020-02-11 12:17:53 -05:00
dkanada
7e3609407c Merge pull request #778 from MrTimscampi/ratings
Force ratings to 1 decimal place
2020-02-11 03:47:22 +09:00
dkanada
c78a242f09 Merge pull request #769 from dannymichel/patch-5
Fix detail page
2020-02-11 03:46:16 +09:00
dkanada
737c2f29be Merge pull request #784 from nyanmisaka/logo
Fix device icons for Safari and Android browsers
2020-02-11 03:43:46 +09:00
dkanada
22d1d69a2e Merge pull request #788 from nyanmisaka/mobilefix
Fix detail page title on mobile layout
2020-02-11 03:41:51 +09:00
dkanada
cb938d55de Merge pull request #783 from MrTimscampi/dependencies-update
Update dependencies
2020-02-11 03:41:24 +09:00
Nyanmisaka
0a4eec4110 Translated using Weblate (Chinese (Traditional))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2020-02-10 02:17:53 -05:00
Nyanmisaka
99dcafa45f Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2020-02-10 02:17:53 -05:00
Libor Filípek
fbb6e673a8 Translated using Weblate (Czech)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2020-02-10 02:17:52 -05:00
Nyanmisaka
58cb50a2d6 fix detail page title on mobile devices 2020-02-10 01:05:45 +08:00
Andreas B
1225800e7e Add delay on play/pause to prevent hiccup when entering fullscreen
Resolves: #589
2020-02-09 16:26:55 +01:00
MrTimscampi
a9833ba398 Update Rotten Tomatoes icons 2020-02-09 15:17:30 +01:00
nyanmisaka
726a949514 fix device icons for Safari and Android 2020-02-09 21:36:42 +08:00
Nyanmisaka
4fc39ff94c Merge pull request #4 from jellyfin/master
merge
2020-02-09 20:47:25 +08:00
MrTimscampi
1250c04c38 Update dependencies 2020-02-09 13:39:19 +01:00
Anthony Lavado
0d0f210c6a Merge pull request #754 from ThibaultNocchi/copy_url_firefox_fix
Clipboard API & fallback method to copy stream URL
2020-02-09 03:07:24 -05:00
Anthony Lavado
ec2cad0c8d Merge pull request #773 from dkanada/style
Minor theme changes and tweak session cards on dashboard
2020-02-09 03:05:14 -05:00
dkanada
34b7c65090 Merge pull request #770 from dmitrylyzo/disable_keyboard_nontv
Disable keyboard navigation for non-TV
2020-02-09 16:59:51 +09:00
dkanada
1ece06e12a Merge pull request #764 from thornbill/device-images
Fix device images on main dashboard page
2020-02-09 16:57:35 +09:00
dkanada
e70628c890 Merge pull request #735 from ferferga/font-family
Change font family
2020-02-09 16:56:58 +09:00
dkanada
5271ad8137 Merge pull request #758 from dannymichel/patch-2
Fix padding in header
2020-02-09 16:48:22 +09:00
Tommy Vange
6c68d37e99 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2020-02-09 02:17:49 -05:00
Pooka Mustard
446f10a989 Translated using Weblate (Arabic)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/
2020-02-09 02:17:48 -05:00
MrTimscampi
68ddf19605 Tweak poster size on home screen 2020-02-09 01:59:52 +01:00
MrTimscampi
4965e31737 Fix action icons in lists wrapping to multiple lines 2020-02-08 23:54:20 +01:00
MrTimscampi
55d902b71a Force ratings to 1 decimal place 2020-02-08 23:41:40 +01:00
Danny Michel
5e47ca1a17 Change details page ribbon margin to em 2020-02-08 22:06:51 +01:00
Anthony Lavado
0f31f8a261 Merge pull request #759 from dannymichel/patch-3
Fix logo page margin
2020-02-08 15:54:10 -05:00
MrTimscampi
9580732c9f Fix linting issue 2020-02-08 21:51:58 +01:00
Danny Michel
07d3e16ff5 Fix padding in header 2020-02-08 21:48:08 +01:00
Danny Michel
8b8f84bd42 Fix logo page margin 2020-02-08 21:22:16 +01:00
Thibault Nocchi
1448ce1199 No success toast when copying URL from prompt 2020-02-08 11:14:24 +01:00
diegoalrey
3b82d9f438 Translated using Weblate (Galician)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/gl/
2020-02-08 04:17:52 -05:00
WWWesten
6902ec9b4c Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2020-02-08 04:17:51 -05:00
WWWesten
8689e4965f Translated using Weblate (Kazakh)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2020-02-08 04:17:51 -05:00
The Iiseppi
90bd682334 Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2020-02-08 04:17:50 -05:00
dkanada
af4e76b4e7 Merge pull request #772 from dmitrylyzo/logoscreensaver-fix
Fix logoscreensaver image path
2020-02-08 00:08:27 +09:00
ferferga
f8c544c1cf Fix lint 2020-02-07 14:35:31 +01:00
ferferga
145324a209 Removed logs for testing and changed attempt 2020-02-07 14:32:45 +01:00
Dmitry Lyzo
bf55c427a5 Remove unused logo image 2020-02-07 09:03:49 +03:00
Joshua M. Boniface
3a9de3f709 Alter hardware acceleration message
Don't say this is "experimental" since it's not. Mention the
documentation on configuring hardware acceleration and that it requires
additional configuration.
2020-02-07 00:26:46 -05:00
dkanada
bf4207cc36 Merge pull request #762 from MrTimscampi/details-ribbon-margin
Adjust details page ribbon margins and colors
2020-02-07 11:58:03 +09:00
ferferga
417e7dae88 Removed unnecessary check 2020-02-06 20:06:57 +01:00
ferferga
1619646f0a Default font family now is Noto Sans. Linked to jellyfin-noto package 2020-02-06 16:51:42 +01:00
Nyanmisaka
1e202d1271 Merge pull request #3 from jellyfin/master
merge
2020-02-06 20:39:38 +08:00
dkanada
1b23895e81 fix placeholder message style 2020-02-06 03:14:17 +09:00
dkanada
532d73a80b minor theme changes 2020-02-06 00:13:11 +09:00
dkanada
ca06c47b55 Merge pull request #763 from thornbill/custom-css
Fix custom css precedence
2020-02-06 00:06:51 +09:00
nextlooper42
c706a09c53 Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2020-02-05 10:05:32 -05:00
dkanada
a9ace59451 Merge pull request #767 from nyanmisaka/master
Fix encoder preset option not working
2020-02-06 00:05:25 +09:00
Dmitry Lyzo
8ac0cde29e Fix logoscreensaver image path 2020-02-05 17:58:11 +03:00
ferferga
2b4cf6f5b7 Fix lint 2020-02-05 14:17:03 +01:00
ferferga
ab0a9ef065 Moved gamepad to input and serverNotofications cleanup 2020-02-05 14:13:28 +01:00
Dmitry Lyzo
17f9480188 Disable keyboard navigation for non-TV 2020-02-05 15:20:48 +03:00
nyanmisaka
58579c3b27 fix encoder preset option not working 2020-02-05 17:10:25 +08:00
Nyanmisaka
3051f6f067 Merge pull request #2 from jellyfin/master
merge
2020-02-05 15:29:35 +08:00
Bill Thornton
efbfbb822e Fix device images on main dashboard page 2020-02-04 17:24:44 -05:00
HaneRo
8d02d05441 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2020-02-04 16:17:57 -05:00
nextlooper42
f84411a5b8 Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2020-02-04 16:17:56 -05:00
ariqfadlan
db1cf86219 Translated using Weblate (Indonesian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/id/
2020-02-04 16:17:55 -05:00
Bill Thornton
a8c979ceaf Fix custom css precedence 2020-02-04 15:40:32 -05:00
MrTimscampi
5e86eb8431 Adjust details page ribbon margins and colors 2020-02-04 21:25:00 +01:00
dkanada
9c92dbcdb4 Merge pull request #680 from MrTimscampi/scrollmanager-webos
Use scrollManager for TV layout in all browser and improve scroll feel
2020-02-05 01:54:53 +09:00
dkanada
2c44558de2 Merge pull request #737 from MrTimscampi/css-fixes
Miscellaneous CSS fixes
2020-02-05 01:50:09 +09:00
William Chu
d25ba7c711 Translated using Weblate (Chinese (Traditional))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2020-02-03 21:43:49 -05:00
4d1m
3b84aef183 Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2020-02-03 21:43:49 -05:00
Fernando
8a28a65ab9 Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2020-02-03 21:43:49 -05:00
dkanada
f3a6a27da8 Merge pull request #760 from nyanmisaka/master
Add some translations for playback info
2020-02-04 11:43:41 +09:00
Thibault
a27ebf3fa0 Merge branch 'master' into copy_url_firefox_fix 2020-02-03 19:35:18 +01:00
Kimme Utsi
c2ffca6d56 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2020-02-03 07:17:41 -05:00
Nutjob
9c21e92e04 Translated using Weblate (Italian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/
2020-02-03 07:17:39 -05:00
Nyanmisaka
5dd2a73f6f Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2020-02-02 09:19:14 -05:00
dkanada
17f70fcb27 Merge pull request #740 from MrTimscampi/fadein
Enable imageLoader fade-in effect
2020-02-02 23:19:09 +09:00
Nyanmisaka
ae5bea2a94 Update src/strings/en-us.json
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-02-02 22:18:31 +08:00
Thibault Nocchi
2e6b2b5f82 Added back old URL copy method as fallback 2020-02-02 14:13:43 +01:00
4d1m
a72d05db84 Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2020-02-02 14:06:46 +01:00
Filipe Silva
128dc8598b Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2020-02-02 14:06:46 +01:00
Nutjob
34ef761077 Translated using Weblate (Italian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/
2020-02-02 14:06:46 +01:00
DJSweder
f2735dc5a2 Translated using Weblate (Czech)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2020-02-02 14:06:46 +01:00
MrTimscampi
c9de45e55a Small tab improvements 2020-02-02 12:29:31 +01:00
Nyanmisaka
c4b0c27259 Add some translations for playback messages 2020-02-02 18:36:37 +08:00
Nyanmisaka
e8e47cc457 Add some translations for playback messages 2020-02-02 18:36:01 +08:00
Nyanmisaka
e24bed00e9 Add some translations for playback info 2020-02-02 18:34:24 +08:00
Nyanmisaka
17514b6d2f Merge pull request #1 from jellyfin/master
merge
2020-02-02 18:32:28 +08:00
4d1m
b273853f0c Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2020-02-02 05:17:55 -05:00
Filipe Silva
9ef1dfc362 Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2020-02-02 05:17:55 -05:00
Nutjob
3ea1696072 Translated using Weblate (Italian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/
2020-02-02 05:17:41 -05:00
DJSweder
f7daecb42d Translated using Weblate (Czech)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2020-02-02 05:17:39 -05:00
MrTimscampi
d104d03e5c Adjust tabs top margin 2020-02-02 11:10:26 +01:00
MrTimscampi
65de99f6dd Correct page title margin 2020-02-02 10:20:33 +01:00
Dmitry Lyzo
6d6cce02af Add server select support for NativeShell 2020-02-02 00:50:46 +03:00
MrTimscampi
d3d482dcac Merge remote-tracking branch 'origin/master' into fadein 2020-02-01 19:54:06 +01:00
MrTimscampi
b59ab3605e Fix some rebasing issues 2020-02-01 18:56:19 +01:00
MrTimscampi
19ce553160 Align text with icons in navigation drawer 2020-02-01 18:50:18 +01:00
MrTimscampi
f2ca10aae9 Align section title with chevron 2020-02-01 18:50:05 +01:00
MrTimscampi
1b45bf1aae Fix misaligned server select card in TV layout 2020-02-01 18:49:44 +01:00
MrTimscampi
072118ab65 Center text vertically in listviews 2020-02-01 18:49:44 +01:00
MrTimscampi
0144192318 Adjust header margins and padding 2020-02-01 18:49:44 +01:00
MrTimscampi
ccfaf11218 Remove scroller changes 2020-02-01 18:30:59 +01:00
MrTimscampi
b113f25327 Don't use smooth scrolling by default on non-Tizen 2020-02-01 18:28:57 +01:00
MrTimscampi
06f64190e6 Merge remote-tracking branch 'upstream/master' into scrollmanager-webos 2020-02-01 18:27:03 +01:00
Thibault Nocchi
4bea999849 Fallback method to copy URL in unsupported cases 2020-02-01 17:29:12 +01:00
Thibault Nocchi
74530fe4d9 Moved URL copy to Clipboard API method 2020-02-01 17:26:03 +01:00
dkanada
254c69b2f1 Merge pull request #694 from grafixeyehero/item-detail-page-
Item detail page layout improvements continued form #611
2020-02-01 20:43:44 +09:00
dkanada
51cece9c25 Merge pull request #728 from dlahoti/patch-1
sort items to play in the correct order when sending to Chromecast
2020-02-01 20:35:17 +09:00
Kacper Marcisz
9b253c5ff7 Translated using Weblate (Polish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/
2020-01-31 08:36:29 -05:00
vortexnix
5de30b9f0f Translated using Weblate (Hindi)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hi/
2020-01-31 08:36:29 -05:00
dkanada
9f105c477e Merge pull request #751 from ThibaultNocchi/copy_url_firefox_fix
Checks if stream URL is successfully copied and displays an appropriate toast
2020-01-31 22:36:19 +09:00
dkanada
acfb152cb9 Merge pull request #721 from grafixeyehero/alphaPicker-tv-mode
Fix alphaPicker padding
2020-01-31 12:42:15 +09:00
Thibault Nocchi
16c75e9e5e Showing toast when copying stream URL fails 2020-01-30 21:08:01 +01:00
grafixeyehero
5cb141caa3 Merge branch 'master' of https://github.com/jellyfin/jellyfin-web into alphaPicker-tv-mode
# Resolve Conflicts:
#	src/assets/css/librarybrowser.css
#	src/components/alphapicker/style.css
2020-01-30 20:24:33 +03:00
grafixeyehero
b06afa3305 Merge branch 'master' of https://github.com/jellyfin/jellyfin-web into item-detail-page-
# Resolve Conflicts:
#	src/assets/css/librarybrowser.css
#	src/itemdetails.html
2020-01-30 20:11:40 +03:00
nextlooper42
f2c24921e1 Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2020-01-30 11:05:21 -05:00
dkanada
1a3037229d Merge pull request #720 from dmitrylyzo/exit_on_back
Add app exit on "Go back"
2020-01-31 01:05:15 +09:00
ferferga
c60dbbb3ae Load gamepadtokey.js only when is necessary 2020-01-30 15:13:45 +01:00
Vasily
af75183d2a Merge pull request #724 from nyanmisaka/master
Update and fix some canPlayType
2020-01-30 14:17:46 +03:00
WNotCoder
3c24afb75e Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2020-01-30 00:17:33 -05:00
vortexnix
261089fb00 Translated using Weblate (Hindi)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hi/
2020-01-30 00:17:33 -05:00
MrTimscampi
c1b9a094af Add placeholder image if non-editable 2020-01-29 19:05:23 +01:00
MrTimscampi
d989d7b007 Add placeholder image to detail pages 2020-01-29 18:59:18 +01:00
dkanada
e3de93dae6 Merge pull request #738 from ferferga/media-controls
Switched OS media controls
2020-01-30 01:26:05 +09:00
Joshua M. Boniface
d310cbf008 Merge pull request #708 from MrTimscampi/material-icons
Move material icons to external package
2020-01-29 09:19:30 -05:00
WWWesten
4f1ca80515 Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2020-01-29 07:17:38 -05:00
Libor Filípek
effd0f1a0b Translated using Weblate (Czech)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2020-01-29 07:17:38 -05:00
Pooka Mustard
ae8f3b74c2 Translated using Weblate (Arabic)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/
2020-01-29 07:17:37 -05:00
MrTimscampi
cdefae3dee Merge remote-tracking branch 'upstream/master' into material-icons 2020-01-29 08:45:20 +01:00
ferferga
02c820de5b Remove unnecessary check 2020-01-29 08:38:56 +01:00
diegoalrey
5df8202d7d Added translation using Weblate (Galician) 2020-01-28 16:12:36 -05:00
Anthony Lavado
b2c7af194c Merge pull request #744 from grafixeyehero/usersetting
Fix usersettings for PR #726
2020-01-28 15:40:04 -05:00
Vasily
b6e0495a1f Merge pull request #730 from ManfredRichthofen/patch-2
Remove red login border on firefox
2020-01-28 16:01:28 +03:00
Benjamin Risse
9df2d1bc37 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2020-01-28 06:17:36 -05:00
Pooka Mustard
9ac45e140d Translated using Weblate (Arabic)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/
2020-01-28 06:17:36 -05:00
ManfredRichthofen
21c68e4598 Update src/elements/emby-input/emby-input.css
Co-Authored-By: Julien Machiels <julien.machiels@protonmail.com>
2020-01-27 13:26:34 -08:00
ManfredRichthofen
4e030db832 Merge branch 'master' into patch-2 2020-01-27 13:26:13 -08:00
grafixeyehero
28d2985f70 Fix usersettings 2020-01-27 21:01:27 +03:00
Nyanmisaka
86484bc9b4 Update browserdeviceprofile.js 2020-01-28 01:55:02 +08:00
Nyanmisaka
c60eff507b Update browserdeviceprofile.js 2020-01-28 01:04:52 +08:00
Nyanmisaka
cb04a5aa91 correct canPlayType for hevc level4 2020-01-28 00:58:24 +08:00
Vasily
e85ea5fe1c Merge pull request #722 from grafixeyehero/Deminify-part-4
Deminify part 4
2020-01-27 19:26:44 +03:00
grafixeyehero
16b6e7e4ed Merge branch 'master' of https://github.com/jellyfin/jellyfin-web into Deminify-part-4
# Resolve Conflicts:
#	src/controllers/dashboard/general.js
2020-01-27 19:20:48 +03:00
Dmitry Lyzo
ddf7eae55b Merge remote-tracking branch 'upstream/master' into exit_on_back2
Conflicts:
	src/components/apphost.js
2020-01-27 17:47:29 +03:00
Vasily
08b4d9aa73 Merge pull request #726 from dkanada/autoplay
Remove useless autoplay script and add folder for settings
2020-01-27 17:15:56 +03:00
dkanada
4debe9b847 Merge pull request #739 from thornbill/add-title-attributes
Add title attributes to card title buttons
2020-01-27 23:12:08 +09:00
dkanada
aef4fede3c merge branch master into autoplay 2020-01-27 23:08:17 +09:00
dkanada
3aceb5c1b2 small fix to input element border radius 2020-01-27 22:54:52 +09:00
dkanada
df06442518 remove missing file from dependency list 2020-01-27 22:54:25 +09:00
Vasily
e4c2950bbe Merge pull request #734 from dmitrylyzo/webos3_compatibility
Fix compatibility for older browsers (webOS 3)
2020-01-27 16:49:41 +03:00
Dmitry Lyzo
23c6b5daaf Update src/components/appRouter.js
Co-Authored-By: Vasily <JustAMan@users.noreply.github.com>
2020-01-27 16:47:26 +03:00
dkanada
7af58a03dd Merge pull request #702 from dmitrylyzo/playback_remote
Add playback control from TV remote
2020-01-27 22:34:59 +09:00
dkanada
3ce568eac8 Merge pull request #709 from MrTimscampi/browserslist-lint
Add CSS linting and enforce style
2020-01-27 22:27:12 +09:00
SaddFox
2657d9aeda Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2020-01-27 08:10:20 -05:00
NunzioArdi
e2ac37996c Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2020-01-27 08:10:20 -05:00
Fernando
9e1633d583 Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2020-01-27 08:10:20 -05:00
dkanada
908cda32f1 Merge pull request #736 from ferferga/remove-autoupdating-ui
Remove "Automatically update this server" checkbox
2020-01-27 22:10:06 +09:00
ManfredRichthofen
f0b740762e Update src/elements/emby-input/emby-input.css
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-01-26 13:46:54 -08:00
grafixeyehero
807a45505a medialibraryeditor.js 2020-01-26 19:02:37 +03:00
grafixeyehero
3682d3c222 medialibrarycreator.js 2020-01-26 18:53:40 +03:00
MrTimscampi
c49f632f62 Add Display setting for fast image fade-in 2020-01-26 15:36:09 +01:00
MrTimscampi
b3558a0dc6 Enable image fadein 2020-01-26 15:33:19 +01:00
ferferga
6bea97ef0f Fixed logic and reduced overhead 2020-01-26 14:40:32 +01:00
Alexander Brissman
2ee9828d0d Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2020-01-26 03:17:25 -05:00
Bill Thornton
a06c56d3d0 Add title attributes to card title buttons 2020-01-26 01:49:27 -05:00
ferferga
8f8ebc485d Switched media controls to follow other players style 2020-01-26 00:08:17 +01:00
ManfredRichthofen
ec22a1cd90 Update emby-input.css 2020-01-25 14:49:04 -08:00
ferferga
49dd48a3e9 Removed more code related to automatic updates 2020-01-25 23:15:27 +01:00
grafixeyehero
a9ca46b6d8 apply suggustiion 2020-01-26 00:20:01 +03:00
ferferga
ca4e3294e8 Removed 'Enable auto-update' checkbox from General settings 2020-01-25 21:16:45 +01:00
MrTimscampi
0b11883451 Move material icons to external package 2020-01-25 18:58:35 +01:00
Dmitry Lyzo
9580124968 Fix compatibility for older browsers (webOS 3) 2020-01-25 18:06:51 +03:00
Dmitry Lyzo
4b5eb8e063 Fix click on pause button right after showOsd 2020-01-25 17:36:59 +03:00
Dmitry Lyzo
d93c16ea72 Exit app on "go back" at server selection page 2020-01-25 15:32:24 +03:00
MrTimscampi
c96aad1c95 Fix intentation (CSS) 2020-01-25 11:42:43 +01:00
MrTimscampi
8634ae8400 Fix rebasing issues 2020-01-25 11:42:09 +01:00
MrTimscampi
1646cac34a Remove IE11 from browsersist 2020-01-25 11:35:33 +01:00
MrTimscampi
c53d92accf Fix unexpected unit remaining 2020-01-25 11:35:33 +01:00
MrTimscampi
e411ceab5a Add CSS linting to CI 2020-01-25 11:35:33 +01:00
MrTimscampi
27714cb8fb Add stylelint config 2020-01-25 11:35:33 +01:00
MrTimscampi
ce79cb6537 Fix selector-pseudo-element-colon-notation (CSS) 2020-01-25 11:35:33 +01:00
MrTimscampi
cc377df8f3 Fix selector-combinator-space-before (CSS) 2020-01-25 11:35:33 +01:00
MrTimscampi
ae0040165a Fix selector-combinator-space-after (CSS) 2020-01-25 11:35:33 +01:00
MrTimscampi
fafd0d4ea0 Fix rule-empty-line-before (CSS) 2020-01-25 11:35:33 +01:00
MrTimscampi
a896a6bcad Fix number-no-trailing-zeros (CSS) 2020-01-25 11:35:33 +01:00
MrTimscampi
ea28429cdf Fix number-leading-zero (CSS) 2020-01-25 11:35:33 +01:00
MrTimscampi
2a074d10f1 Fix no-missing-end-of-source-newline (CSS) 2020-01-25 11:35:33 +01:00
MrTimscampi
c7264691d2 Fix media-feature-colon-space-after (CSS) 2020-01-25 11:35:33 +01:00
MrTimscampi
870a48e78b Fix max-empty-lines (CSS) 2020-01-25 11:35:33 +01:00
MrTimscampi
61719e3ab2 Fix length-zero-no-unit (CSS) 2020-01-25 11:35:33 +01:00
MrTimscampi
c243d00add Fix function-name-case (CSS) 2020-01-25 11:35:33 +01:00
MrTimscampi
2ac83a43d1 Fix function-comma-space-after (CSS) 2020-01-25 11:35:33 +01:00
MrTimscampi
0c0853a80a Fix declaration-colon-space-after (CSS) 2020-01-25 11:35:33 +01:00
MrTimscampi
f290604615 Fix declaration-block-trailing-semicolon (CSS) 2020-01-25 11:35:33 +01:00
MrTimscampi
b2e2cf2012 Fix declaration-bang-space-before (CSS) 2020-01-25 11:34:12 +01:00
MrTimscampi
8a272313cf Fix comment-whitespace-inside (CSS) 2020-01-25 11:34:12 +01:00
MrTimscampi
58c9f71a7d Fix color-hex-length (CSS) 2020-01-25 11:34:12 +01:00
MrTimscampi
04a4ca9a57 Fix color-hex-case (CSS) 2020-01-25 11:34:12 +01:00
MrTimscampi
43ffbed471 Fix block-opening-brace-space-before 2020-01-25 11:34:12 +01:00
MrTimscampi
88cd834a19 Fix block-closing-brace-newline-before (CSS) 2020-01-25 11:34:12 +01:00
MrTimscampi
e3d7040910 Fix selector-type-no-unknown (CSS) 2020-01-25 11:34:12 +01:00
MrTimscampi
eef526df2c Fix no-descending-specificity (CSS) 2020-01-25 11:34:12 +01:00
MrTimscampi
ba8b34cd56 Fix no-duplicate-selectors (CSS) 2020-01-25 11:34:12 +01:00
MrTimscampi
2a89f31383 Fix no-duplicate-selectors (CSS) 2020-01-25 11:34:12 +01:00
MrTimscampi
ff67afeaa7 Fix declaration-block-no-shorthand-property-overrides (CSS) 2020-01-25 11:34:12 +01:00
MrTimscampi
361d6372b0 Fix declaration-block-no-duplicate-properties (CSS) 2020-01-25 11:34:12 +01:00
MrTimscampi
51d9176d8b Fix at-rule-empty-line-before (CSS) 2020-01-25 11:34:12 +01:00
MrTimscampi
0ec0326c9d Add stylelint 2020-01-25 11:34:12 +01:00
dkanada
1458697bb2 Merge pull request #704 from grafixeyehero/suggestion-swipe
Fix scroll for movie recommendation
2020-01-25 18:11:44 +09:00
SaddFox
ad48356d3d Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2020-01-24 22:17:25 -05:00
Dmitry Lyzo
1ebf03d21b Exit app on "go back" at login page 2020-01-25 01:20:33 +03:00
ManfredRichthofen
07359c3f1f Remove red login border on firefox
Keeps the required input text box while removing the red border
2020-01-24 13:20:06 -08:00
Anthony Lavado
6e8c963c35 Merge pull request #725 from dkanada/android
Fix some missing resource issues
2020-01-24 13:35:25 -05:00
Dmitry Lyzo
e3dd871500 Apply suggestions from code review 2020-01-24 16:44:45 +03:00
Nyanmisaka
1f4af044b0 Update browserdeviceprofile.js 2020-01-24 18:24:32 +08:00
Nyanmisaka
5dbbfdd750 WebOS 1.0+ also supports ASF 2020-01-24 18:22:41 +08:00
dkanada
5446e9a625 return default value in method 2020-01-24 18:45:37 +09:00
4d1m
7b6c923aad Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2020-01-23 21:17:20 -05:00
Deven Lahoti
509497e234 sort items to play in the correct order
Fixes #692.
2020-01-23 17:03:08 -05:00
Nyanmisaka
7f187b504b Update browserdeviceprofile.js 2020-01-24 03:30:24 +08:00
Nyanmisaka
50b96b0afb edge does not support h264 high10 directstream 2020-01-24 03:26:30 +08:00
Nyanmisaka
ae325bd747 Update browserdeviceprofile.js 2020-01-24 02:48:22 +08:00
Nyanmisaka
07c67f0382 Update browserdeviceprofile.js 2020-01-24 02:44:53 +08:00
Nyanmisaka
154a24bdb0 Update browserdeviceprofile.js 2020-01-24 02:38:43 +08:00
Nyanmisaka
9415cdc73c Update browserdeviceprofile.js 2020-01-24 02:31:08 +08:00
dkanada
6728f5b718 remove useless autoplay script and add folder for settings 2020-01-24 02:57:29 +09:00
grafixeyehero
709b48a8a8 Merge branch 'master' of https://github.com/jellyfin/jellyfin-web into item-detail-page-
# Conflicts:
#	src/assets/css/librarybrowser.css
#	src/itemdetails.html
2020-01-23 20:51:30 +03:00
dkanada
ed777cdea2 fix some missing resource issues 2020-01-24 02:50:59 +09:00
grafixeyehero
2c4cc578ca apply suggeustion 2020-01-23 20:30:35 +03:00
Nyanmisaka
f647a1b4c3 Add and fix some canPlayType 2020-01-24 01:04:07 +08:00
denikrejn1000
bee1b9f979 Translated using Weblate (Serbian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sr/
2020-01-23 03:17:24 -05:00
4d1m
3634ae3383 Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2020-01-23 03:17:19 -05:00
Quentin
0d3a2179da Translated using Weblate (English (United Kingdom))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/
2020-01-23 03:17:18 -05:00
grafixeyehero
a592ac2b1a rename detailButton-mobile to detailButton 2020-01-22 23:14:28 +03:00
dkanada
050013d6e8 Merge pull request #676 from MrTimscampi/revert-autoprefix
Revert vendor prefix removal
2020-01-23 02:15:03 +09:00
grafixeyehero
f3426a97a1 remove alphabetPicker-left alphaPicker-fixed-left padded-left-withalphapicker class 2020-01-22 19:42:43 +03:00
grafixeyehero
5a6eb5eeec apply suggeustion 2020-01-22 19:06:35 +03:00
grafixeyehero
0c9ae31417 apply suggustion 2020-01-22 18:31:01 +03:00
dkanada
040b86c74b Merge pull request #663 from MrTimscampi/disable-headroom-on-desktop
Enable headroom only on mobile
2020-01-22 17:06:45 +09:00
dkanada
131e982d37 Merge pull request #719 from samuel9554/samuel9554-patch-1
Add titles in movie tabs genres moviegenres.js
2020-01-22 13:23:36 +09:00
grafixeyehero
a28596dc6f manual Deminify navdrawer 2020-01-22 03:46:35 +03:00
grafixeyehero
e5e2c387d7 navdrawer.js 2020-01-22 03:31:43 +03:00
grafixeyehero
f05fd60371 librarymenu.js 2020-01-22 03:31:15 +03:00
grafixeyehero
de82a262df networking.js 2020-01-22 03:30:55 +03:00
grafixeyehero
f1429d007b general.js 2020-01-22 03:30:33 +03:00
grafixeyehero
e706f8bee0 loginpage.js 2020-01-22 03:29:52 +03:00
grafixeyehero
474e53cc47 Fix some sytle for PR #663 2020-01-22 00:22:26 +03:00
grafixeyehero
4939f2fd60 add alphaPicker-fixed left and right class 2020-01-21 22:21:03 +03:00
MrTimscampi
91f5866d35 Keep standard properties in CSS along with vendored 2020-01-21 20:13:19 +01:00
MrTimscampi
5fb98e950b Correct the reverted changes that should be kept 2020-01-21 20:09:51 +01:00
MrTimscampi
b9b3cc7c2e Revert "Add autoprefix to postcss"
This reverts commit 509af1a0c3.
2020-01-21 20:09:40 +01:00
MrTimscampi
50d6864a68 Revert vendor prefix removal 2020-01-21 20:09:40 +01:00
grafixeyehero
a25e5d7f9b fix alphaPicker class 2020-01-21 21:58:44 +03:00
grafixeyehero
633999e528 fix header tab scroll for mobile 2020-01-21 20:11:24 +03:00
dkanada
6c56234171 Merge pull request #667 from Nickbert7/update-remotecontrol
Update remotecontrol layout
2020-01-21 23:29:28 +09:00
dkanada
519c3ada79 Merge pull request #716 from jellyfin/ac3
Safari supports AC-3
2020-01-21 23:22:12 +09:00
Dmitry Lyzo
d345e32333 Fix eslint errors 2020-01-21 14:04:26 +03:00
dkanada
961e720852 Merge pull request #710 from dkanada/themes
Fix some issues with theme resources
2020-01-21 19:19:18 +09:00
dkanada
5da3367ad3 Merge pull request #714 from MrTimscampi/flv-dist
Use dist versions in bundle.js
2020-01-21 19:17:41 +09:00
Dmitry Lyzo
60e64f8a58 Add exit on "Go back" 2020-01-21 12:56:11 +03:00
Samuel
143cd2bfad Update moviegenres.js 2020-01-20 21:52:47 -05:00
grafixeyehero
779e378288 show title and year on movie suggestion 2020-01-21 00:09:41 +03:00
Bond_009
361a6acc96 Safari supports AC-3 2020-01-20 21:40:42 +01:00
MrTimscampi
736086d068 Use dist version of flv.js 2020-01-20 19:57:15 +01:00
dkanada
8152c95bfa fix play button border for mobile layout 2020-01-21 00:03:35 +09:00
Vasily
02f6928fcd Merge pull request #699 from dmitrylyzo/header_justify_compatibility
Fix headerLeft justify-content (WebOS 3/4, Tizen 4)
2020-01-20 15:53:12 +03:00
ylzhan
c6177fb7fd Translated using Weblate (Turkish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/
2020-01-20 04:17:18 -05:00
nextlooper42
6a4de9d253 Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2020-01-20 04:17:17 -05:00
tluciomiranda
7395a23b48 Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2020-01-20 04:17:16 -05:00
dkanada
894c44d11d Merge pull request #711 from dkanada/livetv
Fix xmltv strings and remove broken tv guide sources
2020-01-20 13:48:59 +09:00
dkanada
3ce9162fb5 Merge pull request #712 from dkanada/links
Move all documentation links to subdomain
2020-01-20 13:48:50 +09:00
Anthony Lavado
4e1f0477f6 Merge pull request #713 from dkanada/scripts
Add a folder for useful scripts
2020-01-19 22:23:29 -05:00
dkanada
ac435adda3 add a folder for useful scripts 2020-01-20 10:38:53 +09:00
dkanada
cdfd41c0e2 move all documentation links to subdomain 2020-01-20 10:15:28 +09:00
dkanada
af38a136ec fix xmltv strings and remove broken tv guide sources 2020-01-20 10:14:25 +09:00
dkanada
d9378932d4 remove emby theme for now 2020-01-20 10:12:36 +09:00
dkanada
bdd2002cf4 move purple haze theme 2020-01-20 10:11:44 +09:00
dkanada
cb14982e16 move all generic image assets to the same folder 2020-01-20 10:11:05 +09:00
SaddFox
33ed166ec9 Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2020-01-19 08:17:18 -05:00
tluciomiranda
e1af774665 Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2020-01-19 08:17:17 -05:00
Julien Machiels
06abc6cee2 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2020-01-19 08:17:17 -05:00
Alberto Rico
969d957d5f Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2020-01-19 08:17:17 -05:00
dkanada
51786e8c84 Merge pull request #701 from dmitrylyzo/filterdialog_size
Fix filter dialog size for TV
2020-01-19 21:45:35 +09:00
Dmitry Lyzo
ec6ce5aa14 Add keyboard compatibility for older browsers (webOS 2/3) 2020-01-19 01:09:42 +03:00
grafixeyehero
75185f0b23 define emby-scroller 2020-01-18 23:47:19 +03:00
Pan Renzhou
fa31b8140f Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2020-01-17 20:17:31 -05:00
4d1m
7b4578ec10 Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2020-01-17 20:17:31 -05:00
Sangha Lee
abb0269f07 Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2020-01-17 20:17:10 -05:00
grafixeyehero
5b8756addf Fix focus 2020-01-18 00:17:16 +03:00
grafixeyehero
cca897bb15 fix scroll for movie recommendation 2020-01-17 23:39:58 +03:00
grafixeyehero
b9ee5c7c24 centering primery title on mobile layout 2020-01-17 21:00:12 +03:00
grafixeyehero
a821b78a8b reduce font size for indicator and btn 2020-01-17 20:10:38 +03:00
grafixeyehero
b051caa8a9 revert back does't gowell on smaller screen and reduce font size 2020-01-17 19:26:19 +03:00
grafixeyehero
5a41d706c5 fix style on desktop 2020-01-17 18:52:47 +03:00
grafixeyehero
c87b0b8263 fix show favorite and wacted on mobile 2020-01-17 18:37:12 +03:00
grafixeyehero
ea68085229 fix show favorite on mobile 2020-01-17 17:56:52 +03:00
Dmitry Lyzo
1889dad8cc Add shortcuts to show/hide OSD. #621 2020-01-17 12:20:35 +03:00
Dmitry Lyzo
80c8ea6a48 Add playback control from TV remote. #303 2020-01-17 12:20:08 +03:00
Dmitry Lyzo
12da467cfa Fix event subscription. Fix #623 2020-01-17 11:50:46 +03:00
4d1m
baad6dc4b0 Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2020-01-16 23:24:51 -05:00
NunzioArdi
53b5f83299 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2020-01-16 23:24:51 -05:00
dkanada
4a5088f35e Merge pull request #683 from dkanada/codec
Minor playback improvements and a few icon and string fixes
2020-01-17 13:24:30 +09:00
Anthony Lavado
01bee79fd0 Merge pull request #688 from grafixeyehero/fix-backdrop
Fix respect user option backdrop image
2020-01-16 22:25:10 -05:00
Anthony Lavado
4f9a314606 Merge pull request #698 from twinkybot/master
Help Link in the admin area for Users points to 404 on github
2020-01-16 08:41:28 -05:00
Dmitry Lyzo
faa6d8e62a Fix filter dialog size for TV 2020-01-16 14:58:07 +03:00
4d1m
dbeff55a12 Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2020-01-15 20:17:39 -05:00
Dmitry Lyzo
95f55c2358 Fix headerLeft justify-content (WebOS 3/4, Tizen 4) 2020-01-15 22:21:42 +03:00
Niklas Fäth
f40556f007 Hide if select is not available 2020-01-15 17:48:27 +01:00
Niklas Fäth
7a7027b813 remove border 2020-01-15 17:46:19 +01:00
Niklas Fäth
89cf454e91 Update dpad 2020-01-15 17:45:23 +01:00
grafixeyehero
89b28d76f5 applly suggestion 2020-01-15 18:54:48 +03:00
twinkybot
db349d860f Help Link in the admin area for Users points to 404 on github
https://github.com/jellyfin/jellyfin-web/issues/697
2020-01-15 12:53:36 +01:00
Nyanmisaka
02924e30ac Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2020-01-15 01:17:29 -05:00
Anders Bengtsson
ad6e477e7c Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-01-15 01:17:29 -05:00
Åskar Andersson
531c673e93 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2020-01-15 01:17:29 -05:00
nextlooper42
0a3f13630b Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2020-01-15 01:17:28 -05:00
tluciomiranda
1118103a3c Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2020-01-15 01:17:14 -05:00
drikqlis
e6731640f9 Translated using Weblate (Polish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/
2020-01-15 01:17:10 -05:00
Alexander Brissman
3dfec6aa9a Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2020-01-15 01:17:10 -05:00
tluciomiranda
16106145d2 Translated using Weblate (English (United States))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2020-01-15 01:17:09 -05:00
TheGoose
9a3bce6cbf Translated using Weblate (English (United Kingdom))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/
2020-01-15 01:17:09 -05:00
Decoy7
84abfe4a9c Translated using Weblate (Greek)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/el/
2020-01-15 01:17:04 -05:00
grafixeyehero
5941c914fc Fix ProgressBar position 2020-01-14 20:07:13 +03:00
dkanada
df74931794 fix track number alignment 2020-01-14 19:45:57 +09:00
grafixeyehero
927fd4d7e6 set header setTransparentMenu for mobile only and fix some style 2020-01-13 23:36:23 +03:00
grafixeyehero
00469f9577 show overview and externallink for movie and episode on mobile too 2020-01-13 22:27:02 +03:00
grafixeyehero
69251cff48 overide itembackrop class backgroud-size cover to contain hide on desktop person backdrop 2020-01-13 22:22:50 +03:00
grafixeyehero
040f4af781 add person img to itembackdrop 2020-01-13 22:20:06 +03:00
grafixeyehero
28dfc698b5 hide detail img on mobile 2020-01-13 22:18:43 +03:00
grafixeyehero
442487799a change shape to overflow 2020-01-13 21:15:59 +03:00
grafixeyehero
5c448bc482 Fix Respect user enable/disable backdrops image 2020-01-13 18:09:55 +03:00
Vasily
5b46f0263a Merge pull request #634 from dkanada/controllers
Move more controllers to a sane directory structure
2020-01-13 11:15:23 +03:00
SaddFox
11934ba43e Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2020-01-12 23:28:06 -05:00
tluciomiranda
26096894e0 Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2020-01-12 23:28:06 -05:00
Alexander Brissman
a993bb15da Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2020-01-12 23:28:06 -05:00
dkanada
7195bbb489 Merge pull request #640 from YouKnowBlom/setup-username-fix
Add a warning to user wizard reflecting the importance of usernames
2020-01-13 13:27:49 +09:00
Andreas B
2d3c474ab4 Update user wizard username label and description
Resolves: #591
2020-01-12 21:41:16 +01:00
tluciomiranda
917e050180 Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2020-01-12 13:21:30 -05:00
dkanada
88d8c580e5 string improvements 2020-01-12 16:05:05 +09:00
Slobodan Simić
44ca739cba Translated using Weblate (Serbian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sr/
2020-01-11 21:17:21 -05:00
Z Yang
8a0da464cd Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2020-01-11 21:17:18 -05:00
SaddFox
5427e5307d Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2020-01-11 21:17:18 -05:00
nextlooper42
43e8b33a85 Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2020-01-11 21:17:17 -05:00
WWWesten
e57b747fbc Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2020-01-11 21:17:11 -05:00
Marcin Woliński
7ff79e1139 Translated using Weblate (Polish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/
2020-01-11 21:17:10 -05:00
Alexander Brissman
ec8b71fc58 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2020-01-11 21:17:08 -05:00
archon eleven
07731c8227 Translated using Weblate (Malay)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ms/
2020-01-11 21:17:04 -05:00
Philmo67
88bdb57be8 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2020-01-11 21:17:04 -05:00
jake-
15d7a1f66a Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2020-01-11 21:17:03 -05:00
dkanada
aa3e414ba1 Merge pull request #624 from redSpoutnik/fix-subtitle-sync-firefox
Fix subtitle sync firefox
2020-01-12 04:14:18 +09:00
dkanada
19861962af merge branch master into controllers 2020-01-12 02:24:54 +09:00
dkanada
3047b12382 add code suggestions 2020-01-12 02:23:16 +09:00
dkanada
da87b4a620 shrink ci file and update display names 2020-01-12 00:06:25 +09:00
dkanada
1922cfe51a change edit image icon 2020-01-11 15:33:53 +09:00
dkanada
747bbca7fe fix instant mix icon 2020-01-11 15:28:19 +09:00
dkanada
367f55cf59 Merge pull request #649 from XVicarious/webp
Allow WEBP Uploading
2020-01-11 15:19:14 +09:00
Brian Maurer
b8fbd57015 allow any image 2020-01-10 21:13:02 +00:00
Slobodan Simić
83ed8a7d2c Added translation using Weblate (Serbian) 2020-01-10 15:18:27 -05:00
Niklas Fäth
8d7e749ed8 fix indentation 2020-01-10 18:02:08 +01:00
Anthony Lavado
21066f06f0 Add initial AirPlay support (#659) 2020-01-10 19:31:02 +03:00
dkanada
503dbb5767 possible fix for ogg playback with chrome 2020-01-11 01:17:17 +09:00
Anthony Lavado
86bf6ab8d2 Merge pull request #672 from MrTimscampi/hide-cast-on-tv
Hide Cast button on TV layout
2020-01-10 02:00:33 -05:00
harry71019
0bd50d67ec Translated using Weblate (Chinese (Traditional))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2020-01-09 21:17:07 -05:00
shoeflydbm
ac3410abc9 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2020-01-09 21:17:07 -05:00
Alexander Brissman
1b6f14b1e4 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2020-01-09 21:17:07 -05:00
Paolo Basso
4bb2f2f4ea Translated using Weblate (Italian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/
2020-01-09 21:17:04 -05:00
vortexnix
ceeca0e0fa Translated using Weblate (Hindi)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hi/
2020-01-09 21:16:56 -05:00
MrTimscampi
d963fe5cab Don't bind cast button event if in TV layout 2020-01-09 22:36:40 +01:00
MrTimscampi
27ff0e7241 Enable scrollManager in more cases 2020-01-09 22:30:15 +01:00
dkanada
0a5660643e Merge pull request #673 from dkanada/android-icon
Add android icon and fix issue with kodi icon
2020-01-09 15:21:26 +09:00
dkanada
01776ae86f fix item details page for music 2020-01-09 15:18:10 +09:00
dkanada
2978e64b9b fix a few minor style issues 2020-01-08 23:18:00 +09:00
dkanada
2db6bb4acf use android icon for dashboard 2020-01-08 23:17:21 +09:00
dkanada
a02e80a08c add new icon for android client and move kodi icon 2020-01-08 23:17:21 +09:00
dkanada
f805b45229 Merge pull request #611 from grafixeyehero/itemdetailpage-layout
Item detail page layout improvements
2020-01-08 22:11:08 +09:00
dkanada
4771e6466e minor refactoring on item details page 2020-01-08 22:04:02 +09:00
dkanada
bd097773b0 merge branch master into itemdetailpage-layout 2020-01-08 22:02:01 +09:00
Vincent Tourneur
d6dc3fe7e4 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2020-01-08 02:16:52 -05:00
dkanada
37ca2d683a Merge pull request #635 from dkanada/assets
Some general refactoring for assets
2020-01-08 11:15:12 +09:00
dkanada
2f4cf8248b merge branch master into assets 2020-01-08 11:10:24 +09:00
dkanada
57c779b4f6 Merge pull request #547 from Unhelpful/suboctopus
Use JavascriptSubtitlesOctopus to render ASS subtitles with embedded fonts.
2020-01-08 11:05:23 +09:00
redSpoutnik
8f60d62919 subtitle-sync: set explicit methods for textTracks and trackEvents. 2020-01-07 21:12:25 +01:00
dkanada
a08d142db2 move some routes to their original locations for now 2020-01-08 01:45:45 +09:00
samucamg
a8fd4b6940 Translated using Weblate (Portuguese)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/
2020-01-06 23:16:57 -05:00
Zankio
3a39baa92c Translated using Weblate (Chinese (Traditional))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2020-01-06 23:16:57 -05:00
Constantin Matel
0d43f336fe Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2020-01-06 23:16:57 -05:00
Cota Fainado
239d8d795a Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2020-01-06 23:16:56 -05:00
ADRI IDZWAN MANSOR
cec0337703 Translated using Weblate (Malay)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ms/
2020-01-06 23:16:54 -05:00
Philmo67
6b76dc69d7 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2020-01-06 23:16:54 -05:00
thorthur
deff77a21f Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2020-01-06 23:16:53 -05:00
Thoscellen
07556fbce8 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2020-01-06 23:16:53 -05:00
hypervtechnics
1d7f7ce0c3 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2020-01-06 23:16:52 -05:00
Brian Maurer
3d32901470 allow any images 2020-01-06 19:52:12 -05:00
MrTimscampi
7a9117f136 Hide Cast button on TV layout 2020-01-06 22:05:31 +01:00
MrTimscampi
552390a9f9 Enable headroom only on mobile 2020-01-06 18:27:57 +01:00
dkanada
4d48e441fe Merge pull request #670 from dkanada/merge
Fix issue with previous merge commit
2020-01-06 23:31:09 +09:00
dkanada
915a6b20c3 fix issue with previous merge commit 2020-01-06 23:15:37 +09:00
dkanada
8c8e9df22f Merge pull request #664 from WX9yMOXWId/module-initialization
Properly load modules before loading view
2020-01-06 21:32:29 +09:00
dkanada
baf7d31c55 add code suggestions 2020-01-06 21:28:57 +09:00
dkanada
74b6e7b78b Merge pull request #655 from MrTimscampi/remove-prefixes
Remove vendor prefixes in CSS
2020-01-06 21:23:54 +09:00
dkanada
34b155cbae merge branch master into remove-prefixes 2020-01-06 21:22:49 +09:00
dkanada
4610398cb5 Merge pull request #660 from Larvitar/master
Display year in "Collection" and "More like this"
2020-01-06 14:12:15 +09:00
dkanada
a5f09cdfd8 Merge pull request #619 from DaveChild/patch-1
Fix for card image scaling problem
2020-01-06 14:11:19 +09:00
dkanada
47817d230f Merge pull request #645 from mcarlton00/device-icons
Rework device icons + add Kodi icon
2020-01-06 13:52:14 +09:00
dkanada
9ecbc46517 Merge pull request #654 from MrTimscampi/postcss-vendorprefix
Add autoprefix to postcss
2020-01-06 12:55:06 +09:00
dkanada
115d267c51 Merge pull request #626 from dkanada/css
Fix context menu margin and user preference buttons
2020-01-06 11:06:47 +09:00
mcarlton00
492d668ad3 User appname as the default image check 2020-01-05 19:09:11 -05:00
Niklas Fäth
2a80c9c593 Hide collapse if not supported 2020-01-06 00:49:55 +01:00
Niklas Fäth
fef18d9648 Update css 2020-01-06 00:34:43 +01:00
Niklas Fäth
549482896f add string 2020-01-06 00:33:28 +01:00
Niklas Fäth
e9d09e9552 Update layout 2020-01-06 00:32:19 +01:00
samucamg
4a09a7df16 Translated using Weblate (Portuguese)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/
2020-01-05 16:45:56 -05:00
Cota Fainado
8188e6f380 Translated using Weblate (Portuguese)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/
2020-01-05 16:45:56 -05:00
grafixeyehero
6e39a97bf2 spacing 2020-01-06 00:14:11 +03:00
grafixeyehero
a73da9f46b remove leftover detailPagePrimaryContainer style form theme 2020-01-06 00:10:25 +03:00
grafixeyehero
0600fb26a3 apply suggestion change 2020-01-05 23:55:28 +03:00
dkanada
d2f478b200 fix issue with tv layout and remove blur effect from most themes 2020-01-05 15:27:39 +09:00
dkanada
ad91c897d7 update comment about dependencies 2020-01-05 14:17:25 +09:00
Cota Fainado
f693800fe0 Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2020-01-04 18:45:57 -05:00
Cota Fainado
f1c65a01b6 Added translation using Weblate (Portuguese) 2020-01-04 18:28:20 -05:00
tokiedokie
8ff600eaec Translated using Weblate (Japanese)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ja/
2020-01-04 09:17:29 -05:00
Constantin Matel
725dfdd0a1 Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2020-01-04 09:17:01 -05:00
Marcin Woliński
3a57ffb860 Translated using Weblate (Polish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/
2020-01-04 09:16:49 -05:00
shoeflydbm
b1f212676f Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2020-01-04 09:16:49 -05:00
ADRI IDZWAN MANSOR
d5a3699fed Translated using Weblate (Malay)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ms/
2020-01-04 09:16:49 -05:00
minystory
e6fa1b2e31 Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2020-01-04 09:16:49 -05:00
Constantin Matel
8130549900 Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2020-01-04 09:16:48 -05:00
Libor Filípek
a6d1a6358d Translated using Weblate (Czech)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2020-01-04 09:16:48 -05:00
MrTimscampi
b2b67b81ef Fix unreplaced and duplicate CSS properties 2020-01-04 11:02:46 +01:00
chrstnjrsch
97e80101d0 Load modules before loading view 2020-01-04 01:31:35 +01:00
grafixeyehero
a5ec665cfa change detailImageProgressContainer width to vw 2020-01-03 23:34:07 +03:00
grafixeyehero
f92c05b9d3 change sticky to relative for mobile too to gain more room 2020-01-03 22:37:11 +03:00
grafixeyehero
ac9fece8cc change style 2020-01-03 22:11:23 +03:00
grafixeyehero
4e72a857c4 change shap to overflow 2020-01-03 21:10:42 +03:00
grafixeyehero
e0d6686bb4 remove btn backdrop show/hide 2020-01-02 20:27:37 +03:00
MrTimscampi
019d3730df Remove leftover MS vendor prefix 2020-01-02 14:46:22 +01:00
MrTimscampi
93e2aa2d3f Remove further vendor-prefixed CSS 2020-01-02 13:36:44 +01:00
Mariusz Chryc
e23d834608 Merge branch 'master' of https://github.com/jellyfin/jellyfin-web 2020-01-02 12:40:51 +01:00
Mariusz Chryc
f0ef911e61 Display year in "Collection" and "More like this" 2020-01-02 12:29:41 +01:00
MrTimscampi
1897818a39 Remove package-lock.json 2020-01-02 12:15:03 +01:00
MrTimscampi
4acf4f071e Remove comments related to prefixed properties 2020-01-02 10:17:11 +01:00
WWWesten
bbf1f8d5df Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-12-31 23:16:50 -05:00
Wojciech
29d6835415 Translated using Weblate (Polish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/
2019-12-31 23:16:50 -05:00
marty
be15a9d7a2 Translated using Weblate (Lithuanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lt/
2019-12-31 23:16:50 -05:00
sebasf9
73a9672c4b Translated using Weblate (Spanish (Argentina))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_AR/
2019-12-31 23:16:36 -05:00
Vasily
253e8f5f80 Merge pull request #651 from Larvitar/patch-1
Fix for commit d111e8c
2019-12-31 13:09:07 +03:00
Anthony Lavado
e1b8f9837e Merge pull request #650 from MrTimscampi/headerbar-align
Align the page title with other text and icons in the header
2019-12-31 00:26:46 -05:00
MrTimscampi
83edce20aa Adjust browserslist rules 2019-12-30 15:34:24 +01:00
MrTimscampi
6f165eab15 Add some other small fixes 2019-12-30 14:44:22 +01:00
MrTimscampi
b56cc14a1b Fix leftHeader alignement issue 2019-12-30 14:17:51 +01:00
MrTimscampi
ecf0ee0c34 Fix automatic vendor prefix removal 2019-12-30 13:38:51 +01:00
DenisDehaty
01259f401e Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2019-12-30 07:16:41 -05:00
marty
2e5656aeea Translated using Weblate (Lithuanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lt/
2019-12-30 07:16:41 -05:00
erikasne6152
a87be24b8b Translated using Weblate (Lithuanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lt/
2019-12-30 07:16:34 -05:00
Deleted User
2ade13e07c Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-12-30 07:16:33 -05:00
MrTimscampi
d08cd4d1cd Remove vendor prefixes in CSS 2019-12-30 12:09:48 +01:00
MrTimscampi
6b4d1a6b92 Add browserslist to package.json 2019-12-30 11:47:08 +01:00
MrTimscampi
509af1a0c3 Add autoprefix to postcss 2019-12-30 11:01:07 +01:00
grafixeyehero
89b1fd7ce0 fix cast circle for mobile divice 2019-12-30 03:07:45 +03:00
erikasne6152
fc871b31fd Translated using Weblate (Lithuanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lt/
2019-12-29 08:44:46 -05:00
marty
193e0681f2 Translated using Weblate (Lithuanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lt/
2019-12-29 08:44:45 -05:00
dkanada
e21babea0b merge branch master into suboctopus 2019-12-28 19:32:42 +09:00
dkanada
1be3b13ba0 add logging for libjass usage 2019-12-28 19:30:22 +09:00
Allan
5d4b9abe5f Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-12-28 05:16:50 -05:00
SaddFox
957ccc2eaf Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2019-12-28 05:16:50 -05:00
Deepcuts
5cb1de5f22 Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2019-12-28 05:16:49 -05:00
TheSergioEduP
1da1e34526 Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-12-28 05:16:48 -05:00
vimo
2afe6a2f05 Translated using Weblate (Dutch)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/
2019-12-28 05:16:47 -05:00
vimo
ac914047a5 Translated using Weblate (English (United Kingdom))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/
2019-12-28 05:16:33 -05:00
David
8192c6dc44 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-12-28 05:16:32 -05:00
m0d3rnX
0f8a059c05 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-12-28 05:16:32 -05:00
Larvitar
2b12a86cd9 Fix for commit d111e8c
Fix commit d111e8c from PR #641 as it would sometimes break the card and year would not be displayed at all.
2019-12-26 21:30:56 +01:00
lacalamine64
144164cd2a Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-12-26 02:16:33 -05:00
4d1m
0930ec67a2 Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2019-12-25 08:16:39 -05:00
tanto faz
c58d79b61b Translated using Weblate (Portuguese (Brazil))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2019-12-25 08:16:31 -05:00
Odd Stråbø
92a19f2c98 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2019-12-25 08:16:26 -05:00
MrTimscampi
fb8fd901b2 Align page title with other text 2019-12-24 10:10:20 +01:00
Anthony Lavado
8423c8ec38 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-12-23 20:16:29 -05:00
TiraelSedai
48d308a7b2 Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-12-23 20:16:29 -05:00
arg2009
10ed4b85f9 Translated using Weblate (Indonesian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/id/
2019-12-23 20:16:29 -05:00
lacalamine64
4a687380ac Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-12-23 20:16:22 -05:00
grafixeyehero
7f2cc73e63 backward compateblity 2019-12-24 03:17:33 +03:00
dkanada
e84753827c Merge pull request #639 from dmitrylyzo/fix-608-2
Fix require of 'export default'
2019-12-23 07:26:07 +09:00
grafixeyehero
5e3b2a642d fix text overflow 2019-12-22 23:51:53 +03:00
grafixeyehero
77fd191d99 Fix detailPagePrimaryContainer style 2019-12-22 20:01:33 +03:00
grafixeyehero
8e9b094d4b backward compateblity for web os 2019-12-22 17:47:17 +03:00
grafixeyehero
f7f83f08d4 Add show/hide backdrop 2019-12-22 16:32:11 +03:00
Brian Maurer
1fdb0a8c56 Allow webp 2 2019-12-21 21:56:40 -05:00
Brian Maurer
f3f64585e4 Allow webp 2019-12-21 21:42:28 -05:00
Lars Sørensen
7c66d51a64 Translated using Weblate (Danish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/
2019-12-21 21:16:19 -05:00
grafixeyehero
05a200915e change cast person card to circle only for pulple-haze theme 2019-12-21 20:58:38 +03:00
Vitorvlv
bf801f1800 Translated using Weblate (Portuguese (Brazil))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2019-12-21 08:16:24 -05:00
mcarlton00
cef7186000 Fix spacing error 2019-12-20 19:57:27 -05:00
Anders Bengtsson
fc7c666653 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2019-12-20 19:16:25 -05:00
hammerings
e043edc912 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2019-12-20 19:16:24 -05:00
mcarlton00
d9757956a3 Rework device icons + add Kodi 2019-12-20 17:44:38 -05:00
grafixeyehero
dfe0b86495 increase detail logo size 2019-12-20 23:36:56 +03:00
grafixeyehero
36f60d5923 reducing show-focus transform scale 2019-12-20 23:18:41 +03:00
grafixeyehero
935cdfceea Fix detailImageContainer padding 2019-12-20 22:49:54 +03:00
dkanada
a1f45f8e77 Merge pull request #641 from Larvitar/master
If item EndYear is the same as ProductionYear only display ProductionYear
2019-12-20 16:54:56 +09:00
grafixeyehero
d118bd4a6d move itemMiscInfo to detailPagePrimaryContainer 2019-12-20 01:46:25 +03:00
grafixeyehero
7833ac7e39 fix detial image container 2019-12-20 01:33:43 +03:00
Mariusz Chryc
d111e8cf4d If item EndYear is the same as ProductionYear only display ProductionYear 2019-12-19 21:23:26 +01:00
Z Yang
4f71cc1814 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-12-19 13:16:18 -05:00
Vasily
ab68bacef3 Merge pull request #633 from Artiume/patch-8
Correct URL Link, discuss new networking page
2019-12-19 18:35:44 +03:00
SaddFox
7e9a3477d8 Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2019-12-18 06:16:24 -05:00
dkanada
cbb9ee7d26 Merge pull request #592 from grafixeyehero/screensaver
Add Screen saver
2019-12-18 18:32:44 +09:00
Dmitry Lyzo
bc748df41e Fix require of 'export default' 2019-12-17 19:15:54 +03:00
pagaiba
2cb4d7be96 Translated using Weblate (Catalan)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/
2019-12-17 01:16:17 -05:00
redSpoutnik
547dbf5d67 Update src/components/htmlvideoplayer/plugin.js
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-12-16 17:49:38 +01:00
Artiume
afeaaba873 Fixed to networking.html
networking.html doesn't current exist and needs to be created.
2019-12-16 08:23:07 -05:00
Óskar Freyr
cac136fecc Translated using Weblate (Icelandic)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/is/
2019-12-16 00:16:17 -05:00
dkanada
7f2f10a595 style fixes in html files 2019-12-16 00:07:55 +09:00
dkanada
07994e0a40 move authentication and playback controllers to subdirectories 2019-12-15 23:53:13 +09:00
dkanada
4bf12b1682 order all routes by category 2019-12-15 22:42:33 +09:00
dkanada
30ca4a3290 fix some readme issues 2019-12-15 20:53:56 +09:00
dkanada
9489ad7134 fix left margin on item details poster 2019-12-15 20:53:56 +09:00
dkanada
bff5918c85 improve padding for headers and buttons on home screen 2019-12-15 20:53:56 +09:00
dkanada
f036ccc674 move some elements to a new directory 2019-12-15 20:51:34 +09:00
dkanada
758477f1ae give themes their own directory to encourage custom entries 2019-12-15 20:51:16 +09:00
dkanada
3aad09c5fd move all static assets into a single folder 2019-12-15 20:50:58 +09:00
dkanada
34c0d6019e move around half the dashboard controllers to a subdirectory 2019-12-15 20:47:47 +09:00
dkanada
a612fdf87c Merge pull request #631 from Artiume/patch-4
Fix User Link
2019-12-15 20:12:22 +09:00
dkanada
a0aa88f206 Merge pull request #630 from Artiume/patch-3
Fixed Jellyfin Link
2019-12-15 19:59:18 +09:00
SaddFox
953f54ec67 Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2019-12-15 00:16:19 -05:00
tanto faz
9730911a01 Translated using Weblate (Portuguese (Brazil))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2019-12-15 00:16:12 -05:00
Robin
180e47af8e Translated using Weblate (Dutch)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/
2019-12-15 00:16:11 -05:00
Tuomo Björk
934517add3 Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2019-12-15 00:16:10 -05:00
Pyry Loukola
4382149f83 Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/
2019-12-15 00:16:10 -05:00
Anthony Lavado
6fd23f14f6 Translated using Weblate (English (United States))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-12-15 00:16:09 -05:00
Andreas
5eabf926ea Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-12-15 00:16:09 -05:00
Artiume
b24bcd9127 Correct URL Link, discuss new networking page
Redirect from old archive URL. This URL is the closest option currently available for the networking page. A PR needs to be made to create the networking page or perhaps convert this link into the new page. discussion welcome
2019-12-14 23:06:09 -05:00
Artiume
1f48ae3b2d Fix User Link
Fixed User Link to docs.
2019-12-14 10:41:50 -05:00
Artiume
18b0c5f92b Fixed Jellyfin Link
Corrected the URL so it redirects to https automatically and the correct TLD.

With that said, the link feels out of place and lonely at the bottom of the dashboard, maybe 'Jellyfin Website' or something, the single word in the wild nags at me
2019-12-14 10:18:53 -05:00
Robin
2676fc3f38 Translated using Weblate (Dutch)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/
2019-12-14 08:59:37 -05:00
ThijsvL
34579f1db5 Translated using Weblate (Dutch)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/
2019-12-14 08:59:36 -05:00
Andreas
8a8ca1aebc Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-12-14 04:57:03 -05:00
David
c591809a84 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-12-14 04:57:02 -05:00
dkanada
fccc86c80c Merge pull request #628 from Artiume/patch-1
Fix DLNA Link
2019-12-14 17:04:00 +09:00
tluciomiranda
b681ab4e72 Translated using Weblate (English (United States))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-12-14 02:39:29 -05:00
Roland Vet
585aa3ad82 Translated using Weblate (English (United States))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-12-14 02:39:29 -05:00
Artiume
142d309ac0 Fix DLNA Link
Fixes the DLNA link from the archive page for emby.

Requires https://github.com/jellyfin/jellyfin-docs/pull/170 to work.
2019-12-13 17:26:59 -05:00
Óskar Freyr
39f102e2da Translated using Weblate (Icelandic)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/is/
2019-12-13 06:16:11 -05:00
Decoy7
8e1cf00909 Translated using Weblate (Greek)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/el/
2019-12-13 06:16:11 -05:00
2ffe9e5418 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-12-12 01:04:14 -05:00
tanto faz
5fe2908d74 Translated using Weblate (Portuguese (Brazil))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2019-12-12 01:04:14 -05:00
Óskar Freyr
88f37eaa25 Translated using Weblate (Icelandic)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/is/
2019-12-12 01:04:14 -05:00
ZsiGiT
43500b10b3 Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-12-12 01:04:14 -05:00
Thomas
c820976680 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-12-12 01:04:14 -05:00
sebasf9
2115bd9355 Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-12-12 01:04:14 -05:00
Oneness
62594b246f Translated using Weblate (English (United Kingdom))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/
2019-12-12 01:04:14 -05:00
mpblabs
1ec42f9759 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-12-12 01:04:14 -05:00
Anthony Lavado
cad75511eb Merge pull request #627 from s0urcelab/patch-1
add missing string and translation
2019-12-12 01:03:56 -05:00
0608870c29 add missing string and translation
add missing string in "itemcontextmenu.js"
2019-12-12 05:47:39 +00:00
grafixeyehero
e18d49556e change btn split style 2019-12-11 20:51:44 +03:00
dkanada
4e683c4fca fix context menu margin and user preference buttons 2019-12-11 23:34:29 +09:00
dkanada
e108997376 Merge pull request #615 from AndreCarvalho/master
Add option to randomly sort music albums
2019-12-10 22:54:02 +09:00
dkanada
5badb22aa3 Merge pull request #618 from Wunax/fix-bug-hiding-videoosd-buttons
Fix a bug that hides children elements in the videoosd
2019-12-10 22:53:44 +09:00
SaddFox
abb2433b0b Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2019-12-09 23:16:16 -05:00
nextlooper42
aa8fb992aa Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2019-12-09 23:16:10 -05:00
tanto faz
9cc20ebc4c Translated using Weblate (Portuguese (Brazil))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2019-12-09 23:16:10 -05:00
Roy Sigurd Karlsbakk
af79d6fd69 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2019-12-09 23:16:00 -05:00
grafixeyehero
e09f868d99 revert back padded-left and padded-right 2019-12-10 02:32:22 +03:00
grafixeyehero
156f162d2e make space between name and controller 2019-12-10 02:15:36 +03:00
grafixeyehero
08b00ac385 remove itembackdropfader 2019-12-10 01:26:15 +03:00
grafixeyehero
dbbe5809e1 increase detailimageprogresscontainer width 2019-12-10 01:06:11 +03:00
grafixeyehero
a2734a34bc extra bottom padding 2019-12-10 00:59:58 +03:00
grafixeyehero
7f292093eb increase detailimagecontainer width 2019-12-10 00:58:53 +03:00
grafixeyehero
67e289d363 revert back padded-left and padded-right 2019-12-10 00:56:19 +03:00
redSpoutnik
b0d4b94140 reset subtitle offset on track change 2019-12-09 22:29:03 +01:00
redSpoutnik
aca0fb09bc Simplify vtt subtitle offset (firefox compatibility) 2019-12-09 21:38:09 +01:00
grafixeyehero
7b61b5d2e0 fix detailImageProgressContainer position 2019-12-09 22:18:13 +03:00
dkanada
e376ddff08 Merge pull request #617 from dmitrylyzo/fix-608-1
Fix variable definition place
2019-12-09 19:29:55 +09:00
Jaime
867a9b3a58 Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-12-08 20:20:24 -05:00
grafixeyehero
6a16d84e71 redesign detail page 2019-12-09 01:03:08 +03:00
NunzioArdi
03b608490f Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-12-08 16:01:38 -05:00
Matzi24GR
909156711c Translated using Weblate (Greek)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/el/
2019-12-08 08:15:58 -05:00
Michael Berggren
398b399ec6 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2019-12-07 18:16:29 -05:00
Pavel Sochor
8fd766ccb2 Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2019-12-07 18:16:28 -05:00
translit
d7d196bc38 Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-12-07 18:16:28 -05:00
tanto faz
61b94914b3 Translated using Weblate (Portuguese (Brazil))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/
2019-12-07 18:16:28 -05:00
TheManchineel
ea2f4b08ba Translated using Weblate (Italian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/
2019-12-07 18:16:25 -05:00
memnos
a285fbc7e1 Translated using Weblate (Italian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/
2019-12-07 18:16:17 -05:00
Nutjob
bcb799593d Translated using Weblate (Italian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/
2019-12-07 18:16:16 -05:00
gustinn
832e8c00e7 Translated using Weblate (Icelandic)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/is/
2019-12-07 18:16:14 -05:00
bugthug
11c4aeffdb Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/
2019-12-07 18:16:05 -05:00
ashtez
ca1c05eeee Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-12-07 18:15:59 -05:00
Dominik
ed59c25c1b Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-12-07 18:15:58 -05:00
alex6480
23028abe4c Translated using Weblate (Danish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/
2019-12-07 18:15:57 -05:00
Dave Child
d544877050 Fix for card image scaling problem
Card images were losing aspect, change to "background-size: cover" to fix.
2019-12-07 15:00:33 +00:00
Thomas Vandemeulebroucke
7ab2676093 Fix a bug that hides children elements in the videoosd 2019-12-07 14:20:09 +01:00
Dmitry Lyzo
eebeb24db2 Fix variable definition place 2019-12-07 12:20:32 +03:00
Alexandre
a177940c3e Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-12-05 21:35:52 -05:00
WtK0040
8394fa59b7 Translated using Weblate (Afrikaans)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/af/
2019-12-05 19:06:20 -05:00
André Carvalho
5f41eef198 Revert unneeded translation 2019-12-05 15:34:35 +00:00
André Carvalho
44ec998690 Add option to randomly sort music albums 2019-12-05 10:21:26 +00:00
dkanada
ba8949aa36 Merge pull request #604 from grafixeyehero/collection-padding
Fix collection padding in TV layout
2019-12-05 15:14:27 +09:00
grafixeyehero
f8ccbcc5c7 apply suggestion change 2019-12-04 22:37:55 +03:00
dkanada
b67e31791d Merge pull request #613 from redSpoutnik/reset-subtitle-sync
reset subtitle offset on next episode play
2019-12-05 02:33:39 +09:00
dkanada
b35a6e17eb Merge pull request #612 from grafixeyehero/fix-searchresult-btnscroller
Fix Scroll arrows missing when searching
2019-12-05 02:32:57 +09:00
redSpoutnik
3b1ff61ea3 reset subtitleOffset: remove unnecessary check 2019-12-04 18:13:31 +01:00
dkanada
9599273f00 Merge pull request #584 from Nickbert7/patch-1
Enable remote control navigation
2019-12-05 02:02:28 +09:00
Niklas Fäth
e3fbfbeeff Update src/nowplaying.html
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-12-04 17:50:16 +01:00
dkanada
21321a8d8e Merge pull request #601 from grafixeyehero/fix
Fix webcomponents-lite bundling
2019-12-05 01:11:42 +09:00
WtK0040
89465d2c82 Added translation using Weblate (Afrikaans) 2019-12-04 10:07:10 -05:00
TheGoose
38e4c75a86 Translated using Weblate (English (United States))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-12-04 03:15:51 -05:00
baysonfox
595067e98e Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-12-03 20:15:50 -05:00
WtK0040
7c4810974f Translated using Weblate (English (United States))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-12-03 20:15:49 -05:00
dkanada
fa6a90f0f4 Merge pull request #597 from dkanada/firefox
Minor changes to improve Firefox support
2019-12-04 01:27:48 +09:00
dkanada
50ca98b2a2 Merge pull request #610 from YouKnowBlom/library-path-fix
Fix existing library folder path returning undefined
2019-12-04 00:12:05 +09:00
dkanada
900f92d7e0 minor readme changes 2019-12-03 23:17:01 +09:00
dkanada
69b90fa9cb merge remote-tracking branch 'upstream/master' into firefox 2019-12-03 23:14:20 +09:00
dkanada
f32e3dfcf9 Merge pull request #605 from ringmatter/webpack-serve
Add support for local webpack devserver development
2019-12-03 23:13:05 +09:00
dkanada
375934ed13 remove exceptions from user preference builder 2019-12-03 23:06:33 +09:00
Andreas B
5a5bb04559 Fix existing library folder path returning undefined
Resolves: #588
2019-12-03 12:32:02 +01:00
Jonas Lundberg
6c84f3c845 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2019-12-03 03:15:57 -05:00
Åskar Andersson
c7064d1786 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2019-12-03 03:15:57 -05:00
WWWesten
cf4bb3ef98 Translated using Weblate (Kazakh)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/
2019-12-03 03:15:56 -05:00
redSpoutnik
cedaa66bf8 reset subtitleOffset and showtrackOffset values on next episode play 2019-12-02 21:08:09 +01:00
grafixeyehero
396652d31b Fix Scroll arrows missing when searching 2019-12-02 22:48:14 +03:00
KingsFourze
6fc86211c6 Translated using Weblate (Chinese (Traditional))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2019-12-01 11:15:47 -05:00
KingsFourze
ec2e153f9c Translated using Weblate (Chinese (Hong Kong))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/
2019-12-01 11:15:47 -05:00
ringmatter@fastmail.com
4a0cfb5be9 ADDED standalone.js script to inject standalone mode in dev server 2019-12-01 09:14:10 +01:00
ZhiGang Zhung
e896716011 Translated using Weblate (Chinese (Hong Kong))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/
2019-11-30 22:12:41 -05:00
KingsFourze
a000b17bcd Translated using Weblate (Chinese (Hong Kong))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/
2019-11-30 22:12:41 -05:00
Ales Komarek
ef18ab4a72 Translated using Weblate (Czech)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2019-11-30 18:15:50 -05:00
ringmatter@fastmail.com
61ce341e6f UPDATED readme 2019-11-30 18:52:46 +01:00
ringmatter@fastmail.com
eb92a68568 ADDED webpack-concat-plugin to inject legacy apploader script 2019-11-30 15:16:08 +01:00
dkanada
7abe22780b move some css files to global folder 2019-11-30 20:46:32 +09:00
WWWesten
5e4cc4f258 Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-11-30 05:15:45 -05:00
dkanada
e1009d3d67 add code suggestions 2019-11-30 10:51:24 +09:00
grafixeyehero
0821d0ad9e apply suggestion change 2019-11-29 19:43:37 +03:00
dkanada
78fd41ef05 Merge pull request #594 from grafixeyehero/backdrop
Fix some issues with the backdrop image
2019-11-30 00:06:18 +09:00
Robert Gründler
ecc3b17aca ADDED support for local webpack devserver development 2019-11-29 14:03:16 +01:00
Mehmet Can Kanpolat
7be7e9fd67 Translated using Weblate (Turkish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/
2019-11-28 22:16:35 -05:00
TheGoose
d709bb9104 Translated using Weblate (English (United States))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-11-28 22:16:35 -05:00
TheGoose
e3ce8a1e1a Translated using Weblate (English (United Kingdom))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/
2019-11-28 22:16:35 -05:00
grafixeyehero
358b4825e1 fix collection padding in tv layout 2019-11-29 01:08:05 +03:00
grafixeyehero
81b78035c0 Revert back theme style 2019-11-29 00:33:44 +03:00
dkanada
ecabb4cf65 Merge pull request #600 from Wunax/fix-connect-server-no-autologin
Fix can't connect to server if enableAutoLogin is false
2019-11-29 05:11:36 +09:00
grafixeyehero
7afdc4b2b1 Fix enable backdrops 2019-11-28 22:46:57 +03:00
grafixeyehero
06b42973f4 apply suggestion change 2019-11-28 20:27:08 +03:00
dkanada
cff7f3b9cb Merge pull request #593 from jellyfin/dkanada-patch-1
Update readme
2019-11-29 00:57:09 +09:00
dkanada
eb8eb50a8a Merge pull request #544 from dmitrylyzo/scrollmanager
Add ScrollManager to control scrolling on focus
2019-11-28 23:56:25 +09:00
dkanada
906442fba0 Merge branch 'master' into scrollmanager 2019-11-28 23:37:00 +09:00
dkanada
59e9be84dd Merge pull request #563 from dmitrylyzo/focus_pageload
Add autofocus on page load
2019-11-28 23:35:51 +09:00
dkanada
953ac77e4d Merge pull request #582 from grafixeyehero/replace-unicode
Replacing all Unicode icon
2019-11-28 16:41:21 +09:00
Mehmet Can Kanpolat
f444c6c910 Translated using Weblate (Turkish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/
2019-11-28 00:15:45 -05:00
SaddFox
7af9af26d5 Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2019-11-28 00:15:44 -05:00
grafixeyehero
0eddf1317c pick webcomponents-lite 2019-11-27 23:55:41 +03:00
grafixeyehero
be886982a2 revert back document-register-element 2019-11-27 22:07:33 +03:00
grafixeyehero
bf6b621337 apply suggestion change 2019-11-27 21:00:22 +03:00
grafixeyehero
1a63de77e1 apply suggestion change 2019-11-27 20:39:45 +03:00
grafixeyehero
f28074fb9e make screensaver manager get user settings 2019-11-27 18:02:38 +03:00
Dmitry Lyzo
bcf79b2d57 Fix style 2019-11-27 16:24:22 +03:00
Dmitry Lyzo
1f2d8ecc13 Return focused element 2019-11-27 16:23:27 +03:00
Dmitry Lyzo
c677708819 Apply suggestions from code review 2019-11-27 14:30:56 +03:00
Dmitry Lyzo
3752db775b Fix style 2019-11-27 14:13:16 +03:00
Dmitry Lyzo
1d045d172b Update src/components/scrollManager.js
Co-Authored-By: Vasily <JustAMan@users.noreply.github.com>
2019-11-27 13:31:18 +03:00
Mehmet Can Kanpolat
1d0e56c0ae Translated using Weblate (Turkish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/
2019-11-27 04:15:50 -05:00
WWWesten
29a8f95b74 Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/
2019-11-27 04:15:50 -05:00
Cornel
fc5f4f674b Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/
2019-11-27 04:15:50 -05:00
Thomas Schwery
01d84c2077 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-11-27 04:15:38 -05:00
dkanada
a9c1425ddd Merge pull request #596 from Wunax/fix-input-user-avatar
Fix input field user avatar in a wrong position
2019-11-27 14:12:53 +09:00
grafixeyehero
e3c21d56d5 Fix style 2019-11-26 23:06:48 +03:00
grafixeyehero
04ce2744eb bundle isn't working well on Firefox 2019-11-26 23:03:03 +03:00
Thomas Vandemeulebroucke
175c7ed252 Fix can't connect to server if enableAutoLogin is false 2019-11-26 11:32:47 +01:00
Mehmet Can Kanpolat
1fb7e6c839 Translated using Weblate (Turkish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/
2019-11-26 03:15:46 -05:00
ZsiGiT
ed06b15afd Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-11-26 03:15:37 -05:00
Leo Verto
9b71211a10 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-11-26 03:15:36 -05:00
dkanada
c97089b52c minor code refactor 2019-11-26 03:15:23 +09:00
dkanada
81fe0b47f3 fix charset issue on firefox 2019-11-26 03:10:05 +09:00
dkanada
d4a8bc9f37 add second link to weblate 2019-11-26 00:26:00 +09:00
Thomas Vandemeulebroucke
54fb804459 Fix input field user avatar in a wrong position 2019-11-25 16:19:12 +01:00
grafixeyehero
4441c32c4b add feature secrensaver 2019-11-25 17:15:23 +03:00
Moritz
615b814cd9 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-11-24 21:25:31 -05:00
Leo Verto
a93a8c2a54 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-11-24 21:25:31 -05:00
grafixeyehero
bad156654b remove backdrop call 2019-11-24 20:43:37 +03:00
dkanada
6068ac02ff update readme 2019-11-24 23:59:42 +09:00
grafixeyehero
080b3365d6 Merge branch 'master' of https://github.com/jellyfin/jellyfin-web into replace-unicode
# Conflicts:
#	src/components/guide/guide.js
#	src/components/mediainfo/mediainfo.js
#	src/components/multiselect/multiselect.js
#	src/components/playback/brightnessosd.js
#	src/components/recordingcreator/recordingbutton.js
#	src/components/userdatabuttons/emby-ratingbutton.js
#	src/controllers/favorites.js
2019-11-24 17:45:48 +03:00
dkanada
79cd6a7552 Merge pull request #545 from ferferga/artworks2
Improved appearance of images and artworks - Part 3
2019-11-24 21:38:22 +09:00
dkanada
5af72d6c9f Merge branch 'master' into artworks2 2019-11-24 21:34:30 +09:00
Mehmet Can Kanpolat
515fcab3e3 Translated using Weblate (Turkish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/
2019-11-24 04:15:41 -05:00
grafixeyehero
acc132cc6c remove comment 2019-11-23 23:43:06 +03:00
grafixeyehero
016eb79885 make compatible 2019-11-23 23:25:10 +03:00
grafixeyehero
3f913bcd29 initial add screen sever 2019-11-23 23:00:44 +03:00
dkanada
b7b34cba15 Merge pull request #568 from grafixeyehero/icon
update Icon for medialibrarypage, userprofile, device, multiselect and installedplugins
2019-11-24 00:02:31 +09:00
grafixeyehero
34474aea01 apply suggestion change 2019-11-23 16:02:57 +03:00
dkanada
3d26136c5d Merge pull request #548 from grafixeyehero/Person
Add favorite people section to favorite tab
2019-11-23 15:08:21 +09:00
grafixeyehero
b77143797c apply suggestion change 2019-11-22 21:32:51 +03:00
grafixeyehero
3f52ec10a0 Merge branch 'master' of https://github.com/jellyfin/jellyfin-web into icon
# Conflicts:
#	src/components/multiselect/multiselect.js
#	src/controllers/devices.js
2019-11-22 19:49:01 +03:00
dkanada
dca0700770 Merge pull request #583 from Wunax/fix-player-aspect-ratio
Fixed set aspect ratio option in the player
2019-11-23 01:41:51 +09:00
grafixeyehero
38ac5766c8 Merge branch 'master' of https://github.com/jellyfin/jellyfin-web into Person
# Conflicts:
#	src/controllers/favorites.js
2019-11-22 19:06:37 +03:00
dkanada
3739741786 Add some linting rules for the CI (#587)
* enable one-var rule

* enable indent rule

* enable no-multiple-empty-lines rule

* enable no-empty rule

* enable no-trailing-spaces rule

* enable no-extra-semi rule

* add eslint rules to fix block spacing

* enable max-statements-per-line rule

* enable brace-style rule

* fix some spacing issues and add future rules

* add code suggestions
2019-11-22 18:29:38 +03:00
Niklas Fäth
092a8fd3e0 hide during local playback 2019-11-22 16:01:25 +01:00
Niklas Fäth
347a0e1910 add feature back 2019-11-22 15:59:48 +01:00
zhuzhe1983
0b0ea7f406 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-11-21 18:15:37 -05:00
rokoh
cd63b5ef3a Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-11-21 18:15:36 -05:00
Niklas Fäth
72c2be06ae Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-11-21 18:15:36 -05:00
AdmiralAnimE
ba22a1ecef Translated using Weblate (Bulgarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/bg/
2019-11-21 18:15:36 -05:00
grafixeyehero
8a360772a2 apply suggestion change 2019-11-22 00:20:42 +03:00
grafixeyehero
58b09ca999 fix padding 2019-11-22 00:04:02 +03:00
Dmitry Lyzo
a37e0fb47a Fix minimumScrollY hack 2019-11-21 21:48:35 +03:00
Niklas Fäth
1690ffb86d rename button 2019-11-21 11:13:21 +01:00
Niklas Fäth
21b942cf39 Rename Button 2019-11-21 11:11:27 +01:00
Niklas Fäth
d74939f754 Update Layout 2019-11-21 10:57:55 +01:00
Dmitry Lyzo
b3df632164 Add support for easing animated scroll. 2019-11-21 00:07:53 +03:00
Dmitry Lyzo
e86058dc8c Add document scroll wrapper to unify scrolling and to support for webOS 2/3 (browser only) 2019-11-21 00:07:53 +03:00
Dmitry Lyzo
90f565166e Fix "fixed element" condition 2019-11-21 00:07:53 +03:00
Dmitry Lyzo
0502e984ad Fix animated scroll of "smooth scrolled" elements in browsers that support smooth scroll (Chrome/Firefox) 2019-11-21 00:07:53 +03:00
Dmitry Lyzo
fe87abc5a8 Split 'scrollTo' function 2019-11-21 00:07:53 +03:00
Dmitry Lyzo
c0fbce32ce Fix compatibility with older browsers (webOS 2/3) 2019-11-21 00:07:53 +03:00
Dmitry Lyzo
cbd64f6b4e Add animated smooth scrolling 2019-11-21 00:07:53 +03:00
Dmitry Lyzo
c0783dbe8e Add scroll manager with base functionality 2019-11-21 00:07:53 +03:00
Niklas Fäth
f7fd716f50 Collaps sections 2019-11-20 18:06:15 +01:00
Niklas Fäth
16feba6dff Move Button 2019-11-20 18:03:55 +01:00
Niklas Fäth
3a6275a05c Center Buttons 2019-11-20 18:02:32 +01:00
Niklas Fäth
e05e635b44 Show/Hide Buttons 2019-11-20 18:01:58 +01:00
Thomas Vandemeulebroucke
e8875f8362 Fixed set aspect ratio option in the player 2019-11-20 15:13:15 +01:00
Niklas Fäth
f1cce1ad76 Hides message section during local playback of music 2019-11-20 14:46:03 +01:00
Niklas Fäth
5453881ea1 Send text and messages via remote control
The needed logic to show/hide the section where needed is already there:
3419230e89/src/components/remotecontrol/remotecontrol.js (L206)
2019-11-20 14:29:10 +01:00
dkanada
3419230e89 Merge pull request #580 from grafixeyehero/apphost
Update apphost appVersion to 10.5.0
2019-11-20 21:22:28 +09:00
dkanada
800137886c Merge pull request #573 from dkanada/style
Align scroller items with heading
2019-11-20 12:08:42 +09:00
dkanada
c1b866d9c9 Merge pull request #571 from dkanada/select-server
Fix select server redirect and remove more dependencies
2019-11-20 12:08:19 +09:00
grafixeyehero
1da8876811 Replace all Unicode icon with there value 2019-11-20 00:24:54 +03:00
Aragon
10a572661a Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/
2019-11-19 16:15:29 -05:00
grafixeyehero
647f403f08 Update apphost appVersion to 10.5.0 2019-11-19 19:50:12 +03:00
dkanada
beedbca92c fix padding for normal item containers 2019-11-20 00:34:20 +09:00
dkanada
957184b81c Merge pull request #566 from dmitrylyzo/tv_playback_navigation
Make navigation and playback control TV-friendly
2019-11-19 09:10:09 +09:00
Thomas Schwery
cb61fa699f Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-11-18 15:15:27 -05:00
Dmitry Lyzo
6348367711 Apply suggestions from code review 2019-11-18 17:31:09 +03:00
Thomas Schwery
d869a24286 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-11-17 00:15:26 -05:00
Anders Bengtsson
d65011449b Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/
2019-11-15 22:15:21 -05:00
dkanada
3283bf2393 Merge pull request #577 from dmitrylyzo/#572-ipadpro
Fix iOS platform detection #572
2019-11-15 13:12:04 +09:00
swinkworld
b19d45d2f9 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-11-14 20:15:22 -05:00
tluciomiranda
b5840abc46 Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-11-14 20:15:21 -05:00
ADRI IDZWAN MANSOR
d64cd25482 Translated using Weblate (Malay)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ms/
2019-11-14 20:15:20 -05:00
Niklas Fäth
496ee55a3a Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-11-14 20:15:18 -05:00
dkanada
109ea9e50c Merge pull request #578 from ryan-hartzell/login-autofill-attributes
Add autocomplete attributes to login fields
2019-11-15 10:05:59 +09:00
Dmitry Lyzo
22d0a5705d Fix compatibility with older browsers (webOS 2/3) 2019-11-14 23:55:44 +03:00
Dmitry Lyzo
e907350700 Disable autoFocus in user settings on non-TV layouts (in sync with AutoFocuser) 2019-11-14 23:32:31 +03:00
Dmitry Lyzo
472d391641 Add autofocus on page load 2019-11-14 23:32:31 +03:00
Dmitry Lyzo
e588edbcca Disable AutoFocuser on non-TV layouts 2019-11-14 23:32:31 +03:00
Dmitry Lyzo
3962dcf58e Add autofocus on itemsContainer 2019-11-14 23:32:26 +03:00
Dmitry Lyzo
7a10be5933 Add autofocus on page load 2019-11-14 21:04:01 +03:00
Ryan Hartzell
b004915f96 Eliminate odd formatting of login.html 2019-11-14 06:48:06 -08:00
Dmitry Lyzo
11b6e83d69 Apply suggestions from code review 2019-11-14 16:29:33 +03:00
Ryan Hartzell
475af6a0da Update CONTRIBUTORS.md 2019-11-13 20:06:25 -08:00
Ryan Hartzell
ff2b27b32b Add autocomplete attributes to login fields 2019-11-13 19:44:31 -08:00
Dmitry Lyzo
cdfa115ec0 Fix iOS platform detection #572 2019-11-13 22:00:27 +03:00
dkanada
88db651eea Merge pull request #576 from anthonylavado/fix-manifest
Remove the leading /web/ from the manifest to avoid PWA titles
2019-11-14 00:51:29 +09:00
Anthony Lavado
ce62c58b08 Remove the leading /web/ from the manifest to avoid PWA titles
Fixes #575.

After this is added, whenever someone changes their base URL, they will have to make a new shortcut on their homescreen. Tested on iOS, have not tested on Android. Desktop Web remains unaffected.
2019-11-13 02:15:37 -05:00
Dmitry Lyzo
8df85172cb Apply suggestions from code review 2019-11-13 00:30:33 +03:00
Dmitry Lyzo
e090b78d66 Apply suggestions from code review
Co-Authored-By: Vasily <JustAMan@users.noreply.github.com>
2019-11-13 00:19:00 +03:00
ZsiGiT
4b869a41c6 Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-11-12 04:15:16 -05:00
dkanada
6ad9e090f6 align scroller items with heading 2019-11-12 00:23:27 +09:00
Libor Filípek
17ea143b6b Translated using Weblate (Czech)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2019-11-11 07:15:13 -05:00
Dmitry Lyzo
ad8fe23ef8 Make login card scalable on focus (#535)
* Make login card scalable on focus
* Remove focus related classes
2019-11-11 12:28:27 +03:00
dkanada
ffd3886372 improve some comments 2019-11-11 01:59:23 +09:00
dkanada
b124427039 move remaining libraries to new folder 2019-11-11 01:47:28 +09:00
dkanada
105891b409 move more dependencies to webpack 2019-11-11 01:45:01 +09:00
dkanada
d11e93b0da redirect to select server if no credentials found 2019-11-11 01:39:06 +09:00
nextlooper42
9c47f8fc1c Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/
2019-11-09 07:15:12 -05:00
Sander Lambrechts
d260cf5390 Translated using Weblate (Dutch)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/
2019-11-09 07:15:08 -05:00
Dmitry Lyzo
3896c18e26 Make navigation and playback control TV-friendly 2019-11-09 11:48:52 +03:00
Andrew Mahone
33f016bb09 Merge remote-tracking branch 'origin/master' into suboctopus 2019-11-08 08:54:12 -05:00
Andrew Mahone
0880f36dab Fallback to empty fonts list when server doesn't send MediaAttachments. 2019-11-08 08:38:21 -05:00
DJSweder
321da7ae3e Translated using Weblate (Czech)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/
2019-11-08 08:03:41 -05:00
dkanada
c10f3feb31 Merge pull request #549 from grafixeyehero/webpack-asset
Move bower_components libraries from source control to npm
2019-11-07 15:52:14 +09:00
grafixeyehero
863eb067c2 move assets to webpack.common.js 2019-11-07 03:02:32 +03:00
grafixeyehero
af2b49ac30 change directory for almada and requrie,js 2019-11-06 19:25:24 +03:00
dkanada
77a8828018 Merge pull request #554 from ThatNerdyPikachu/patch-2
Actually make DatePlayed use a colon on ItemDetails
2019-11-07 01:04:56 +09:00
dkanada
3a4892d71f Merge pull request #551 from dkanada/header
Remove dashboard icon from header
2019-11-07 01:04:48 +09:00
grafixeyehero
23677db990 Deminify part 2 (#509)
This de-minifies and de-uglifies `controllers` subdirectory
2019-11-06 13:43:39 +03:00
grafixeyehero
dd109c3324 change single quote to double quote 2019-11-05 18:50:41 +03:00
grafixeyehero
d536866ed5 update muliselect icon 2019-11-05 18:43:10 +03:00
grafixeyehero
faa1a263b9 change ironicon to icon 2019-11-05 18:24:39 +03:00
grafixeyehero
d3c3501632 update Icon 2019-11-05 18:00:47 +03:00
Joshua M. Boniface
f98a43f06f Merge pull request #567 from jellyfin/stale-bread
Add label to exclude issue from Stale
2019-11-04 09:49:18 -05:00
Anthony Lavado
536e44c495 Update stale.yml 2019-11-04 02:34:52 -05:00
Aragon
cf6c077b93 Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/
2019-11-03 20:14:57 -05:00
dkanada
09227c8e84 Merge pull request #565 from dmitrylyzo/menu_focuscontainer_direction
Add appropriate focuscontainer classes to menus
2019-11-03 14:30:57 +09:00
dkanada
230424b321 Merge pull request #564 from dmitrylyzo/focus_library_order
Fix focus of library order item after change
2019-11-03 14:30:41 +09:00
Aragon
ef546edf89 Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/
2019-11-03 01:14:56 -04:00
Dmitry Lyzo
bdc6796184 Added appropriate focuscontainer styles 2019-11-02 23:53:16 +03:00
Dmitry Lyzo
aecd2a5b27 Fix focus of library order item after change 2019-11-02 23:37:54 +03:00
GigaFyde
643a7289b4 Translated using Weblate (Dutch)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/
2019-11-02 00:14:57 -04:00
Juhos István
79266230f9 Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-11-02 00:14:57 -04:00
dkanada
a944bc62ef Merge pull request #533 from dmitrylyzo/remove_tabs_autoactivation
Tizen: Remove tab activation by focus
2019-11-02 02:38:49 +09:00
dkanada
4cb0cd5f95 Merge pull request #534 from dmitrylyzo/season_item_resume
Set "Resume" action on season item on TV
2019-11-02 02:21:47 +09:00
dkanada
2124bbbdaa Merge pull request #520 from grafixeyehero/cleanup-connect.emby.media
Cleanup connect.emby.media
2019-11-02 02:06:24 +09:00
delfino434
71c148fc01 Translated using Weblate (Turkish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/
2019-10-31 20:15:03 -04:00
grafixeyehero
f6a8b81959 merge onEnsureConnectUserDone method with onLocalUserDone 2019-10-29 00:29:28 +03:00
grafixeyehero
365240e17a Restore mergeServers condition 2019-10-28 21:35:49 +03:00
grafixeyehero
a9b439e458 restore enableautologin condition 2019-10-28 21:04:01 +03:00
grafixeyehero
ee0b3f9ce9 remove reaming connectuser 2019-10-28 20:44:08 +03:00
grafixeyehero
e7023dd51a Restore deleteServer 2019-10-28 20:37:39 +03:00
grafixeyehero
0b13b0328a Remove connectuser 2019-10-28 20:35:35 +03:00
grafixeyehero
d20b1fed68 remove isLoggedIntoConnect 2019-10-28 18:56:48 +03:00
Andrew Mahone
1927c2eb9b Merge remote-tracking branch 'origin/master' into suboctopus 2019-10-28 10:05:38 -04:00
Andrew Mahone
1abc7283ab Remove use of transformPath when copying libass worker files. 2019-10-28 09:54:04 -04:00
gnehs
5eb28e69d0 Translated using Weblate (Chinese (Traditional))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2019-10-28 06:15:18 -04:00
Pan Renzhou
96bed86736 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-10-28 06:14:55 -04:00
TheSergioEduP
2498014aac Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-10-28 06:14:55 -04:00
tluciomiranda
d916dd7268 Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-10-28 06:14:55 -04:00
ZsiGiT
54de766bb7 Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-10-28 06:14:50 -04:00
ThePBone
99c8134b1a Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-10-28 06:14:49 -04:00
grafixeyehero
1c84e18c8a remove reaming getconnect related 2019-10-28 01:55:05 +03:00
grafixeyehero
1e5568943c remove ensureConnectUser 2019-10-28 01:31:45 +03:00
grafixeyehero
651a53d64a Move almada and require.js from source control to npm 2019-10-27 16:55:18 +03:00
delfino434
f64c1c08a3 Translated using Weblate (Turkish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/
2019-10-27 02:59:33 -04:00
Pika
c565c9015b Actually make DatePlayed use a colon on ItemDetails 2019-10-26 20:45:14 -04:00
dkanada
e89a45e887 Merge pull request #511 from grafixeyehero/Deminify-part-3-components
Deminify part 3
2019-10-27 04:01:38 +09:00
gnehs
5bd7b3d0dd Translated using Weblate (Chinese (Traditional))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/
2019-10-26 12:12:11 -04:00
Joshua M. Boniface
3ad7993d13 Merge pull request #540 from grafixeyehero/identify-path
Add file path to itemidentifier
2019-10-26 11:48:31 -04:00
Joshua M. Boniface
ee1149644d Merge pull request #507 from redSpoutnik/fix-subtitle-sync
Fix subtitle sync
2019-10-26 11:47:11 -04:00
Joshua M. Boniface
47b8c2bcb3 Merge pull request #550 from grafixeyehero/metadata-editor-livetvloading
Fix Metadata Manager Live TV Loading..
2019-10-26 11:44:57 -04:00
grafixeyehero
2542339e42 restore condition for ensureConnectUser 2019-10-26 17:42:19 +03:00
grafixeyehero
aca1fca0c2 remove addAuthericatonInfoconnect 2019-10-26 17:41:47 +03:00
SaddFox
effd80caa2 Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2019-10-26 06:14:54 -04:00
redSpoutnik
c30e6b56a3 Update src/components/htmlvideoplayer/plugin.js
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-10-25 18:21:54 +02:00
redSpoutnik
608a3e3200 Update src/components/htmlvideoplayer/plugin.js
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-10-25 18:21:46 +02:00
redSpoutnik
f6eedbb221 Update src/components/htmlvideoplayer/plugin.js
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-10-25 18:21:38 +02:00
grafixeyehero
82fdc6fc33 move headeridenifyitemhelp on top 2019-10-25 18:47:25 +03:00
grafixeyehero
a36663da43 change single quote to double quote for itemidentifier 2019-10-25 18:31:26 +03:00
dkanada
fdb7c99ed4 remove dashboard icon from header 2019-10-25 23:14:42 +09:00
dkanada
0d8bc6fb46 Merge pull request #506 from grafixeyehero/deminify-2
Deminify
2019-10-25 22:22:13 +09:00
dkanada
1a2019bb0e Merge branch 'master' into deminify-2 2019-10-25 22:16:59 +09:00
tluciomiranda
d2b796e3cd Translated using Weblate (Portuguese (Portugal))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/
2019-10-25 00:14:42 -04:00
장건
fe8155c226 Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2019-10-25 00:14:40 -04:00
grafixeyehero
ab7d3b16e6 Fix metadata editor side bar live tv loading 2019-10-25 01:11:43 +03:00
Andrew Mahone
6eed80c863 Use embedded fonts with JavascriptSubtitlesOctopus renderer. 2019-10-24 12:03:27 -04:00
Andrew Mahone
3f3e5e6da5 Use JavascriptSubtitlesOctopus if canvas and web workers are available. 2019-10-24 12:03:27 -04:00
Joshua M. Boniface
5eb6a4b5ba Merge pull request #542 from grafixeyehero/wizardfinsih
Improve wizard finish page redirect
2019-10-24 09:36:18 -04:00
delfino434
d5464834c4 Translated using Weblate (Turkish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/
2019-10-24 02:14:52 -04:00
Joshua M. Boniface
6208f2b1c3 Merge pull request #519 from dhartung/fix-#518
Fix subtitle display from previous file in queue
2019-10-23 11:39:14 -04:00
Joshua M. Boniface
5a4498dca1 Merge branch 'master' into fix-#518 2019-10-23 11:37:49 -04:00
Rotekoppen
c1d88b1540 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2019-10-23 04:14:38 -04:00
emmanuel billeaud
f547188775 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/
2019-10-23 04:14:37 -04:00
dkanada
a5e71664ba Merge pull request #524 from grafixeyehero/Live-TV-Pagination
Fix minor style on home section Live TV
2019-10-23 07:26:57 +09:00
grafixeyehero
4999690d0c add HeaderFavoritePeople strings 2019-10-23 01:20:07 +03:00
grafixeyehero
5099c95c22 disable favorites rate button on season and studio 2019-10-23 01:19:14 +03:00
grafixeyehero
e8af133ed2 add person to favorite section 2019-10-23 01:14:32 +03:00
grafixeyehero
08f249b007 diminify favorites.js 2019-10-23 00:36:04 +03:00
seokjong
b6db366d0e Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2019-10-21 14:14:41 -04:00
ferferga
529e9102cd Improved appearance of images and artworks - Part 3 2019-10-21 16:24:36 +02:00
grafixeyehero
78576a7cb2 remove new line 2019-10-21 16:50:11 +03:00
Pan Renzhou
639637956e Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-10-20 16:14:32 -04:00
grafixeyehero
4abfc56fa8 fix code style 2019-10-19 16:06:08 +03:00
grafixeyehero
5461d81275 improve redirect 2019-10-19 15:42:28 +03:00
Scott Anecito
21a794d845 Translated using Weblate (Japanese)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ja/
2019-10-19 05:14:28 -04:00
schbal
437aa60c4b Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2019-10-19 05:14:27 -04:00
Anthony Lavado
eaeccec0c9 Merge pull request #541 from bilde2910/patch-1
Update CONTRIBUTORS.md
2019-10-18 15:01:17 -04:00
Marius Lindvall
363b81c16b Update CONTRIBUTORS.md
Adding credit for translations provided to Jellyfin in Norwegian via Weblate
2019-10-18 20:58:00 +02:00
grafixeyehero
9063e153c1 add item path 2019-10-18 17:05:50 +03:00
Marius Lindvall
9538478814 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2019-10-18 01:14:24 -04:00
grafixeyehero
223945bd36 clean up unused code 2019-10-17 21:33:19 +03:00
grafixeyehero
1e3b03dde1 manual minifying 2019-10-17 20:49:30 +03:00
grafixeyehero
df720d2d14 update suggestion change on connectionmanagers 2019-10-17 20:04:32 +03:00
schbal
5d23c354d2 Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2019-10-16 21:14:25 -04:00
tpishere
d09da51477 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/
2019-10-16 21:14:25 -04:00
grafixeyehero
9207ece95f Remove commented 2019-10-17 01:31:21 +03:00
grafixeyehero
9954eec88d revert channelmappers back 2019-10-17 00:06:32 +03:00
grafixeyehero
c7284dba87 update humanedate suggestion change 2019-10-17 00:02:23 +03:00
grafixeyehero
1d2744d7b9 update channelmapper suggestion change 2019-10-16 19:23:50 +03:00
grafixeyehero
0e6c54ecc2 update channelmapper 2019-10-16 18:48:42 +03:00
grafixeyehero
a1538a4ba6 missing var 2019-10-16 18:23:18 +03:00
Dmitry Lyzo
79cd65ea82 Set "Resume" action on season item on TV 2019-10-16 18:13:54 +03:00
Dmitry Lyzo
0299223b81 Remove tab activation on focus 2019-10-16 16:47:02 +03:00
Vasily
d4862df266 Merge pull request #523 from grafixeyehero/itemcontextmenu-icon
Add icon on item context menu
2019-10-16 12:30:26 +03:00
schbal
ba5623e32c Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2019-10-15 22:14:21 -04:00
grafixeyehero
b16534ba0a change to double quotes 2019-10-15 21:13:33 +03:00
grafixeyehero
36fae11a38 update schedulesdirect Suggested change 2019-10-15 20:18:55 +03:00
grafixeyehero
e3d8b14245 update favoriteitems Suggested change 2019-10-15 20:16:58 +03:00
grafixeyehero
d30ca44997 update activitylog Suggested change 2019-10-15 20:15:58 +03:00
grafixeyehero
a971c33b1e update accessschedule Suggested change 2019-10-15 20:15:22 +03:00
Vasily
66f3de495b Merge pull request #513 from thornbill/fix-swiper
Revert Swiper to fix initialization error
2019-10-15 13:27:35 +03:00
Vasily
5ce69ae514 Merge pull request #521 from dkanada/nowplaying
Fix save button in now playing controller
2019-10-15 12:52:38 +03:00
David Mouse
011fe01fd6 Translated using Weblate (English (United States))
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_US/
2019-10-15 03:14:20 -04:00
schbal
e2e8114bc8 Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2019-10-15 03:14:20 -04:00
delfino434
90f711c723 Translated using Weblate (Turkish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/
2019-10-15 03:14:18 -04:00
grafixeyehero
461a91890d Merge branch 'master' into Deminify-part-3-components 2019-10-14 18:39:04 +03:00
Fernando
e538a6d62c Improvements to the quality of artworks and user images - Part 2 (#512)
* Improved the overall appearance of user images

* Rounded photo in 'My profile' page

* Improved quality of media artwork

* fix some minor bugs introduced from a merge conflict
2019-10-13 15:46:22 -04:00
grafixeyehero
1d1042513f Remove padded class 2019-10-13 21:33:07 +03:00
schbal
f6617cb28c Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2019-10-13 12:14:23 -04:00
Axel Gabriel Calle Granda
e3cb0db53a Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/
2019-10-13 12:14:15 -04:00
redSpoutnik
bccb1e6147 Fix subtitle sync for .ass 2019-10-13 14:10:51 +02:00
grafixeyehero
6bf18d80e0 Add icon on item context menu 2019-10-12 21:32:05 +03:00
dkanada
8bdb6d795e fix save button in now playing controller 2019-10-12 16:17:17 +09:00
t1mothy666
b51a3fb497 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/
2019-10-11 22:14:11 -04:00
grafixeyehero
19ff6ae97a commit out onConnectUserSignIn 2019-10-11 21:30:32 +03:00
grafixeyehero
155ad2c6d2 commit out mergeserver 2019-10-11 20:35:12 +03:00
grafixeyehero
697c652f7c remove getconnectservers for promise array 2019-10-11 20:31:09 +03:00
grafixeyehero
1ec2c59e87 To be remove 2019-10-11 18:56:34 +03:00
grafixeyehero
d5c91f872b commit out to remove 2019-10-11 18:48:17 +03:00
grafixeyehero
bc44aa5604 Unminify connectionmanager.js 2019-10-11 18:47:17 +03:00
Daniel Hartung
4185456863 Added contributors entry 2019-10-11 15:48:52 +02:00
Daniel Hartung
63f804df32 Fixed #518 2019-10-11 15:48:28 +02:00
Marius Lindvall
adf7b1ae0c Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nb_NO/
2019-10-11 04:14:49 -04:00
SaddFox
877fd6a809 Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2019-10-11 04:14:18 -04:00
schbal
1d5c7173d9 Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2019-10-11 04:14:15 -04:00
Bohdan Rud
b853ea169d Translated using Weblate (Ukrainian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/
2019-10-11 04:14:13 -04:00
grafixeyehero
03a16287a0 remove query.Artistids conditions 2019-10-10 20:43:04 +03:00
grafixeyehero
af3579f328 update console.log livetvcomponents 2019-10-10 20:41:58 +03:00
grafixeyehero
d467499a7a remove new lines 2019-10-10 20:40:27 +03:00
redSpoutnik
029e015068 more readable statement to find showing textTrack 2019-10-10 17:45:56 +02:00
Vasily
bedd206df9 Merge pull request #510 from thornbill/translate-badge
Add translate badge to README
2019-10-10 10:40:49 +03:00
Bill Thornton
b4e5e4cb15 Revert Swiper to fix initialization error 2019-10-09 14:04:23 -04:00
grafixeyehero
2c111d2a59 humanedate 2019-10-09 19:37:49 +03:00
grafixeyehero
07aa20a2f7 tunerpicker 2019-10-09 19:35:12 +03:00
grafixeyehero
08ae592e0b groupedcards 2019-10-09 19:26:18 +03:00
grafixeyehero
72cb4bd169 favoriteitems 2019-10-09 19:23:47 +03:00
grafixeyehero
cae2898da2 activitylog 2019-10-09 19:19:20 +03:00
grafixeyehero
f86d2d47ac xmltv 2019-10-09 19:15:06 +03:00
grafixeyehero
3957592f31 schedulesdirect 2019-10-09 19:13:07 +03:00
grafixeyehero
0f268a4413 imageoptionseditor 2019-10-09 18:59:17 +03:00
grafixeyehero
c750ba55b4 channelmapper 2019-10-09 18:52:14 +03:00
grafixeyehero
2e4591b9ae accessschedule 2019-10-09 18:49:41 +03:00
Bill Thornton
29086a19c7 Add translate badge 2019-10-09 11:39:40 -04:00
schbal
3558ca28ef Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2019-10-09 09:14:38 -04:00
dkanada
0980707826 Merge pull request #496 from NathanPickard/removing-other
Removed Other from TV Guide data providers
2019-10-09 22:14:12 +09:00
dkanada
352573e5a6 remove otherOptionsMessage 2019-10-09 22:06:42 +09:00
redSpoutnik
7aa5d28510 Test correct function in getPlayerSubtitleOffset 2019-10-08 21:45:57 +02:00
redSpoutnik
8496b3d1f5 Fix subtitle sync for .vtt 2019-10-08 21:16:33 +02:00
schbal
3b7facd073 Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/
2019-10-08 15:06:22 -04:00
dkanada
b725d137a0 Merge pull request #491 from dkanada/shaka
Bundle flvjs and shaka and move all libs to one folder
2019-10-09 04:06:17 +09:00
grafixeyehero
61897f15e2 double quote 2019-10-08 21:00:31 +03:00
grafixeyehero
6eb8e1b8fa add console.log 2019-10-08 20:46:05 +03:00
grafixeyehero
0e306cad76 update taskbutton Suggested change 2019-10-08 20:14:43 +03:00
grafixeyehero
e7570d856f Update Suggested change 2019-10-08 19:54:02 +03:00
dkanada
930727eb28 apply code suggestions
Co-Authored-By: Vasily <JustAMan@users.noreply.github.com>
2019-10-08 23:43:02 +09:00
Fearst
7616b1cd35 Translated using Weblate (Vietnamese)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/
2019-10-08 08:40:08 -04:00
SaddFox
95c682482e Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/
2019-10-08 03:14:10 -04:00
ZsiGiT
9fd2933f25 Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/
2019-10-08 03:14:06 -04:00
ivunchata
37e2cc8746 Translated using Weblate (Bulgarian)
Translation: Jellyfin/Jellyfin Web
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/bg/
2019-10-08 03:14:05 -04:00
grafixeyehero
307e664286 wizardagreement.js 2019-10-08 01:30:21 +03:00
grafixeyehero
678b558935 userpassword.js 2019-10-08 01:30:02 +03:00
grafixeyehero
5ebf1bda80 themeloader.js 2019-10-08 01:29:47 +03:00
grafixeyehero
e0cf014197 wizarduserpage.js 2019-10-08 01:29:20 +03:00
grafixeyehero
e192f1f3c6 wizardstart.js 2019-10-08 01:28:58 +03:00
grafixeyehero
c94e970ac0 wizardsettings.js 2019-10-08 01:28:44 +03:00
grafixeyehero
f9b6b10ef4 wizardremoteaccess.js 2019-10-08 01:28:30 +03:00
grafixeyehero
3464b847a6 wizardfinishpage.js 2019-10-08 01:28:15 +03:00
grafixeyehero
fe08645a98 taskbutton.js 2019-10-08 01:03:49 +03:00
grafixeyehero
5bed7bbf35 searchtab.js 2019-10-08 01:03:29 +03:00
grafixeyehero
850c2c4baf playlists.js 2019-10-08 01:03:08 +03:00
grafixeyehero
f5e62cbd65 playlistedit.js 2019-10-08 01:02:37 +03:00
grafixeyehero
44ba92261d livetvcomponents.js 2019-10-08 01:02:07 +03:00
grafixeyehero
ecccf00fcb librarymenu.js 2019-10-08 01:01:20 +03:00
grafixeyehero
f7c8d7b044 librarybrowser.js 2019-10-08 00:58:10 +03:00
grafixeyehero
40e4f6a27a itembynamedetailpage.js 2019-10-08 00:57:40 +03:00
grafixeyehero
af8d421a8c autobackdrops.js 2019-10-08 00:56:51 +03:00
dkanada
27944af119 move all user preference controllers to folder 2019-10-06 19:56:06 +09:00
Nathan Pickard
2477c8343c Remove ForAdditionalLiveTvOptions string 2019-10-03 10:02:24 -07:00
Nathan Pickard
b19d3cfc0e Remove other action 2019-10-02 16:18:40 -07:00
Nathan Pickard
586bce429d Remove unused ButtonOther translations 2019-10-02 14:46:03 -07:00
dkanada
0c1c855eb8 remove duplicate define statement 2019-10-03 02:36:33 +09:00
dkanada
a260e33182 sort through the define statements 2019-10-03 02:33:21 +09:00
Nathan Pickard
76ac8c4dfc Removed Other from TV Guide data providers 2019-10-01 14:28:37 -07:00
dkanada
02a23ffaee bundle flvjs and shaka and move all libs to one folder 2019-10-01 00:51:56 +09:00
623 changed files with 40892 additions and 24761 deletions

View File

@@ -20,24 +20,21 @@ jobs:
steps:
- task: NodeTool@0
displayName: 'Install Node.js'
displayName: 'Install Node'
inputs:
versionSpec: '10.x'
- script: |
yarn install
displayName: 'Install dependencies'
- script: 'yarn install'
displayName: 'Install Dependencies'
- script: |
test -d dist
displayName: 'Check dist directory'
- script: 'test -d dist'
displayName: 'Check Build'
- script: |
yarn pack --filename jellyfin-web.tgz
displayName: 'Build package'
- script: 'yarn pack --filename jellyfin-web.tgz'
displayName: 'Bundle Release'
- task: PublishPipelineArtifact@1
displayName: 'Publish package'
displayName: 'Publish Release'
condition: succeeded()
inputs:
targetPath: '$(Build.SourcesDirectory)/jellyfin-web.tgz'
@@ -51,14 +48,16 @@ jobs:
steps:
- task: NodeTool@0
displayName: 'Install Node.js'
displayName: 'Install Node'
inputs:
versionSpec: '10.x'
- script: |
yarn install
displayName: 'Install dependencies'
- script: 'yarn install'
displayName: 'Install Dependencies'
- script: 'yarn run lint'
displayName: 'Run ESLint'
- script: |
yarn run lint
displayName: 'Run ESLint'
yarn run stylelint
displayName: 'Run stylelint'

1
.eslintignore Normal file
View File

@@ -0,0 +1 @@
libraries/

View File

@@ -1,4 +1,71 @@
env:
es6: true
es6: false
browser: true
amd: true
globals:
# New browser globals
DataView: readonly
MediaMetadata: readonly
Promise: readonly
# Deprecated browser globals
DocumentTouch: readonly
# Tizen globals
tizen: readonly
webapis: readonly
# WebOS globals
webOS: readonly
# Dependency globals
$: readonly
jQuery: readonly
queryString: readonly
requirejs: readonly
# Jellyfin globals
ApiClient: writable
AppInfo: writable
chrome: writable
ConnectionManager: writable
DlnaProfilePage: writable
Dashboard: writable
DashboardPage: writable
Emby: readonly
Events: writable
getParameterByName: writable
getWindowLocationSearch: writable
Globalize: writable
Hls: writable
humaneDate: writable
humaneElapsed: writable
LibraryMenu: writable
LinkParser: writable
LiveTvHelpers: writable
MetadataEditor: writable
pageClassOn: writable
pageIdOn: writable
PlaylistViewer: writable
UserParentalControlPage: writable
Windows: readonly
extends:
- eslint:recommended
rules:
block-spacing: ["error"]
brace-style: ["error"]
comma-dangle: ["error", "never"]
comma-spacing: ["error"]
eol-last: ["error"]
indent: ["error", 4, { "SwitchCase": 1 }]
keyword-spacing: ["error"]
max-statements-per-line: ["error"]
no-floating-decimal: ["error"]
no-multi-spaces: ["error"]
no-multiple-empty-lines: ["error", { "max": 1 }]
no-trailing-spaces: ["error"]
one-var: ["error", "never"]
semi: ["warn"]
space-before-blocks: ["error"]
# TODO: Fix warnings and remove these rules
no-redeclare: ["warn"]
no-unused-vars: ["warn"]
no-useless-escape: ["warn"]

1
.github/stale.yml vendored
View File

@@ -8,6 +8,7 @@ exemptLabels:
- future
- feature
- enhancement
- confirmed
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable

5
.gitignore vendored
View File

@@ -81,6 +81,9 @@ build/Release
node_modules/
jspm_packages/
# Dependency lockfile
package-lock.json
# TypeScript v1 declaration files
typings/
@@ -572,4 +575,4 @@ healthchecksdb
# End of https://www.gitignore.io/api/node,rider,macos,linux,windows,visualstudio,visualstudiocode
# dist for webpack output
dist
dist

143
.stylelintrc Normal file
View File

@@ -0,0 +1,143 @@
{
"plugins": [
"stylelint-no-browser-hacks/lib",
],
"rules": {
"at-rule-empty-line-before": [ "always", {
except: [
"blockless-after-same-name-blockless",
"first-nested",
],
ignore: ["after-comment"],
} ],
"at-rule-name-case": "lower",
"at-rule-name-space-after": "always-single-line",
"at-rule-no-unknown": true,
"at-rule-semicolon-newline-after": "always",
"block-closing-brace-empty-line-before": "never",
"block-closing-brace-newline-after": "always",
"block-closing-brace-newline-before": "always-multi-line",
"block-closing-brace-space-before": "always-single-line",
"block-no-empty": true,
"block-opening-brace-newline-after": "always-multi-line",
"block-opening-brace-space-after": "always-single-line",
"block-opening-brace-space-before": "always",
"color-hex-case": "lower",
"color-hex-length": "short",
"color-no-invalid-hex": true,
"comment-empty-line-before": [ "always", {
except: ["first-nested"],
ignore: ["stylelint-commands"],
} ],
"comment-no-empty": true,
"comment-whitespace-inside": "always",
"custom-property-empty-line-before": [ "always", {
except: [
"after-custom-property",
"first-nested",
],
ignore: [
"after-comment",
"inside-single-line-block",
],
} ],
"declaration-bang-space-after": "never",
"declaration-bang-space-before": "always",
"declaration-block-no-duplicate-properties": [
true,
{
ignore: ["consecutive-duplicates-with-different-values"]
}
],
"declaration-block-no-shorthand-property-overrides": true,
"declaration-block-semicolon-newline-after": "always-multi-line",
"declaration-block-semicolon-space-after": "always-single-line",
"declaration-block-semicolon-space-before": "never",
"declaration-block-single-line-max-declarations": 1,
"declaration-block-trailing-semicolon": "always",
"declaration-colon-newline-after": "always-multi-line",
"declaration-colon-space-after": "always-single-line",
"declaration-colon-space-before": "never",
"font-family-no-duplicate-names": true,
"function-calc-no-invalid": true,
"function-calc-no-unspaced-operator": true,
"function-comma-newline-after": "always-multi-line",
"function-comma-space-after": "always-single-line",
"function-comma-space-before": "never",
"function-linear-gradient-no-nonstandard-direction": true,
"function-max-empty-lines": 0,
"function-name-case": "lower",
"function-parentheses-newline-inside": "always-multi-line",
"function-parentheses-space-inside": "never-single-line",
"function-whitespace-after": "always",
"indentation": 4,
"keyframe-declaration-no-important": true,
"length-zero-no-unit": true,
"max-empty-lines": 1,
"media-feature-colon-space-after": "always",
"media-feature-colon-space-before": "never",
"media-feature-name-case": "lower",
"media-feature-name-no-unknown": true,
"media-feature-parentheses-space-inside": "never",
"media-feature-range-operator-space-after": "always",
"media-feature-range-operator-space-before": "always",
"media-query-list-comma-newline-after": "always-multi-line",
"media-query-list-comma-space-after": "always-single-line",
"media-query-list-comma-space-before": "never",
"no-descending-specificity": true,
"no-duplicate-at-import-rules": true,
"no-duplicate-selectors": true,
"no-empty-source": true,
"no-eol-whitespace": true,
"no-extra-semicolons": true,
"no-invalid-double-slash-comments": true,
"no-missing-end-of-source-newline": true,
"number-leading-zero": "always",
"number-no-trailing-zeros": true,
"plugin/no-browser-hacks": true,
"property-case": "lower",
"property-no-unknown": [
true,
{
"ignoreProperties": [
"user-drag"
]
}
],
"rule-empty-line-before": [ "always-multi-line", {
except: ["first-nested"],
ignore: ["after-comment"],
} ],
"selector-attribute-brackets-space-inside": "never",
"selector-attribute-operator-space-after": "never",
"selector-attribute-operator-space-before": "never",
"selector-combinator-space-after": "always",
"selector-combinator-space-before": "always",
"selector-descendant-combinator-no-non-space": true,
"selector-list-comma-newline-after": "always",
"selector-list-comma-space-before": "never",
"selector-max-empty-lines": 0,
"selector-pseudo-class-case": "lower",
"selector-pseudo-class-no-unknown": true,
"selector-pseudo-class-parentheses-space-inside": "never",
"selector-pseudo-element-case": "lower",
"selector-pseudo-element-colon-notation": "double",
"selector-pseudo-element-no-unknown": [
true,
{
"ignorePseudoElements": [
"cue"
]
}
],
"selector-type-case": "lower",
"selector-type-no-unknown": true,
"string-no-newline": true,
"unit-case": "lower",
"unit-no-unknown": true,
"value-list-comma-newline-after": "always-multi-line",
"value-list-comma-space-after": "always-single-line",
"value-list-comma-space-before": "never",
"value-list-max-empty-lines": 0,
}
}

View File

@@ -28,6 +28,12 @@
- [lewazo](https://github.com/lewazo)
- [Raghu Saxena](https://github.com/ckcr4lyf)
- [Nickbert7](https://github.com/Nickbert7)
- [ferferga](https://github.com/ferferga)
- [bilde2910](https://github.com/bilde2910)
- [Daniel Hartung](https://github.com/dhartung)
- [Ryan Hartzell](https://github.com/ryan-hartzell)
- [Thibault Nocchi](https://github.com/ThibaultNocchi)
- [MrTimscampi](https://github.com/MrTimscampi)
# Emby Contributors

View File

@@ -1,15 +1,64 @@
<h1 align="center">Jellyfin Web</h1>
<h3 align="center">The Free Software Media System</h3>
<h3 align="center">Part of the <a href="https://jellyfin.org">Jellyfin Project</a></h3>
---
<p align="center">
<img alt="Logo Banner" src="https://raw.githubusercontent.com/jellyfin/jellyfin-ux/master/branding/SVG/banner-logo-solid.svg?sanitize=true"/>
<br/><br/>
<a href="https://github.com/jellyfin/jellyfin-web"><img alt="GPL 2.0 License" src="https://img.shields.io/github/license/jellyfin/jellyfin-web.svg"/></a>
<a href="https://github.com/jellyfin/jellyfin-web/releases"><img alt="Current Release" src="https://img.shields.io/github/release/jellyfin/jellyfin-web.svg"/></a>
<br/>
<br/>
<a href="https://github.com/jellyfin/jellyfin-web">
<img alt="GPL 2.0 License" src="https://img.shields.io/github/license/jellyfin/jellyfin-web.svg"/>
</a>
<a href="https://github.com/jellyfin/jellyfin-web/releases">
<img alt="Current Release" src="https://img.shields.io/github/release/jellyfin/jellyfin-web.svg"/>
</a>
<a href="https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/?utm_source=widget">
<img src="https://translate.jellyfin.org/widgets/jellyfin/-/jellyfin-web/svg-badge.svg" alt="Translation Status"/>
</a>
<br/>
<a href="https://opencollective.com/jellyfin">
<img alt="Donate" src="https://img.shields.io/opencollective/all/jellyfin.svg?label=backers"/>
</a>
<a href="https://features.jellyfin.org">
<img alt="Feature Requests" src="https://img.shields.io/badge/fider-vote%20on%20features-success.svg"/>
</a>
<a href="https://forum.jellyfin.org">
<img alt="Discuss on our Forum" src="https://img.shields.io/discourse/https/forum.jellyfin.org/users.svg"/>
</a>
<a href="https://matrix.to/#/+jellyfin:matrix.org">
<img alt="Chat on Matrix" src="https://img.shields.io/matrix/jellyfin:matrix.org.svg?logo=matrix"/>
</a>
<a href="https://www.reddit.com/r/jellyfin">
<img alt="Join our Subreddit" src="https://img.shields.io/badge/reddit-r%2Fjellyfin-%23FF5700.svg"/>
</a>
</p>
---
Jellyfin Web is the frontend used for most of the clients available for end users, such as desktop browsers, Android, and iOS. We welcome all contributions and pull requests! If you have a larger feature in mind please open an issue so we can discuss the implementation before you start. Translations can be improved very easily from our <a href="https://translate.jellyfin.org/projects/jellyfin/jellyfin-web">Weblate</a> instance. Look through the following graphic to see if your native language could use some work!
Jellyfin is a free software media system that puts you in control of managing and streaming your media.
<a href="https://translate.jellyfin.org/engage/jellyfin/?utm_source=widget">
<img src="https://translate.jellyfin.org/widgets/jellyfin/-/jellyfin-web/multi-auto.svg" alt="Detailed Translation Status"/>
</a>
## Build Process
### Dependencies
- Yarn
### Getting Started
1. Clone or download this repository.
```sh
git clone https://github.com/jellyfin/jellyfin-web.git
cd jellyfin-web
```
2. Install build dependencies in the project directory.
```sh
yarn install
```
3. Run the web client with webpack for local development.
```sh
yarn serve
```

View File

@@ -5,29 +5,62 @@
"repository": "https://github.com/jellyfin/jellyfin-web",
"license": "GPL-2.0-or-later",
"devDependencies": {
"copy-webpack-plugin": "^5.0.3",
"css-loader": "^2.1.0",
"eslint": "^5.16.0",
"file-loader": "^3.0.1",
"style-loader": "^0.23.1",
"webpack": "^4.41.0",
"webpack-cli": "^3.3.9",
"webpack-dev-server": "^3.8.1",
"clean-webpack-plugin": "^3.0.0",
"copy-webpack-plugin": "^5.1.1",
"css-loader": "^3.4.2",
"eslint": "^6.8.0",
"file-loader": "^5.0.2",
"html-webpack-plugin": "^3.2.0",
"style-loader": "^1.1.3",
"stylelint": "^13.1.0",
"stylelint-config-rational-order": "^0.1.2",
"stylelint-no-browser-hacks": "^1.2.1",
"stylelint-order": "^4.0.0",
"webpack": "^4.41.5",
"webpack-cli": "^3.3.10",
"webpack-concat-plugin": "^3.0.0",
"webpack-dev-server": "^3.10.3",
"webpack-merge": "^4.2.2"
},
"dependencies": {
"jstree": "^3.3.7",
"alameda": "^1.4.0",
"document-register-element": "^1.14.3",
"flv.js": "^1.5.0",
"hls.js": "^0.13.1",
"howler": "^2.1.3",
"jellyfin-noto": "https://github.com/jellyfin/jellyfin-noto",
"jquery": "^3.4.1",
"hls.js": "^0.12.4",
"howler": "^2.1.2",
"swiper": "^4.5.0",
"sortablejs": "^1.9.0",
"libjass": "^0.11.0"
"jstree": "^3.3.7",
"libass-wasm": "https://github.com/jellyfin/JavascriptSubtitlesOctopus#4.0.0-jf-cordova",
"libjass": "^0.11.0",
"material-design-icons-iconfont": "^5.0.1",
"native-promise-only": "^0.8.0-a",
"resize-observer-polyfill": "^1.5.1",
"shaka-player": "^2.5.9",
"sortablejs": "^1.10.2",
"swiper": "^5.3.1",
"webcomponents.js": "^0.7.24",
"whatwg-fetch": "^3.0.0"
},
"browserslist": [
"last 2 Firefox versions",
"last 2 Chrome versions",
"last 2 ChromeAndroid versions",
"last 2 Safari versions",
"last 2 iOS versions",
"last 2 Edge versions",
"Chrome 38",
"Chrome 47",
"Chrome 53",
"Chrome 56",
"Chrome 63",
"Firefox ESR"
],
"scripts": {
"serve": "webpack-dev-server --config webpack.dev.js --open",
"build": "webpack --config webpack.prod.js",
"lint": "eslint \"src\"",
"stylelint": "stylelint \"src/**/*.css\"",
"prepare": "webpack --config webpack.prod.js"
}
}

41
scripts/scdup.py Normal file
View File

@@ -0,0 +1,41 @@
import sys
import os
import json
# load every key in the source language
# check the keys in all translations
# remove keys that only exist in translations
cwd = os.getcwd()
langdir = cwd + '/../src/strings'
langlst = os.listdir(langdir)
langlst.remove('en-us.json')
print(langlst)
input('press enter to continue')
keysus = []
with open(langdir + '/' + 'en-us.json') as en:
langus = json.load(en)
for key in langus:
keysus.append(key)
for lang in langlst:
with open(langdir + '/' + lang, 'r') as f:
inde = 2
if '\n \"' in f.read():
inde = 4
f.close()
with open(langdir + '/' + lang, 'r+') as f:
langjson = json.load(f)
langjnew = {}
for key in langjson:
if key in keysus:
langjnew[key] = langjson[key]
f.seek(0)
f.write(json.dumps(langjnew, indent=inde, sort_keys=False, ensure_ascii=False))
f.write('\n')
f.truncate()
f.close()
print('DONE')

40
scripts/scgen.py Normal file
View File

@@ -0,0 +1,40 @@
import os
import subprocess
import json
# load all keys in the source language
# check entire codebase for usages
# print unused keys to a text file
# TODO: dynamic string usages cause false positives
cwd = os.getcwd()
langdir = cwd + '/../src/strings'
langlst = []
langlst.append('en-us.json')
# unused keys
dep = []
def grep(key):
command = 'grep -r -E "(\(\\\"|\(\'|\{)%s(\\\"|\'|\})" --include=\*.{js,html} --exclude-dir=../src/strings ../src' % key
p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = p.stdout.readlines()
if output:
print('DONE: ' + key)
return True
print('UNUSED: ' + key)
dep.append(key)
return False
for lang in langlst:
with open(langdir + '/' + lang) as f:
langjson = json.load(f)
for key in langjson:
grep(key)
print(dep)
print('LENGTH: ' + str(len(dep)))
with open('scout.txt', 'w') as out:
for item in dep:
out.write(item + '\n')
out.close()

34
scripts/scrm.py Normal file
View File

@@ -0,0 +1,34 @@
import sys
import os
import json
# load text file containing unused keys
# remove the keys from all string files
cwd = os.getcwd()
langdir = cwd + '/../src/strings'
langlst = os.listdir(langdir)
keys = []
with open('scout.txt', 'r') as f:
for line in f:
keys.append(line.strip('\n'))
for lang in langlst:
with open(langdir + '/' + lang, 'r') as f:
inde = 2
if '\n \"' in f.read():
inde = 4
f.close()
with open(langdir + '/' + lang, 'r+') as f:
langjson = json.load(f)
for key in keys:
langjson.pop(key, None)
f.seek(0)
f.write(json.dumps(langjson, indent=inde, sort_keys=False, ensure_ascii=False))
f.write('\n')
f.truncate()
f.close()
print('DONE')

View File

@@ -1,10 +1,7 @@
<div id="addPluginPage" data-role="page" class="page type-interior pluginConfigurationPage" data-backbutton="true">
<div>
<div class="content-primary">
<div class="readOnlyContent">
<div class="verticalSection">
<div class="sectionTitleContainer flex align-items-center">
<h1 class="sectionTitle pluginName"></h1>
@@ -13,9 +10,7 @@
<p id="tagline" style="font-style: italic;"></p>
<p id="pPreviewImage"></p>
<p id="overview"></p>
</div>
<div class="verticalSection">
@@ -27,12 +22,12 @@
<select id="selectVersion" name="selectVersion" is="emby-select" label="${LabelSelectVersionToInstall}"></select>
</div>
<p id="btnInstallDiv" class="hide">
<div id="btnInstallDiv" class="hide">
<button is="emby-button" type="submit" id="btnInstall" class="raised button-submit block">
<span>${Install}</span>
</button>
<div class="fieldDescription">${ServerRestartNeededAfterPluginInstall}</div>
</p>
</div>
<p id="nonServerMsg"></p>
</form>
</div>

View File

@@ -2,11 +2,9 @@
<div>
<div class="content-primary">
<div class="detailSectionHeader">
<h2 style="margin:.6em 0;vertical-align:middle;display:inline-block;">
${HeaderApiKeys}
</h2>
<h2 style="margin:.6em 0;vertical-align:middle;display:inline-block;">${HeaderApiKeys}</h2>
<button is="emby-button" type="button" class="fab btnNewKey submit" style="margin-left:1em;" title="${ButtonAdd}">
<i class="md-icon">add</i>
<i class="material-icons">add</i>
</button>
</div>
<p>${HeaderApiKeysHelp}</p>
@@ -24,4 +22,4 @@
</table>
</div>
</div>
</div>
</div>

View File

@@ -9,4 +9,4 @@
vertical-align: middle;
font-family: inherit;
font-size: inherit;
}
}

View File

@@ -1,16 +1,17 @@
.dashboardColumn,
.dashboardSections {
flex-direction: column;
-webkit-box-orient: vertical;
-webkit-box-direction: normal
-webkit-box-direction: normal;
}
.dashboardFooter {
margin-top: 3.5em;
text-align: center
text-align: center;
}
.dashboardFooter a {
margin: 0 .7em
margin: 0 0.7em;
}
progress {
@@ -18,59 +19,78 @@ progress {
-moz-appearance: none;
-webkit-appearance: none;
margin: 0;
background: #ccc !important
background: #ccc !important;
}
progress[role]:after {
background-image: none
progress[role]::after {
background-image: none;
}
progress::-webkit-progress-bar {
background: #ccc
background: #ccc;
}
progress::-moz-progress-bar {
background-color: #00a4dc
background-color: #00a4dc;
}
progress::-webkit-progress-value {
background-color: #00a4dc
background-color: #00a4dc;
}
progress[aria-valuenow]:before {
border-radius: .4em;
background-color: #00a4dc
progress[aria-valuenow]::before {
border-radius: 0.4em;
background-color: #00a4dc;
}
.localnav {
margin-bottom: 2.2em !important
margin-bottom: 2.2em !important;
}
@media all and (min-width:50em) {
.type-interior>.ui-panel-content-wrap>div[data-role=content],
.type-interior>div[data-role=content] {
@media all and (min-width: 50em) {
.type-interior > div[data-role=content],
.type-interior > .ui-panel-content-wrap > div[data-role=content] {
padding-right: 0;
padding-left: 0;
padding-top: 0;
overflow: hidden
overflow: hidden;
}
}
.dashboardDocument .dashboardEntryHeaderButton,
.dashboardDocument .lnkManageServer {
display: none !important
display: none !important;
}
.adminDrawerLogo {
display: none;
}
.layout-mobile .adminDrawerLogo {
padding: 1.5em 1em 1.2em;
border-bottom: 1px solid #e0e0e0;
margin-bottom: 1em;
display: block
display: block;
}
.adminDrawerLogo img {
height: 4em
height: 4em;
}
a[data-role=button] {
background: #292929 !important;
background-clip: padding-box;
-webkit-font-smoothing: antialiased;
-webkit-user-select: none;
-webkit-background-clip: padding-box;
cursor: pointer !important;
font-family: inherit !important;
font-weight: 500 !important;
margin: 0 0.25em !important;
display: inline-block;
padding: 0.8em 1em;
text-align: center;
text-decoration: none !important;
}
div[data-role=controlgroup] a[data-role=button] {
@@ -79,70 +99,88 @@ div[data-role=controlgroup] a[data-role=button] {
-webkit-box-shadow: none !important;
box-shadow: none !important;
-webkit-border-radius: 0;
border-radius: 0
border-radius: 0;
}
div[data-role=controlgroup] a[data-role=button]:first-child {
-webkit-border-bottom-left-radius: .3125em;
border-bottom-left-radius: .3125em;
-webkit-border-top-left-radius: .3125em;
border-top-left-radius: .3125em
-webkit-border-bottom-left-radius: 0.3125em;
border-bottom-left-radius: 0.3125em;
-webkit-border-top-left-radius: 0.3125em;
border-top-left-radius: 0.3125em;
}
div[data-role=controlgroup] a[data-role=button]:last-child {
-webkit-border-bottom-right-radius: .3125em;
border-bottom-right-radius: .3125em;
-webkit-border-top-right-radius: .3125em;
border-top-right-radius: .3125em
-webkit-border-bottom-right-radius: 0.3125em;
border-bottom-right-radius: 0.3125em;
-webkit-border-top-right-radius: 0.3125em;
border-top-right-radius: 0.3125em;
}
div[data-role=controlgroup] a[data-role=button]+a[data-role=button] {
div[data-role=controlgroup] a[data-role=button] + a[data-role=button] {
border-left-width: 0 !important;
margin: 0 0 0 -.4em !important
margin: 0 0 0 -0.4em !important;
}
div[data-role=controlgroup] a.ui-btn-active {
background: #00a4dc !important;
color: #292929 !important
color: #292929 !important;
}
.sessionAppInfo img {
max-width: 40px;
max-height: 40px;
margin-right: 8px;
}
.appLinks img {
height: 36px;
}
.wizardContent h2 img {
height: 2.5em;
vertical-align: middle;
margin-right: 0.5em;
position: relative;
top: -0.3em;
}
.header .imageLink {
display: inline-block
display: inline-block;
}
.header .imageLink img {
height: 2.1em;
vertical-align: middle
vertical-align: middle;
}
.content-primary {
padding-top: 6em;
padding-right: 1em;
padding-left: 1em
padding-left: 1em;
}
.withTabs .content-primary {
padding-top: 9em !important
padding-top: 9em !important;
}
@media all and (min-width:40em) {
@media all and (min-width: 40em) {
.content-primary {
padding-top: 7em
padding-top: 4.6em;
}
.withTabs .content-primary {
padding-top: 10em !important
padding-top: 10em !important;
}
}
@media all and (min-width:84em) {
@media all and (min-width: 84em) {
.withTabs .content-primary {
padding-top: 7em !important
padding-top: 7em !important;
}
}
.content-primary ul:first-child {
margin-top: 0
margin-top: 0;
}
.dashboardSections {
@@ -150,7 +188,7 @@ div[data-role=controlgroup] a.ui-btn-active {
display: -webkit-flex;
display: flex;
-webkit-flex-direction: column;
flex-direction: column
flex-direction: column;
}
.dashboardColumn {
@@ -163,126 +201,7 @@ div[data-role=controlgroup] a.ui-btn-active {
flex-shrink: 0;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1
}
.activeSession:not(.playingSession) .sessionNowPlayingContent {
display: none
}
.dashboardSection {
-webkit-flex-shrink: 0;
flex-shrink: 0;
margin: 0 0 2em
}
.dashboardSection h3 {
margin-top: .5em;
margin-bottom: .5em
}
.activeRecordingItems>.card {
width: 50%
}
@media all and (min-width:70em) {
.dashboardSections {
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
flex-direction: row
}
.dashboardColumn-2-60 {
width: 46%
}
.dashboardColumn-2-40 {
width: 27%
}
.dashboardSection {
padding: 0 1.5em
}
.activeRecordingItems>.card {
width: 25%
}
}
.premiumBanner img {
position: absolute;
text-align: right;
top: 0;
right: 0;
width: 4.4em;
height: 4.4em
}
.wizardContent {
max-width: 62em;
padding: .5em 2em 1em;
margin: 0 auto;
background: #fff
}
.wizardNavigation {
text-align: right
}
.wizardContent form {
max-width: 100%
}
.wizardContent h2 img {
height: 2.5em;
vertical-align: middle;
margin-right: .5em;
position: relative;
top: -.3em
}
.scheduledTaskPaperIconItem {
outline: 0 !important
}
.activeSession {
width: 100% !important
}
@media all and (min-width:40em) {
.activeSession {
width: 100% !important
}
}
@media all and (min-width:50em) {
.activeSession {
width: 50% !important
}
}
.sessionCardFooter {
padding-top: .5em !important;
padding-bottom: 1em !important;
border-top: 1px solid #eee;
text-align: center;
position: relative
}
.sessionAppInfo {
padding: 0.5em;
overflow: hidden;
}
.sessionCardButtons {
min-height: 2.7em
}
.sessionCardButton {
margin: 0
flex-grow: 1;
}
.sessionNowPlayingContent {
@@ -294,7 +213,119 @@ div[data-role=controlgroup] a.ui-btn-active {
top: 0;
left: 0;
right: 0;
bottom: 0
bottom: 0;
}
.activeSession:not(.playingSession) .sessionNowPlayingContent {
display: none;
}
.dashboardSection {
-webkit-flex-shrink: 0;
flex-shrink: 0;
margin: 0 0 2em;
}
.dashboardSection h3 {
margin-top: 0.5em;
margin-bottom: 0.5em;
}
.activeRecordingItems > .card {
width: 50%;
}
@media all and (min-width: 70em) {
.dashboardSections {
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
flex-direction: row;
}
.dashboardColumn-2-60 {
width: 46%;
}
.dashboardColumn-2-40 {
width: 27%;
}
.dashboardSection {
padding: 0 1.5em;
}
.activeRecordingItems > .card {
width: 25%;
}
}
.wizardContent {
max-width: 62em;
padding: 0.5em 2em 1em;
margin: 0 auto;
background: #fff;
}
.wizardNavigation {
text-align: right;
}
.wizardContent form {
max-width: 100%;
}
.scheduledTaskPaperIconItem {
outline: 0 !important;
}
.activeSession {
width: 100% !important;
}
.activitylogUserPhoto {
height: 1.71em;
width: 1.71em;
border-radius: 100%;
margin-right: 0.5em;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
}
@media all and (min-width: 40em) {
.activeSession {
width: 100% !important;
}
}
@media all and (min-width: 50em) {
.activeSession {
width: 50% !important;
}
}
.sessionCardFooter {
padding-top: 0.5em !important;
padding-bottom: 1em !important;
border-top: 1px solid #eee;
text-align: center;
position: relative;
}
.sessionAppInfo {
padding: 0.5em;
overflow: hidden;
}
.sessionCardButtons {
min-height: 2.7em;
}
.sessionCardButton {
margin: 0;
}
.sessionNowPlayingInnerContent {
@@ -303,23 +334,23 @@ div[data-role=controlgroup] a.ui-btn-active {
left: 0;
right: 0;
bottom: 0;
font-weight: 400
font-weight: 400;
}
.sessionNowPlayingContent-withbackground+.sessionNowPlayingInnerContent {
.sessionNowPlayingContent-withbackground + .sessionNowPlayingInnerContent {
color: #fff !important;
background: rgba(0, 0, 0, .7)
background: rgba(0, 0, 0, 0.7);
}
.sessionAppName {
vertical-align: top;
max-width: 200px
max-width: 200px;
}
.sessionNowPlayingDetails {
display: flex;
position: absolute;
bottom: 0px;
bottom: 0;
width: 100%;
}
@@ -329,12 +360,6 @@ div[data-role=controlgroup] a.ui-btn-active {
padding: 0.8em 0.5em;
}
.sessionAppInfo img {
max-width: 40px;
max-height: 40px;
margin-right: 8px;
}
.sessionNowPlayingTime {
flex-shrink: 0;
align-self: flex-end;
@@ -346,6 +371,13 @@ div[data-role=controlgroup] a.ui-btn-active {
white-space: nowrap;
}
.playbackProgress,
.transcodingProgress {
margin: 0;
width: 100%;
background: transparent !important;
}
.activeSession .playbackProgress,
.activeSession .transcodingProgress {
position: absolute;
@@ -356,13 +388,6 @@ div[data-role=controlgroup] a.ui-btn-active {
width: 100%;
}
.playbackProgress,
.transcodingProgress {
margin: 0px;
width: 100%;
background: transparent !important;
}
.playbackProgress > div {
z-index: 1000;
background-color: #00a4dc;
@@ -372,89 +397,70 @@ div[data-role=controlgroup] a.ui-btn-active {
background-color: #dd4919;
}
@media all and (max-width:34.375em) {
@media all and (max-width: 34.375em) {
.sessionAppName {
max-width: 160px
max-width: 160px;
}
}
@media all and (max-width:31.25em) {
@media all and (max-width: 31.25em) {
.sessionAppName {
max-width: 150px
max-width: 150px;
}
}
.disabledUser {
-webkit-filter: grayscale(100%);
filter: grayscale(100%)
filter: grayscale(100%);
}
.disabledUserBanner {
margin: 0 0 2em
margin: 0 0 2em;
}
.appLinks a {
text-decoration: none !important
}
.appLinks a+a {
margin-left: 5px
}
.appLinks img {
height: 36px
}
a[data-role=button] {
-webkit-font-smoothing: antialiased;
-webkit-user-select: none;
-webkit-background-clip: padding-box;
cursor: pointer !important;
font-family: inherit !important;
font-weight: 500 !important;
margin: 0 .25em !important;
display: inline-block;
padding: .8em 1em;
text-align: center;
text-decoration: none !important;
background: #292929 !important;
}
.appLinks a + a {
margin-left: 5px;
}
@-webkit-keyframes rotating {
from {
-webkit-transform: rotate(0);
transform: rotate(0)
transform: rotate(0);
}
to {
-webkit-transform: rotate(360deg);
transform: rotate(360deg)
transform: rotate(360deg);
}
}
@keyframes rotating {
from {
-webkit-transform: rotate(0);
transform: rotate(0)
transform: rotate(0);
}
to {
-webkit-transform: rotate(360deg);
transform: rotate(360deg)
transform: rotate(360deg);
}
}
.rotatingCircle {
-webkit-animation: rotating 2s linear infinite;
animation: rotating 2s linear infinite
animation: rotating 2s linear infinite;
}
.pluginPreviewImg {
-webkit-box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37);
box-shadow: 0 .0725em .29em 0 rgba(0, 0, 0, .37)
-webkit-box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37);
box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37);
}
.ui-bar-a{
.ui-bar-a {
text-align: center;
padding: 0 20px;
}

View File

@@ -1,7 +1,7 @@
.detailTableBodyCell,
.detailTableHeaderCell {
border-spacing: 0;
padding: .4em
padding: 0.4em;
}
.detailTable {
@@ -9,11 +9,11 @@
border-spacing: 0;
text-align: left;
width: 100%;
margin: 0 auto
margin: 0 auto;
}
.detailTableHeaderCell {
font-weight: 700;
text-align: left;
vertical-align: top
}
vertical-align: top;
}

View File

@@ -44,4 +44,4 @@
.align-self-flex-end {
align-self: flex-end;
}
}

37
src/assets/css/fonts.css Normal file
View File

@@ -0,0 +1,37 @@
html {
font-family: "Noto Sans", sans-serif;
font-size: 93%;
-webkit-text-size-adjust: 100%;
text-size-adjust: 100%;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
h1,
h2,
h3 {
font-family: "Noto Sans", sans-serif;
}
h1 {
font-weight: 400;
font-size: 1.8em;
}
h2 {
font-weight: 400;
font-size: 1.5em;
}
h3 {
font-weight: 400;
font-size: 1.17em;
}
.layout-tv {
font-size: 130%;
}
.layout-mobile {
font-size: 90%;
}

View File

@@ -1,5 +1,5 @@
h1 {
font-weight: 500;
font-weight: 400;
font-size: 1.8em;
}
@@ -8,12 +8,12 @@ h1 {
}
h2 {
font-weight: 500;
font-weight: 400;
font-size: 1.5em;
}
h3 {
font-weight: 500;
font-weight: 400;
font-size: 1.17em;
}
@@ -25,7 +25,6 @@ h3 {
/* This is supposed to be 1080p, but had to reduce the min height to account for possible browser chrome */
@media all and (min-height: 1000px) {
html {
font-size: 27px;
}

8
src/assets/css/ios.css Normal file
View File

@@ -0,0 +1,8 @@
html {
font-size: 82% !important;
}
.formDialogFooter {
position: static !important;
margin: 0 -1em !important;
}

View File

@@ -0,0 +1,9 @@
.guideVerticalScroller {
padding-bottom: 15em;
}
@media all and (min-width: 62.5em) {
#guideTab {
padding-left: 0.5em;
}
}

View File

@@ -1,29 +1,29 @@
.editPageSidebar {
display: block
display: block;
}
.editPageSidebar-withcontent {
display: none
display: none;
}
.libraryTree {
margin-left: .25em
margin-left: 0.25em;
}
.offlineEditorNode {
color: #c33
color: #c33;
}
.editorNode img {
height: 18px;
margin: 0 .35em;
margin: 0 0.35em;
vertical-align: middle;
position: relative;
top: -2px
top: -2px;
}
.jstree-anchor {
font-weight: 400 !important
font-weight: 400 !important;
}
.jstree-wholerow-hovered {
@@ -31,7 +31,7 @@
-webkit-border-radius: 0 !important;
border-radius: 0 !important;
-webkit-box-shadow: none !important;
box-shadow: none !important
box-shadow: none !important;
}
.jstree-default .jstree-hovered {
@@ -40,18 +40,18 @@
border-radius: 0 !important;
-webkit-box-shadow: none !important;
box-shadow: none !important;
color: #fff !important
color: #fff !important;
}
.jstree-default .jstree-wholerow-clicked {
background: #00a4dc !important
background: #00a4dc !important;
}
.metadataSidebarIcon {
margin-right: .4em
margin-right: 0.4em;
}
@media all and (min-width:50em) {
@media all and (min-width: 50em) {
.editPageSidebar {
position: fixed;
top: 5.2em;
@@ -59,21 +59,21 @@
left: 0;
width: 30%;
border-right: 1px solid #555;
display: block
display: block;
}
.editPageInnerContent {
float: right;
width: 68.5%
width: 68.5%;
}
}
@media all and (min-width:112.5em) {
@media all and (min-width: 112.5em) {
.editPageSidebar {
width: 25%
width: 25%;
}
.editPageInnerContent {
width: 73.5%
width: 73.5%;
}
}

View File

@@ -9,17 +9,17 @@
scroll-behavior: smooth;
}
.hiddenScrollX, .layout-tv .scrollX {
.hiddenScrollX,
.layout-tv .scrollX {
-ms-overflow-style: none;
/* Can't do this because it not only hides the scrollbar, but also prevents scrolling */
/*overflow: -moz-scrollbars-none;*/
}
.hiddenScrollX-forced {
overflow: -moz-scrollbars-none;
}
.hiddenScrollX::-webkit-scrollbar, .layout-tv .scrollX::-webkit-scrollbar {
.hiddenScrollX::-webkit-scrollbar,
.layout-tv .scrollX::-webkit-scrollbar {
height: 0 !important;
display: none;
}
@@ -37,17 +37,22 @@
scroll-behavior: smooth;
}
.hiddenScrollY, .layout-tv .smoothScrollY {
.hiddenScrollY,
.layout-tv .smoothScrollY {
-ms-overflow-style: none;
/* Can't do this because it not only hides the scrollbar, but also prevents scrolling */
/*overflow: -moz-scrollbars-none;*/
/* overflow: -moz-scrollbars-none; */
}
.hiddenScrollY-forced {
overflow: -moz-scrollbars-none;
}
.hiddenScrollY::-webkit-scrollbar, .layout-tv .smoothScrollY::-webkit-scrollbar, .layout-tv .scrollY::-webkit-scrollbar {
.hiddenScrollY::-webkit-scrollbar,
.layout-tv .smoothScrollY::-webkit-scrollbar,
.layout-tv .scrollY::-webkit-scrollbar {
width: 0 !important;
display: none;
}
}

View File

@@ -2,7 +2,12 @@ body,
html {
margin: 0;
padding: 0;
height: 100%
height: 100%;
}
.material-icons {
/* Fix font ligatures on older WebOS versions */
-webkit-font-feature-settings: "liga";
}
.backgroundContainer {
@@ -11,11 +16,11 @@ html {
left: 0;
right: 0;
bottom: 0;
contain: strict
contain: strict;
}
html {
line-height: 1.35
line-height: 1.35;
}
.layout-mobile,
@@ -25,44 +30,44 @@ html {
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none
user-select: none;
}
body {
overflow-x: hidden;
background-color: transparent !important;
-webkit-font-smoothing: antialiased
-webkit-font-smoothing: antialiased;
}
.mainAnimatedPage {
contain: style size !important
contain: style size !important;
}
.pageContainer {
overflow-x: visible !important
overflow-x: visible !important;
}
.bodyWithPopupOpen {
overflow-y: hidden !important
overflow-y: hidden !important;
}
div[data-role=page] {
outline: 0
outline: 0;
}
.pageTitle {
margin-top: 0;
font-family: inherit
font-family: inherit;
}
.fieldDescription {
padding-left: .15em;
padding-left: 0.15em;
font-weight: 400;
white-space: normal !important
white-space: normal !important;
}
.fieldDescription+.fieldDescription {
margin-top: .3em
.fieldDescription + .fieldDescription {
margin-top: 0.3em;
}
.content-primary,
@@ -73,21 +78,21 @@ div[data-role=page] {
padding-bottom: 5em !important;
}
@media all and (min-width:50em) {
@media all and (min-width: 50em) {
.readOnlyContent,
form {
max-width: 54em
max-width: 54em;
}
}
.headerHelpButton {
margin-left: 1.25em !important;
padding-bottom: .4em !important;
padding-top: .4em !important
padding-bottom: 0.4em !important;
padding-top: 0.4em !important;
}
.mediaInfoContent {
margin-left: auto;
margin-right: auto;
width: 85%
width: 85%;
}

View File

@@ -1,8 +1,9 @@
.chapterThumbTextContainer,
.videoOsdBottom {
user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none
-ms-user-select: none;
}
.osdPoster img,
@@ -10,13 +11,13 @@
.videoOsdBottom {
bottom: 0;
left: 0;
right: 0
right: 0;
}
.osdHeader {
-webkit-transition: opacity .3s ease-out;
-o-transition: opacity .3s ease-out;
transition: opacity .3s ease-out;
-webkit-transition: opacity 0.3s ease-out;
-o-transition: opacity 0.3s ease-out;
transition: opacity 0.3s ease-out;
position: relative;
z-index: 1;
background: rgba(0, 0, 0, 0.7) !important;
@@ -26,11 +27,11 @@
}
.osdHeader-hidden {
opacity: 0
opacity: 0;
}
.osdHeader .headerButton:not(.headerBackButton):not(.headerCastButton) {
display: none
display: none;
}
.chapterThumbContainer {
@@ -39,7 +40,7 @@
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1;
position: relative
position: relative;
}
.chapterThumb {
@@ -49,20 +50,20 @@
background-repeat: no-repeat;
border: 0;
height: 20vh;
min-width: 20vh
min-width: 20vh;
}
@media all and (orientation:portrait) {
@media all and (orientation: portrait) {
.chapterThumb {
height: 30vw;
min-width: 30vw
min-width: 30vw;
}
}
@media all and (max-height:50em) and (orientation:landscape) {
@media all and (max-height: 50em) and (orientation: landscape) {
.chapterThumb {
height: 30vh;
min-width: 30vh
min-width: 30vh;
}
}
@@ -71,19 +72,19 @@
bottom: 0;
left: 0;
right: 0;
background: rgba(0, 0, 0, .7);
padding: .25em .5em;
user-select: none
background: rgba(0, 0, 0, 0.7);
padding: 0.25em 0.5em;
user-select: none;
}
.chapterThumbText {
padding: .25em 0;
padding: 0.25em 0;
margin: 0;
opacity: 1
opacity: 1;
}
.chapterThumbText-dim {
opacity: .6
opacity: 0.6;
}
.videoOsdBottom {
@@ -103,21 +104,21 @@
transition: opacity 0.3s ease-out;
color: #fff;
user-select: none;
-webkit-touch-callout: none
-webkit-touch-callout: none;
}
.videoOsdBottom-hidden {
opacity: 0
opacity: 0;
}
.osdControls {
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1
flex-grow: 1;
}
.videoOsdBottom .buttons {
padding: .25em 0 0;
padding: 0.25em 0 0;
display: -webkit-box;
display: -webkit-flex;
display: flex;
@@ -125,28 +126,30 @@
flex-wrap: wrap;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center
align-items: center;
}
.osdVolumeSliderContainer {
width: 9em;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1
flex-grow: 1;
}
.osdMediaInfo,
.volumeButtons {
display: flex;
display: -webkit-box;
display: -webkit-flex;
-webkit-box-align: center
align-items: center;
-webkit-box-align: center;
}
.volumeButtons {
margin: 0 .5em 0 auto;
margin: 0 0.5em 0 auto;
display: flex;
-webkit-align-items: center;
align-items: center
align-items: center;
}
.osdTimeText {
@@ -154,13 +157,13 @@
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none
user-select: none;
}
.osdPoster {
width: 10%;
position: relative;
margin-right: .5em
margin-right: 0.5em;
}
.osdPoster img {
@@ -169,28 +172,28 @@
width: 100%;
-webkit-box-shadow: 0 0 1.9vh #000;
box-shadow: 0 0 1.9vh #000;
border: .08em solid #222;
border: 0.08em solid #222;
user-drag: none;
user-select: none;
-moz-user-select: none;
-webkit-user-drag: none;
-webkit-user-select: none;
-ms-user-select: none
-ms-user-select: none;
}
.osdTitle,
.osdTitleSmall {
margin: 0 1em 0 0
margin: 0 1em 0 0;
}
.osdMediaInfo {
display: flex;
-webkit-align-items: center;
align-items: center
align-items: center;
}
.osdSecondaryMediaInfo {
padding-left: .6em !important
padding-left: 0.6em !important;
}
.osdTextContainer {
@@ -204,64 +207,83 @@
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
margin-bottom: .7em;
padding-left: .5em
margin-bottom: 0.7em;
padding-left: 0.5em;
}
.osdMainTextContainer {
-webkit-box-align: baseline;
-webkit-align-items: baseline;
align-items: baseline
align-items: baseline;
}
.osdMediaStatus {
margin-left: auto;
}
@-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } }
@-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } }
@keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } }
@-moz-keyframes spin {
100% {
-moz-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@-webkit-keyframes spin {
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes spin {
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
.osdMediaStatus .animate {
-webkit-animation:spin 4s linear infinite;
-moz-animation:spin 4s linear infinite;
animation:spin 4s linear infinite;
-webkit-animation: spin 4s linear infinite;
-moz-animation: spin 4s linear infinite;
animation: spin 4s linear infinite;
}
.pageContainer {
top: 0;
position: fixed
position: fixed;
}
@media all and (max-width:30em) {
@media all and (max-width: 30em) {
.btnFastForward,
.btnRewind,
.osdMediaInfo,
.osdPoster {
display: none !important
display: none !important;
}
}
@media all and (max-width:33.75em) {
@media all and (max-width: 33.75em) {
.videoOsdBottom .paper-icon-button-light {
margin: 0
margin: 0;
}
}
@media all and (max-width:43em) {
@media all and (max-width: 43em) {
.videoOsdBottom .volumeButtons,
.osdMediaStatus span {
display: none !important
}
}
@media all and (max-width:50em) {
.videoOsdBottom .btnFastForward, .videoOsdBottom .btnRewind {
display: none !important
display: none !important;
}
}
@media all and (max-width:75em) {
.videoOsdBottom .endsAtText {
display: none !important
@media all and (max-width: 50em) {
.videoOsdBottom .btnFastForward,
.videoOsdBottom .btnRewind {
display: none !important;
}
}
@media all and (max-width: 75em) {
.videoOsdBottom .endsAtText {
display: none !important;
}
}

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M24 19H0a13.6 13.6 0 0 1 2.21-6.07A11.2 11.2 0 0 1 5.87 9.4l.41-.23-2.02-3.41a.51.51 0 0 1 .17-.7.5.5 0 0 1 .69.18l2.08 3.5a12.62 12.62 0 0 1 4.84-.9 12.2 12.2 0 0 1 4.75.9l2.07-3.5a.5.5 0 0 1 .7-.17.51.51 0 0 1 .16.7L17.7 9.19l.5.28a11.38 11.38 0 0 1 3.63 3.62A14.48 14.48 0 0 1 24 19zm-7.5-4.48a1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0-1-1 1 1 0 0 0-1 1zm-11 0a1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0-1-1 1 1 0 0 0-1 1z" fill="#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 563 B

View File

Before

Width:  |  Height:  |  Size: 863 B

After

Width:  |  Height:  |  Size: 863 B

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 345 B

After

Width:  |  Height:  |  Size: 345 B

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24" height="24" version="1.1" viewBox="0 0 6.35 6.35" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(-36.173 -93.796)">
<g transform="matrix(.08 0 0 .08 40.527 88.485)">
<path d="m53.295 119.35v-39.688h79.375v79.375h-79.375z" fill="#fcfdfd" stroke-width=".26458"/>
</g>
<g transform="matrix(1.3761 0 0 1.3825 -26.63 -38.456)" fill="#fff">
<path transform="matrix(.08 0 0 .08 40.527 88.485)" d="m86.822 141.89c-4.738-4.7596-5.2168-5.3235-5.2168-6.1442 0-0.82158 0.47505-1.3787 5.2329-6.1365 4.7552-4.7552 5.3153-5.2329 6.1353-5.2329 0.81617 0 1.3676 0.46161 5.7678 4.8286 4.8692 4.8324 5.6182 5.7452 5.6182 6.8466 0 0.41218-1.5697 2.1641-5.2274 5.834-4.8206 4.8367-5.3 5.2449-6.1603 5.2449-0.86046 0-1.3378-0.40681-6.1497-5.2406zm22.168-12.455c-0.43656-0.27248-2.9071-2.6371-5.4901-5.2547-4.1957-4.2519-4.6964-4.8534-4.6964-5.6418 0-0.7938 0.52954-1.414 5.2644-6.1655 4.6582-4.6746 5.362-5.2829 6.1127-5.2829 0.75071 0 1.4546 0.60829 6.1127 5.2829 4.7729 4.7898 5.2644 5.3668 5.2644 6.1818 0 0.81542-0.48628 1.3851-5.2394 6.1382-5.6104 5.6104-5.7707 5.7142-7.3283 4.742zm-40.16-5.2731c-3.5636-3.5816-4.9518-5.1483-4.9518-5.5886 0-0.75745 9.3384-10.601 10.057-10.601 0.2584 0 0.54208 0.18833 0.63041 0.41851s0.1606 4.7624 0.1606 10.072c0 9.1098-0.10948 10.677-0.74606 10.677-0.10905 0-2.4266-2.2396-5.1501-4.9768zm13.2-1.5272c-0.08833-0.23018-0.1606-5.3558-0.1606-11.39 0-8.9734 0.06852-11.102 0.37621-11.686 0.20691-0.39296 2.447-2.7683 4.9781-5.2785 4.3226-4.2871 4.6624-4.5641 5.5987-4.5641 0.94583 0 1.2591 0.26717 6.1277 5.2255 4.658 4.7439 5.1315 5.3102 5.1376 6.1439 6e-3 0.85888-0.67407 1.6-10.506 11.443-5.782 5.7887-10.71 10.525-10.952 10.525s-0.51144-0.18833-0.59977-0.41852z" fill="#fff" stroke-width=".26458"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 1015 B

After

Width:  |  Height:  |  Size: 1015 B

View File

Before

Width:  |  Height:  |  Size: 683 B

After

Width:  |  Height:  |  Size: 683 B

View File

Before

Width:  |  Height:  |  Size: 453 B

After

Width:  |  Height:  |  Size: 453 B

View File

Before

Width:  |  Height:  |  Size: 833 B

After

Width:  |  Height:  |  Size: 833 B

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 241 B

After

Width:  |  Height:  |  Size: 241 B

View File

Before

Width:  |  Height:  |  Size: 861 B

After

Width:  |  Height:  |  Size: 861 B

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

20
src/assets/img/fresh.svg Normal file
View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg id="svg3390" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="141.25" viewBox="0 0 138.75 141.25" width="138.75" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata id="metadata3396">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<g id="layer1" fill="#f93208">
<path id="path3412" d="m20.154 40.829c-28.149 27.622-13.657 61.011-5.734 71.931 35.254 41.954 92.792 25.339 111.89-5.9071 4.7608-8.2027 22.554-53.467-23.976-78.009z"/>
<path id="path3471" d="m39.613 39.265 4.7778-8.8607 28.406-5.0384 11.119 9.2082z"/>
</g>
<g id="layer2">
<path id="path3437" d="m39.436 8.5696 8.9682-5.2826 6.7569 15.479c3.7925-6.3226 13.79-16.316 24.939-4.6684-4.7281 1.2636-7.5161 3.8553-7.7397 8.4768 15.145-4.1697 31.343 3.2127 33.539 9.0911-10.951-4.314-27.695 10.377-41.771 2.334 0.009 15.045-12.617 16.636-19.902 17.076 2.077-4.996 5.591-9.994 1.474-14.987-7.618 8.171-13.874 10.668-33.17 4.668 4.876-1.679 14.843-11.39 24.448-11.425-6.775-2.467-12.29-2.087-17.814-1.475 2.917-3.961 12.149-15.197 28.625-8.476z" fill="#02902e"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="145" height="140"><path fill="#0fc755" d="M47.4 35.342c-13.607-7.935-12.32-25.203 2.097-31.88 26.124-6.531 29.117 13.78 22.652 30.412-6.542 24.11 18.095 23.662 19.925 10.067 3.605-18.412 19.394-26.695 31.67-16.359 12.598 12.135 7.074 36.581-17.827 34.187-16.03-1.545-19.552 19.585.839 21.183 32.228 1.915 42.49 22.167 31.04 35.865-15.993 15.15-37.691-4.439-45.512-19.505-6.8-9.307-17.321.11-13.423 6.502 12.983 19.465 2.923 31.229-10.906 30.62-13.37-.85-20.96-9.06-13.214-29.15 3.897-12.481-8.595-15.386-16.57-5.45-11.707 19.61-28.865 13.68-33.976 4.19-3.243-7.621-2.921-25.846 24.119-23.696 16.688 4.137 11.776-12.561-.63-13.633-9.245-.443-30.501-7.304-22.86-24.54 7.34-11.056 24.958-11.768 33.348 6.293 3.037 4.232 8.361 11.042 18.037 5.033 3.51-5.197 1.21-13.9-8.809-20.135z"/></svg>

After

Width:  |  Height:  |  Size: 833 B

View File

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

View File

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

View File

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

View File

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

View File

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

@@ -5,4 +5,4 @@
<div id="pluginTiles" style="text-align:left;"></div>
</div>
</div>
</div>
</div>

View File

@@ -1,419 +0,0 @@
var requirejs, require, define;
! function(global, Promise, undef) {
function commentReplace(match, singlePrefix) {
return singlePrefix || ""
}
function hasProp(obj, prop) {
return hasOwn.call(obj, prop)
}
function getOwn(obj, prop) {
return obj && hasProp(obj, prop) && obj[prop]
}
function obj() {
return Object.create(null)
}
function eachProp(obj, func) {
var prop;
for (prop in obj)
if (hasProp(obj, prop) && func(obj[prop], prop)) break
}
function mixin(target, source, force, deepStringMixin) {
return source && eachProp(source, function(value, prop) {
!force && hasProp(target, prop) || (!deepStringMixin || "object" != typeof value || !value || Array.isArray(value) || "function" == typeof value || value instanceof RegExp ? target[prop] = value : (target[prop] || (target[prop] = {}), mixin(target[prop], value, force, deepStringMixin)))
}), target
}
function getGlobal(value) {
if (!value) return value;
var g = global;
return value.split(".").forEach(function(part) {
g = g[part]
}), g
}
function newContext(contextName) {
function trimDots(ary) {
var i, part, length = ary.length;
for (i = 0; i < length; i++)
if ("." === (part = ary[i])) ary.splice(i, 1), i -= 1;
else if (".." === part) {
if (0 === i || 1 === i && ".." === ary[2] || ".." === ary[i - 1]) continue;
i > 0 && (ary.splice(i - 1, 2), i -= 2)
}
}
function normalize(name, baseName, applyMap) {
var mapValue, nameParts, i, j, nameSegment, lastIndex, foundMap, foundI, foundStarMap, starI, baseParts = baseName && baseName.split("/"),
normalizedBaseParts = baseParts,
map = config.map,
starMap = map && map["*"];
if (name && (name = name.split("/"), lastIndex = name.length - 1, config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex]) && (name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, "")), "." === name[0].charAt(0) && baseParts && (normalizedBaseParts = baseParts.slice(0, baseParts.length - 1), name = normalizedBaseParts.concat(name)), trimDots(name), name = name.join("/")), applyMap && map && (baseParts || starMap)) {
nameParts = name.split("/");
outerLoop: for (i = nameParts.length; i > 0; i -= 1) {
if (nameSegment = nameParts.slice(0, i).join("/"), baseParts)
for (j = baseParts.length; j > 0; j -= 1)
if ((mapValue = getOwn(map, baseParts.slice(0, j).join("/"))) && (mapValue = getOwn(mapValue, nameSegment))) {
foundMap = mapValue, foundI = i;
break outerLoop
}! foundStarMap && starMap && getOwn(starMap, nameSegment) && (foundStarMap = getOwn(starMap, nameSegment), starI = i)
}!foundMap && foundStarMap && (foundMap = foundStarMap, foundI = starI), foundMap && (nameParts.splice(0, foundI, foundMap), name = nameParts.join("/"))
}
return getOwn(config.pkgs, name) || name
}
function makeShimExports(value) {
function fn() {
var ret;
return value.init && (ret = value.init.apply(global, arguments)), ret || value.exports && getGlobal(value.exports)
}
return fn
}
function takeQueue(anonId) {
var i, id, args, shim;
for (i = 0; i < queue.length; i += 1) {
if ("string" != typeof queue[i][0]) {
if (!anonId) break;
queue[i].unshift(anonId), anonId = undef
}
args = queue.shift(), id = args[0], i -= 1, id in defined || id in waiting || (id in deferreds ? main.apply(undef, args) : waiting[id] = args)
}
anonId && (shim = getOwn(config.shim, anonId) || {}, main(anonId, shim.deps || [], shim.exportsFn))
}
function makeRequire(relName, topLevel) {
var req = function(deps, callback, errback, alt) {
var name, cfg;
if (topLevel && takeQueue(), "string" == typeof deps) {
if (handlers[deps]) return handlers[deps](relName);
if (!((name = makeMap(deps, relName, !0).id) in defined)) throw new Error("Not loaded: " + name);
return defined[name]
}
return deps && !Array.isArray(deps) && (cfg = deps, deps = undef, Array.isArray(callback) && (deps = callback, callback = errback, errback = alt), topLevel) ? req.config(cfg)(deps, callback, errback) : (callback = callback || function() {
return slice.call(arguments, 0)
}, asyncResolve.then(function() {
return takeQueue(), main(undef, deps || [], callback, errback, relName)
}))
};
return req.isBrowser = "undefined" != typeof document && "undefined" != typeof navigator, req.nameToUrl = function(moduleName, ext, skipExt) {
var paths, syms, i, parentModule, url, parentPath, bundleId, pkgMain = getOwn(config.pkgs, moduleName);
if (pkgMain && (moduleName = pkgMain), bundleId = getOwn(bundlesMap, moduleName)) return req.nameToUrl(bundleId, ext, skipExt);
if (urlRegExp.test(moduleName)) url = moduleName + (ext || "");
else {
for (paths = config.paths, syms = moduleName.split("/"), i = syms.length; i > 0; i -= 1)
if (parentModule = syms.slice(0, i).join("/"), parentPath = getOwn(paths, parentModule)) {
Array.isArray(parentPath) && (parentPath = parentPath[0]), syms.splice(0, i, parentPath);
break
} url = syms.join("/"), url += ext || (/^data\:|^blob\:|\?/.test(url) || skipExt ? "" : ".js"), url = ("/" === url.charAt(0) || url.match(/^[\w\+\.\-]+:/) ? "" : config.baseUrl) + url
}
return config.urlArgs && !/^blob\:/.test(url) ? url + config.urlArgs(moduleName, url) : url
}, req.toUrl = function(moduleNamePlusExt) {
var ext, index = moduleNamePlusExt.lastIndexOf("."),
segment = moduleNamePlusExt.split("/")[0],
isRelative = "." === segment || ".." === segment;
return -1 !== index && (!isRelative || index > 1) && (ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length), moduleNamePlusExt = moduleNamePlusExt.substring(0, index)), req.nameToUrl(normalize(moduleNamePlusExt, relName), ext, !0)
}, req.defined = function(id) {
return makeMap(id, relName, !0).id in defined
}, req.specified = function(id) {
return (id = makeMap(id, relName, !0).id) in defined || id in deferreds
}, req
}
function resolve(name, d, value) {
name && (defined[name] = value, requirejs.onResourceLoad && requirejs.onResourceLoad(context, d.map, d.deps)), d.finished = !0, d.resolve(value)
}
function reject(d, err) {
d.finished = !0, d.rejected = !0, d.reject(err)
}
function makeNormalize(relName) {
return function(name) {
return normalize(name, relName, !0)
}
}
function defineModule(d) {
d.factoryCalled = !0;
var ret, name = d.map.id;
try {
ret = context.execCb(name, d.factory, d.values, defined[name])
} catch (err) {
return reject(d, err)
}
name ? ret === undef && (d.cjsModule ? ret = d.cjsModule.exports : d.usingExports && (ret = defined[name])) : requireDeferreds.splice(requireDeferreds.indexOf(d), 1), resolve(name, d, ret)
}
function depFinished(val, i) {
this.rejected || this.depDefined[i] || (this.depDefined[i] = !0, this.depCount += 1, this.values[i] = val, this.depending || this.depCount !== this.depMax || defineModule(this))
}
function makeDefer(name, calculatedMap) {
var d = {};
return d.promise = new Promise(function(resolve, reject) {
d.resolve = resolve, d.reject = function(err) {
name || requireDeferreds.splice(requireDeferreds.indexOf(d), 1), reject(err)
}
}), d.map = name ? calculatedMap || makeMap(name) : {}, d.depCount = 0, d.depMax = 0, d.values = [], d.depDefined = [], d.depFinished = depFinished, d.map.pr && (d.deps = [makeMap(d.map.pr)]), d
}
function getDefer(name, calculatedMap) {
var d;
return name ? (d = name in deferreds && deferreds[name]) || (d = deferreds[name] = makeDefer(name, calculatedMap)) : (d = makeDefer(), requireDeferreds.push(d)), d
}
function makeErrback(d, name) {
return function(err) {
d.rejected || (err.dynaId || (err.dynaId = "id" + (errCount += 1), err.requireModules = [name]), reject(d, err))
}
}
function waitForDep(depMap, relName, d, i) {
d.depMax += 1, callDep(depMap, relName).then(function(val) {
d.depFinished(val, i)
}, makeErrback(d, depMap.id)).catch(makeErrback(d, d.map.id))
}
function makeLoad(id) {
function load(value) {
fromTextCalled || resolve(id, getDefer(id), value)
}
var fromTextCalled;
return load.error = function(err) {
reject(getDefer(id), err)
}, load.fromText = function(text, textAlt) {
var execError, d = getDefer(id),
map = makeMap(makeMap(id).n),
plainId = map.id;
fromTextCalled = !0, d.factory = function(p, val) {
return val
}, textAlt && (text = textAlt), hasProp(config.config, id) && (config.config[plainId] = config.config[id]);
try {
req.exec(text)
} catch (e) {
execError = new Error("fromText eval for " + plainId + " failed: " + e), execError.requireType = "fromtexteval", reject(d, execError)
}
takeQueue(plainId), d.deps = [map], waitForDep(map, null, d, d.deps.length)
}, load
}
function callPlugin(plugin, map, relName) {
plugin.load(map.n, makeRequire(relName), makeLoad(map.id), config)
}
function splitPrefix(name) {
var prefix, index = name ? name.indexOf("!") : -1;
return index > -1 && (prefix = name.substring(0, index), name = name.substring(index + 1, name.length)), [prefix, name]
}
function breakCycle(d, traced, processed) {
var id = d.map.id;
traced[id] = !0, !d.finished && d.deps && d.deps.forEach(function(depMap) {
var depId = depMap.id,
dep = !hasProp(handlers, depId) && getDefer(depId, depMap);
!dep || dep.finished || processed[depId] || (hasProp(traced, depId) ? d.deps.forEach(function(depMap, i) {
depMap.id === depId && d.depFinished(defined[depId], i)
}) : breakCycle(dep, traced, processed))
}), processed[id] = !0
}
function check(d) {
var err, mid, dfd, notFinished = [],
waitInterval = 1e3 * config.waitSeconds,
expired = waitInterval && startTime + waitInterval < (new Date).getTime();
if (0 === loadCount && (d ? d.finished || breakCycle(d, {}, {}) : requireDeferreds.length && requireDeferreds.forEach(function(d) {
breakCycle(d, {}, {})
})), expired) {
for (mid in deferreds) dfd = deferreds[mid], dfd.finished || notFinished.push(dfd.map.id);
err = new Error("Timeout for modules: " + notFinished), err.requireModules = notFinished, err.requireType = "timeout", notFinished.forEach(function(id) {
reject(getDefer(id), err)
})
} else(loadCount || requireDeferreds.length) && (checkingLater || (checkingLater = !0, setTimeout(function() {
checkingLater = !1, check()
}, 70)))
}
function delayedError(e) {
console.log(e.stack);
return setTimeout(function() {
e.dynaId && trackedErrors[e.dynaId] || (trackedErrors[e.dynaId] = !0, req.onError(e))
}), e
}
var req, main, makeMap, callDep, handlers, checkingLater, load, context, defined = obj(),
waiting = obj(),
config = {
waitSeconds: 7,
baseUrl: "./",
paths: {},
bundles: {},
pkgs: {},
shim: {},
config: {}
},
mapCache = obj(),
requireDeferreds = [],
deferreds = obj(),
calledDefine = obj(),
calledPlugin = obj(),
loadCount = 0,
startTime = (new Date).getTime(),
errCount = 0,
trackedErrors = obj(),
urlFetched = obj(),
bundlesMap = obj(),
asyncResolve = Promise.resolve(undefined);
return load = "function" == typeof importScripts ? function(map) {
var url = map.url;
urlFetched[url] || (urlFetched[url] = !0, getDefer(map.id), importScripts(url), takeQueue(map.id))
} : function(map) {
var script, id = map.id,
url = map.url;
urlFetched[url] || (urlFetched[url] = !0, script = document.createElement("script"), script.setAttribute("data-requiremodule", id), script.type = config.scriptType || "text/javascript", script.charset = "utf-8", script.async = !0, loadCount += 1, script.addEventListener("load", function() {
loadCount -= 1, takeQueue(id)
}, !1), script.addEventListener("error", function() {
loadCount -= 1;
var err, pathConfig = getOwn(config.paths, id);
if (pathConfig && Array.isArray(pathConfig) && pathConfig.length > 1) {
script.parentNode.removeChild(script), pathConfig.shift();
var d = getDefer(id);
d.map = makeMap(id), d.map.url = req.nameToUrl(id), load(d.map)
} else err = new Error("Load failed: " + id + ": " + script.src), err.requireModules = [id], err.requireType = "scripterror", reject(getDefer(id), err)
}, !1), script.src = url, 10 === document.documentMode ? asap.then(function() {
document.head.appendChild(script)
}) : document.head.appendChild(script))
}, callDep = function(map, relName) {
var args, bundleId, name = map.id,
shim = config.shim[name];
if (name in waiting) args = waiting[name], delete waiting[name], main.apply(undef, args);
else if (!(name in deferreds))
if (map.pr) {
if (!(bundleId = getOwn(bundlesMap, name))) return callDep(makeMap(map.pr)).then(function(plugin) {
var newMap = map.prn ? map : makeMap(name, relName, !0),
newId = newMap.id,
shim = getOwn(config.shim, newId);
return newId in calledPlugin || (calledPlugin[newId] = !0, shim && shim.deps ? req(shim.deps, function() {
callPlugin(plugin, newMap, relName)
}) : callPlugin(plugin, newMap, relName)), getDefer(newId).promise
});
map.url = req.nameToUrl(bundleId), load(map)
} else shim && shim.deps ? req(shim.deps, function() {
load(map)
}) : load(map);
return getDefer(name).promise
}, makeMap = function(name, relName, applyMap) {
if ("string" != typeof name) return name;
var plugin, url, parts, prefix, result, prefixNormalized, cacheKey = name + " & " + (relName || "") + " & " + !!applyMap;
return parts = splitPrefix(name), prefix = parts[0], name = parts[1], !prefix && cacheKey in mapCache ? mapCache[cacheKey] : (prefix && (prefix = normalize(prefix, relName, applyMap), plugin = prefix in defined && defined[prefix]), prefix ? plugin && plugin.normalize ? (name = plugin.normalize(name, makeNormalize(relName)), prefixNormalized = !0) : name = -1 === name.indexOf("!") ? normalize(name, relName, applyMap) : name : (name = normalize(name, relName, applyMap), parts = splitPrefix(name), prefix = parts[0], name = parts[1], url = req.nameToUrl(name)), result = {
id: prefix ? prefix + "!" + name : name,
n: name,
pr: prefix,
url: url,
prn: prefix && prefixNormalized
}, prefix || (mapCache[cacheKey] = result), result)
}, handlers = {
require: function(name) {
return makeRequire(name)
},
exports: function(name) {
var e = defined[name];
return void 0 !== e ? e : defined[name] = {}
},
module: function(name) {
return {
id: name,
uri: "",
exports: handlers.exports(name),
config: function() {
return getOwn(config.config, name) || {}
}
}
}
}, main = function(name, deps, factory, errback, relName) {
if (name) {
if (name in calledDefine) return;
calledDefine[name] = !0
}
var d = getDefer(name);
return deps && !Array.isArray(deps) && (factory = deps, deps = []), deps = deps ? slice.call(deps, 0) : null, errback || (hasProp(config, "defaultErrback") ? config.defaultErrback && (errback = config.defaultErrback) : errback = delayedError), errback && d.promise.catch(errback), relName = relName || name, "function" == typeof factory ? (!deps.length && factory.length && (factory.toString().replace(commentRegExp, commentReplace).replace(cjsRequireRegExp, function(match, dep) {
deps.push(dep)
}), deps = (1 === factory.length ? ["require"] : ["require", "exports", "module"]).concat(deps)), d.factory = factory, d.deps = deps, d.depending = !0, deps.forEach(function(depName, i) {
var depMap;
deps[i] = depMap = makeMap(depName, relName, !0), depName = depMap.id, "require" === depName ? d.values[i] = handlers.require(name) : "exports" === depName ? (d.values[i] = handlers.exports(name), d.usingExports = !0) : "module" === depName ? d.values[i] = d.cjsModule = handlers.module(name) : void 0 === depName ? d.values[i] = void 0 : waitForDep(depMap, relName, d, i)
}), d.depending = !1, d.depCount === d.depMax && defineModule(d)) : name && resolve(name, d, factory), startTime = (new Date).getTime(), name || check(d), d.promise
}, req = makeRequire(null, !0), req.config = function(cfg) {
if (cfg.context && cfg.context !== contextName) {
var existingContext = getOwn(contexts, cfg.context);
return existingContext ? existingContext.req.config(cfg) : newContext(cfg.context).config(cfg)
}
if (mapCache = obj(), cfg.baseUrl && "/" !== cfg.baseUrl.charAt(cfg.baseUrl.length - 1) && (cfg.baseUrl += "/"), "string" == typeof cfg.urlArgs) {
var urlArgs = cfg.urlArgs;
cfg.urlArgs = function(id, url) {
return (-1 === url.indexOf("?") ? "?" : "&") + urlArgs
}
}
var shim = config.shim,
objs = {
paths: !0,
bundles: !0,
config: !0,
map: !0
};
return eachProp(cfg, function(value, prop) {
objs[prop] ? (config[prop] || (config[prop] = {}), mixin(config[prop], value, !0, !0)) : config[prop] = value
}), cfg.bundles && eachProp(cfg.bundles, function(value, prop) {
value.forEach(function(v) {
v !== prop && (bundlesMap[v] = prop)
})
}), cfg.shim && (eachProp(cfg.shim, function(value, id) {
Array.isArray(value) && (value = {
deps: value
}), !value.exports && !value.init || value.exportsFn || (value.exportsFn = makeShimExports(value)), shim[id] = value
}), config.shim = shim), cfg.packages && cfg.packages.forEach(function(pkgObj) {
var location, name;
pkgObj = "string" == typeof pkgObj ? {
name: pkgObj
} : pkgObj, name = pkgObj.name, location = pkgObj.location, location && (config.paths[name] = pkgObj.location), config.pkgs[name] = pkgObj.name + "/" + (pkgObj.main || "main").replace(currDirRegExp, "").replace(jsSuffixRegExp, "")
}), (cfg.deps || cfg.callback) && req(cfg.deps, cfg.callback), req
}, req.onError = function(err) {
throw err
}, context = {
id: contextName,
defined: defined,
waiting: waiting,
config: config,
deferreds: deferreds,
req: req,
execCb: function(name, callback, args, exports) {
return callback.apply(exports, args)
}
}, contexts[contextName] = context, req
}
if (!Promise) throw new Error("No Promise implementation available");
var topReq, dataMain, src, subPath, bootstrapConfig = requirejs || require,
hasOwn = Object.prototype.hasOwnProperty,
contexts = {},
queue = [],
currDirRegExp = /^\.\//,
urlRegExp = /^\/|\:|\?|\.js$/,
commentRegExp = /\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/gm,
cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
jsSuffixRegExp = /\.js$/,
slice = Array.prototype.slice;
if ("function" != typeof requirejs) {
var asap = Promise.resolve(void 0);
requirejs = topReq = newContext("_"), "function" != typeof require && (require = topReq), topReq.exec = function(text) {
return eval(text)
}, topReq.contexts = contexts, define = function() {
queue.push(slice.call(arguments, 0))
}, define.amd = {
jQuery: !0
}, bootstrapConfig && topReq.config(bootstrapConfig), topReq.isBrowser && !contexts._.config.skipDataMain && (dataMain = document.querySelectorAll("script[data-main]")[0], (dataMain = dataMain && dataMain.getAttribute("data-main")) && (dataMain = dataMain.replace(jsSuffixRegExp, ""), bootstrapConfig && bootstrapConfig.baseUrl || -1 !== dataMain.indexOf("!") || (src = dataMain.split("/"), dataMain = src.pop(), subPath = src.length ? src.join("/") + "/" : "./", topReq.config({
baseUrl: subPath
})), topReq([dataMain])))
}
}(this, "undefined" != typeof Promise ? Promise : void 0);

View File

@@ -1,747 +0,0 @@
define(["events", "apiclient", "appStorage"], function(events, apiClientFactory, appStorage) {
"use strict";
function getServerAddress(server, mode) {
switch (mode) {
case ConnectionMode.Local:
return server.LocalAddress;
case ConnectionMode.Manual:
return server.ManualAddress;
case ConnectionMode.Remote:
return server.RemoteAddress;
default:
return server.ManualAddress || server.LocalAddress || server.RemoteAddress
}
}
function paramsToString(params) {
var values = [];
for (var key in params) {
var value = params[key];
null !== value && void 0 !== value && "" !== value && values.push(encodeURIComponent(key) + "=" + encodeURIComponent(value))
}
return values.join("&")
}
function resolveFailure(instance, resolve) {
resolve({
State: "Unavailable",
ConnectUser: instance.connectUser()
})
}
function mergeServers(credentialProvider, list1, list2) {
for (var i = 0, length = list2.length; i < length; i++) credentialProvider.addOrUpdateServer(list1, list2[i]);
return list1
}
function updateServerInfo(server, systemInfo) {
server.Name = systemInfo.ServerName, systemInfo.Id && (server.Id = systemInfo.Id), systemInfo.LocalAddress && (server.LocalAddress = systemInfo.LocalAddress)
}
function getEmbyServerUrl(baseUrl, handler) {
return baseUrl + "/" + handler
}
function getFetchPromise(request) {
var headers = request.headers || {};
"json" === request.dataType && (headers.accept = "application/json");
var fetchRequest = {
headers: headers,
method: request.type,
credentials: "same-origin"
},
contentType = request.contentType;
return request.data && ("string" == typeof request.data ? fetchRequest.body = request.data : (fetchRequest.body = paramsToString(request.data), contentType = contentType || "application/x-www-form-urlencoded; charset=UTF-8")), contentType && (headers["Content-Type"] = contentType), request.timeout ? fetchWithTimeout(request.url, fetchRequest, request.timeout) : fetch(request.url, fetchRequest)
}
function fetchWithTimeout(url, options, timeoutMs) {
return console.log("fetchWithTimeout: timeoutMs: " + timeoutMs + ", url: " + url), new Promise(function(resolve, reject) {
var timeout = setTimeout(reject, timeoutMs);
options = options || {}, options.credentials = "same-origin", fetch(url, options).then(function(response) {
clearTimeout(timeout), console.log("fetchWithTimeout: succeeded connecting to url: " + url), resolve(response)
}, function(error) {
clearTimeout(timeout), console.log("fetchWithTimeout: timed out connecting to url: " + url), reject()
})
})
}
function ajax(request) {
if (!request) throw new Error("Request cannot be null");
return request.headers = request.headers || {}, console.log("ConnectionManager requesting url: " + request.url), getFetchPromise(request).then(function(response) {
return console.log("ConnectionManager response status: " + response.status + ", url: " + request.url), response.status < 400 ? "json" === request.dataType || "application/json" === request.headers.accept ? response.json() : response : Promise.reject(response)
}, function(err) {
throw console.log("ConnectionManager request failed to url: " + request.url), err
})
}
function getConnectUrl(handler) {
return "https://connect.emby.media/service/" + handler
}
function replaceAll(originalString, strReplace, strWith) {
var reg = new RegExp(strReplace, "ig");
return originalString.replace(reg, strWith)
}
function normalizeAddress(address) {
return address = address.trim(), 0 !== address.toLowerCase().indexOf("http") && (address = "http://" + address), address = replaceAll(address, "Http:", "http:"), address = replaceAll(address, "Https:", "https:")
}
function stringEqualsIgnoreCase(str1, str2) {
return (str1 || "").toLowerCase() === (str2 || "").toLowerCase()
}
function compareVersions(a, b) {
a = a.split("."), b = b.split(".");
for (var i = 0, length = Math.max(a.length, b.length); i < length; i++) {
var aVal = parseInt(a[i] || "0"),
bVal = parseInt(b[i] || "0");
if (aVal < bVal) return -1;
if (aVal > bVal) return 1
}
return 0
}
var defaultTimeout = 2e4,
ConnectionMode = {
Local: 0,
Remote: 1,
Manual: 2
},
ConnectionManager = function(credentialProvider, appName, appVersion, deviceName, deviceId, capabilities, devicePixelRatio) {
function onConnectUserSignIn(user) {
connectUser = user, events.trigger(self, "connectusersignedin", [user])
}
function onAuthenticated(apiClient, result, options, saveCredentials) {
var credentials = credentialProvider.credentials(),
servers = credentials.Servers.filter(function(s) {
return s.Id === result.ServerId
}),
server = servers.length ? servers[0] : apiClient.serverInfo();
return !1 !== options.updateDateLastAccessed && (server.DateLastAccessed = (new Date).getTime()), server.Id = result.ServerId, saveCredentials ? (server.UserId = result.User.Id, server.AccessToken = result.AccessToken) : (server.UserId = null, server.AccessToken = null), credentialProvider.addOrUpdateServer(credentials.Servers, server), credentialProvider.credentials(credentials), apiClient.enableAutomaticBitrateDetection = options.enableAutomaticBitrateDetection, apiClient.serverInfo(server), afterConnected(apiClient, options), onLocalUserSignIn(server, apiClient.serverAddress(), result.User)
}
function afterConnected(apiClient, options) {
options = options || {}, !1 !== options.reportCapabilities && apiClient.reportCapabilities(capabilities), apiClient.enableAutomaticBitrateDetection = options.enableAutomaticBitrateDetection, !1 !== options.enableWebSocket && (console.log("calling apiClient.ensureWebSocket"), apiClient.ensureWebSocket())
}
function onLocalUserSignIn(server, serverUrl, user) {
return self._getOrAddApiClient(server, serverUrl), (self.onLocalUserSignedIn ? self.onLocalUserSignedIn.call(self, user) : Promise.resolve()).then(function() {
events.trigger(self, "localusersignedin", [user])
})
}
function ensureConnectUser(credentials) {
return connectUser && connectUser.Id === credentials.ConnectUserId ? Promise.resolve() : credentials.ConnectUserId && credentials.ConnectAccessToken ? (connectUser = null, getConnectUser(credentials.ConnectUserId, credentials.ConnectAccessToken).then(function(user) {
return onConnectUserSignIn(user), Promise.resolve()
}, function() {
return Promise.resolve()
})) : Promise.resolve()
}
function getConnectUser(userId, accessToken) {
if (!userId) throw new Error("null userId");
if (!accessToken) throw new Error("null accessToken");
return ajax({
type: "GET",
url: "https://connect.emby.media/service/user?id=" + userId,
dataType: "json",
headers: {
"X-Application": appName + "/" + appVersion,
"X-Connect-UserToken": accessToken
}
})
}
function addAuthenticationInfoFromConnect(server, serverUrl, credentials) {
if (!server.ExchangeToken) throw new Error("server.ExchangeToken cannot be null");
if (!credentials.ConnectUserId) throw new Error("credentials.ConnectUserId cannot be null");
var url = getEmbyServerUrl(serverUrl, "Connect/Exchange?format=json&ConnectUserId=" + credentials.ConnectUserId),
auth = 'MediaBrowser Client="' + appName + '", Device="' + deviceName + '", DeviceId="' + deviceId + '", Version="' + appVersion + '"';
return ajax({
type: "GET",
url: url,
dataType: "json",
headers: {
"X-MediaBrowser-Token": server.ExchangeToken,
"X-Emby-Authorization": auth
}
}).then(function(auth) {
return server.UserId = auth.LocalUserId, server.AccessToken = auth.AccessToken, auth
}, function() {
return server.UserId = null, server.AccessToken = null, Promise.reject()
})
}
function validateAuthentication(server, serverUrl) {
return ajax({
type: "GET",
url: getEmbyServerUrl(serverUrl, "System/Info"),
dataType: "json",
headers: {
"X-MediaBrowser-Token": server.AccessToken
}
}).then(function(systemInfo) {
return updateServerInfo(server, systemInfo), Promise.resolve()
}, function() {
return server.UserId = null, server.AccessToken = null, Promise.resolve()
})
}
function getImageUrl(localUser) {
if (connectUser && connectUser.ImageUrl) return {
url: connectUser.ImageUrl
};
if (localUser && localUser.PrimaryImageTag) {
return {
url: self.getApiClient(localUser).getUserImageUrl(localUser.Id, {
tag: localUser.PrimaryImageTag,
type: "Primary"
}),
supportsParams: !0
}
}
return {
url: null,
supportsParams: !1
}
}
function logoutOfServer(apiClient) {
var serverInfo = apiClient.serverInfo() || {},
logoutInfo = {
serverId: serverInfo.Id
};
return apiClient.logout().then(function() {
events.trigger(self, "localusersignedout", [logoutInfo])
}, function() {
events.trigger(self, "localusersignedout", [logoutInfo])
})
}
function getConnectServers(credentials) {
return console.log("Begin getConnectServers"), credentials.ConnectAccessToken && credentials.ConnectUserId ? ajax({
type: "GET",
url: "https://connect.emby.media/service/servers?userId=" + credentials.ConnectUserId,
dataType: "json",
headers: {
"X-Application": appName + "/" + appVersion,
"X-Connect-UserToken": credentials.ConnectAccessToken
}
}).then(function(servers) {
return servers.map(function(i) {
return {
ExchangeToken: i.AccessKey,
ConnectServerId: i.Id,
Id: i.SystemId,
Name: i.Name,
RemoteAddress: i.Url,
LocalAddress: i.LocalAddress,
UserLinkType: "guest" === (i.UserType || "").toLowerCase() ? "Guest" : "LinkedUser"
}
})
}, function() {
return credentials.Servers.slice(0).filter(function(s) {
return s.ExchangeToken
})
}) : Promise.resolve([])
}
function filterServers(servers, connectServers) {
return servers.filter(function(server) {
return !server.ExchangeToken || connectServers.filter(function(connectServer) {
return server.Id === connectServer.Id
}).length > 0
})
}
function findServers() {
return new Promise(function(resolve, reject) {
var onFinish = function(foundServers) {
var servers = foundServers.map(function(foundServer) {
var info = {
Id: foundServer.Id,
LocalAddress: convertEndpointAddressToManualAddress(foundServer) || foundServer.Address,
Name: foundServer.Name
};
return info.LastConnectionMode = info.ManualAddress ? ConnectionMode.Manual : ConnectionMode.Local, info
});
resolve(servers)
};
if (window.NativeShell && typeof window.NativeShell.findServers === 'function') {
window.NativeShell.findServers(1e3).then(onFinish, function() {
onFinish([])
});
} else {
resolve([]);
}
});
}
function convertEndpointAddressToManualAddress(info) {
if (info.Address && info.EndpointAddress) {
var address = info.EndpointAddress.split(":")[0],
parts = info.Address.split(":");
if (parts.length > 1) {
var portString = parts[parts.length - 1];
isNaN(parseInt(portString)) || (address += ":" + portString)
}
return normalizeAddress(address)
}
return null
}
function getTryConnectPromise(url, connectionMode, state, resolve, reject) {
console.log("getTryConnectPromise " + url), ajax({
url: getEmbyServerUrl(url, "system/info/public"),
timeout: defaultTimeout,
type: "GET",
dataType: "json"
}).then(function(result) {
state.resolved || (state.resolved = !0, console.log("Reconnect succeeded to " + url), resolve({
url: url,
connectionMode: connectionMode,
data: result
}))
}, function() {
state.resolved || (console.log("Reconnect failed to " + url), ++state.rejects >= state.numAddresses && reject())
})
}
function tryReconnect(serverInfo) {
var addresses = [],
addressesStrings = [];
return !serverInfo.manualAddressOnly && serverInfo.LocalAddress && -1 === addressesStrings.indexOf(serverInfo.LocalAddress) && (addresses.push({
url: serverInfo.LocalAddress,
mode: ConnectionMode.Local,
timeout: 0
}), addressesStrings.push(addresses[addresses.length - 1].url)), serverInfo.ManualAddress && -1 === addressesStrings.indexOf(serverInfo.ManualAddress) && (addresses.push({
url: serverInfo.ManualAddress,
mode: ConnectionMode.Manual,
timeout: 100
}), addressesStrings.push(addresses[addresses.length - 1].url)), !serverInfo.manualAddressOnly && serverInfo.RemoteAddress && -1 === addressesStrings.indexOf(serverInfo.RemoteAddress) && (addresses.push({
url: serverInfo.RemoteAddress,
mode: ConnectionMode.Remote,
timeout: 200
}), addressesStrings.push(addresses[addresses.length - 1].url)), console.log("tryReconnect: " + addressesStrings.join("|")), new Promise(function(resolve, reject) {
var state = {};
state.numAddresses = addresses.length, state.rejects = 0, addresses.map(function(url) {
setTimeout(function() {
state.resolved || getTryConnectPromise(url.url, url.mode, state, resolve, reject)
}, url.timeout)
})
})
}
function onSuccessfulConnection(server, systemInfo, connectionMode, serverUrl, options, resolve) {
var credentials = credentialProvider.credentials();
options = options || {}, credentials.ConnectAccessToken && !1 !== options.enableAutoLogin ? ensureConnectUser(credentials).then(function() {
server.ExchangeToken ? addAuthenticationInfoFromConnect(server, serverUrl, credentials).then(function() {
afterConnectValidated(server, credentials, systemInfo, connectionMode, serverUrl, !0, options, resolve)
}, function() {
afterConnectValidated(server, credentials, systemInfo, connectionMode, serverUrl, !0, options, resolve)
}) : afterConnectValidated(server, credentials, systemInfo, connectionMode, serverUrl, !0, options, resolve)
}) : afterConnectValidated(server, credentials, systemInfo, connectionMode, serverUrl, !0, options, resolve)
}
function afterConnectValidated(server, credentials, systemInfo, connectionMode, serverUrl, verifyLocalAuthentication, options, resolve) {
if (options = options || {}, !1 === options.enableAutoLogin) server.UserId = null, server.AccessToken = null;
else if (verifyLocalAuthentication && server.AccessToken && !1 !== options.enableAutoLogin) return void validateAuthentication(server, serverUrl).then(function() {
afterConnectValidated(server, credentials, systemInfo, connectionMode, serverUrl, !1, options, resolve)
});
updateServerInfo(server, systemInfo), server.LastConnectionMode = connectionMode, !1 !== options.updateDateLastAccessed && (server.DateLastAccessed = (new Date).getTime()), credentialProvider.addOrUpdateServer(credentials.Servers, server), credentialProvider.credentials(credentials);
var result = {
Servers: []
};
result.ApiClient = self._getOrAddApiClient(server, serverUrl), result.ApiClient.setSystemInfo(systemInfo), result.State = server.AccessToken && !1 !== options.enableAutoLogin ? "SignedIn" : "ServerSignIn", result.Servers.push(server), result.ApiClient.enableAutomaticBitrateDetection = options.enableAutomaticBitrateDetection, result.ApiClient.updateServerInfo(server, serverUrl);
var resolveActions = function() {
resolve(result), events.trigger(self, "connected", [result])
};
"SignedIn" === result.State ? (afterConnected(result.ApiClient, options), result.ApiClient.getCurrentUser().then(function(user) {
onLocalUserSignIn(server, serverUrl, user).then(resolveActions, resolveActions)
}, resolveActions)) : resolveActions()
}
function getCacheKey(feature, apiClient, options) {
options = options || {};
var viewOnly = options.viewOnly,
cacheKey = "regInfo-" + apiClient.serverId();
return viewOnly && (cacheKey += "-viewonly"), cacheKey
}
function addAppInfoToConnectRequest(request) {
request.headers = request.headers || {}, request.headers["X-Application"] = appName + "/" + appVersion
}
function exchangePin(pinInfo) {
if (!pinInfo) throw new Error("pinInfo cannot be null");
var request = {
type: "POST",
url: getConnectUrl("pin/authenticate"),
data: {
deviceId: pinInfo.DeviceId,
pin: pinInfo.Pin
},
dataType: "json"
};
return addAppInfoToConnectRequest(request), ajax(request)
}
console.log("Begin ConnectionManager constructor");
var self = this;
this._apiClients = [];
var connectUser;
self.connectUser = function() {
return connectUser
}, self._minServerVersion = "3.2.33", self.appVersion = function() {
return appVersion
}, self.appName = function() {
return appName
}, self.capabilities = function() {
return capabilities
}, self.deviceId = function() {
return deviceId
}, self.credentialProvider = function() {
return credentialProvider
}, self.connectUserId = function() {
return credentialProvider.credentials().ConnectUserId
}, self.connectToken = function() {
return credentialProvider.credentials().ConnectAccessToken
}, self.getServerInfo = function(id) {
return credentialProvider.credentials().Servers.filter(function(s) {
return s.Id === id
})[0]
}, self.getLastUsedServer = function() {
var servers = credentialProvider.credentials().Servers;
return servers.sort(function(a, b) {
return (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0)
}), servers.length ? servers[0] : null
}, self.addApiClient = function(apiClient) {
self._apiClients.push(apiClient);
var existingServers = credentialProvider.credentials().Servers.filter(function(s) {
return stringEqualsIgnoreCase(s.ManualAddress, apiClient.serverAddress()) || stringEqualsIgnoreCase(s.LocalAddress, apiClient.serverAddress()) || stringEqualsIgnoreCase(s.RemoteAddress, apiClient.serverAddress())
}),
existingServer = existingServers.length ? existingServers[0] : apiClient.serverInfo();
if (existingServer.DateLastAccessed = (new Date).getTime(), existingServer.LastConnectionMode = ConnectionMode.Manual, existingServer.ManualAddress = apiClient.serverAddress(), apiClient.manualAddressOnly && (existingServer.manualAddressOnly = !0), apiClient.serverInfo(existingServer), apiClient.onAuthenticated = function(instance, result) {
return onAuthenticated(instance, result, {}, !0)
}, !existingServers.length) {
var credentials = credentialProvider.credentials();
credentials.Servers = [existingServer], credentialProvider.credentials(credentials)
}
events.trigger(self, "apiclientcreated", [apiClient])
}, self.clearData = function() {
console.log("connection manager clearing data"), connectUser = null;
var credentials = credentialProvider.credentials();
credentials.ConnectAccessToken = null, credentials.ConnectUserId = null, credentials.Servers = [], credentialProvider.credentials(credentials)
}, self._getOrAddApiClient = function(server, serverUrl) {
var apiClient = self.getApiClient(server.Id);
return apiClient || (apiClient = new apiClientFactory(serverUrl, appName, appVersion, deviceName, deviceId, devicePixelRatio), self._apiClients.push(apiClient), apiClient.serverInfo(server), apiClient.onAuthenticated = function(instance, result) {
return onAuthenticated(instance, result, {}, !0)
}, events.trigger(self, "apiclientcreated", [apiClient])), console.log("returning instance from getOrAddApiClient"), apiClient
}, self.getOrCreateApiClient = function(serverId) {
var credentials = credentialProvider.credentials(),
servers = credentials.Servers.filter(function(s) {
return stringEqualsIgnoreCase(s.Id, serverId)
});
if (!servers.length) throw new Error("Server not found: " + serverId);
var server = servers[0];
return self._getOrAddApiClient(server, getServerAddress(server, server.LastConnectionMode))
}, self.user = function(apiClient) {
return new Promise(function(resolve, reject) {
function onLocalUserDone(e) {
var image = getImageUrl(localUser);
resolve({
localUser: localUser,
name: connectUser ? connectUser.Name : localUser ? localUser.Name : null,
imageUrl: image.url,
supportsImageParams: image.supportsParams,
connectUser: connectUser
})
}
function onEnsureConnectUserDone() {
apiClient && apiClient.getCurrentUserId() ? apiClient.getCurrentUser().then(function(u) {
localUser = u, onLocalUserDone()
}, onLocalUserDone) : onLocalUserDone()
}
var localUser, credentials = credentialProvider.credentials();
!credentials.ConnectUserId || !credentials.ConnectAccessToken || apiClient && apiClient.getCurrentUserId() ? onEnsureConnectUserDone() : ensureConnectUser(credentials).then(onEnsureConnectUserDone, onEnsureConnectUserDone)
})
}, self.logout = function() {
console.log("begin connectionManager loguot");
for (var promises = [], i = 0, length = self._apiClients.length; i < length; i++) {
var apiClient = self._apiClients[i];
apiClient.accessToken() && promises.push(logoutOfServer(apiClient))
}
return Promise.all(promises).then(function() {
for (var credentials = credentialProvider.credentials(), servers = credentials.Servers.filter(function(u) {
return "Guest" !== u.UserLinkType
}), j = 0, numServers = servers.length; j < numServers; j++) {
var server = servers[j];
server.UserId = null, server.AccessToken = null, server.ExchangeToken = null
}
credentials.Servers = servers, credentials.ConnectAccessToken = null, credentials.ConnectUserId = null, credentialProvider.credentials(credentials), connectUser && (connectUser = null, events.trigger(self, "connectusersignedout"))
})
}, self.getSavedServers = function() {
var credentials = credentialProvider.credentials(),
servers = credentials.Servers.slice(0);
return servers.sort(function(a, b) {
return (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0)
}), servers
}, self.getAvailableServers = function() {
console.log("Begin getAvailableServers");
var credentials = credentialProvider.credentials();
return Promise.all([getConnectServers(credentials), findServers()]).then(function(responses) {
var connectServers = responses[0],
foundServers = responses[1],
servers = credentials.Servers.slice(0);
return mergeServers(credentialProvider, servers, foundServers), mergeServers(credentialProvider, servers, connectServers), servers = filterServers(servers, connectServers), servers.sort(function(a, b) {
return (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0)
}), credentials.Servers = servers, credentialProvider.credentials(credentials), servers
})
}, self.connectToServers = function(servers, options) {
console.log("Begin connectToServers, with " + servers.length + " servers");
var firstServer = servers.length ? servers[0] : null;
return firstServer ? self.connectToServer(firstServer, options).then(function(result) {
return "Unavailable" === result.State && (result.State = "ServerSelection"), console.log("resolving connectToServers with result.State: " + result.State), result
}) : Promise.resolve({
Servers: servers,
State: servers.length || self.connectUser() ? "ServerSelection" : "ConnectSignIn",
ConnectUser: self.connectUser()
})
}, self.connectToServer = function(server, options) {
return console.log("begin connectToServer"), new Promise(function(resolve, reject) {
options = options || {}, tryReconnect(server).then(function(result) {
var serverUrl = result.url,
connectionMode = result.connectionMode;
result = result.data, 1 === compareVersions(self.minServerVersion(), result.Version) ? (console.log("minServerVersion requirement not met. Server version: " + result.Version), resolve({
State: "ServerUpdateNeeded",
Servers: [server]
})) : server.Id && result.Id !== server.Id ? (console.log("http request succeeded, but found a different server Id than what was expected"), resolveFailure(self, resolve)) : onSuccessfulConnection(server, result, connectionMode, serverUrl, options, resolve)
}, function() {
resolveFailure(self, resolve)
})
})
}, self.connectToAddress = function(address, options) {
function onFail() {
return console.log("connectToAddress " + address + " failed"), Promise.resolve({
State: "Unavailable",
ConnectUser: instance.connectUser()
})
}
if (!address) return Promise.reject();
address = normalizeAddress(address);
var instance = this,
server = {
ManualAddress: address,
LastConnectionMode: ConnectionMode.Manual
};
return self.connectToServer(server, options).catch(onFail)
}, self.loginToConnect = function(username, password) {
return username && password ? ajax({
type: "POST",
url: "https://connect.emby.media/service/user/authenticate",
data: {
nameOrEmail: username,
rawpw: password
},
dataType: "json",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
headers: {
"X-Application": appName + "/" + appVersion
}
}).then(function(result) {
var credentials = credentialProvider.credentials();
return credentials.ConnectAccessToken = result.AccessToken, credentials.ConnectUserId = result.User.Id, credentialProvider.credentials(credentials), onConnectUserSignIn(result.User), result
}) : Promise.reject()
}, self.signupForConnect = function(options) {
var email = options.email,
username = options.username,
password = options.password,
passwordConfirm = options.passwordConfirm;
if (!email) return Promise.reject({
errorCode: "invalidinput"
});
if (!username) return Promise.reject({
errorCode: "invalidinput"
});
if (!password) return Promise.reject({
errorCode: "invalidinput"
});
if (!passwordConfirm) return Promise.reject({
errorCode: "passwordmatch"
});
if (password !== passwordConfirm) return Promise.reject({
errorCode: "passwordmatch"
});
var data = {
email: email,
userName: username,
rawpw: password
};
return options.grecaptcha && (data.grecaptcha = options.grecaptcha), ajax({
type: "POST",
url: "https://connect.emby.media/service/register",
data: data,
dataType: "json",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
headers: {
"X-Application": appName + "/" + appVersion,
"X-CONNECT-TOKEN": "CONNECT-REGISTER"
}
}).catch(function(response) {
try {
return response.json()
} catch (err) {
throw err
}
}).then(function(result) {
if (result && result.Status) return "SUCCESS" === result.Status ? Promise.resolve(result) : Promise.reject({
errorCode: result.Status
});
Promise.reject()
})
}, self.getUserInvitations = function() {
var connectToken = self.connectToken();
if (!connectToken) throw new Error("null connectToken");
if (!self.connectUserId()) throw new Error("null connectUserId");
return ajax({
type: "GET",
url: "https://connect.emby.media/service/servers?userId=" + self.connectUserId() + "&status=Waiting",
dataType: "json",
headers: {
"X-Connect-UserToken": connectToken,
"X-Application": appName + "/" + appVersion
}
})
}, self.deleteServer = function(serverId) {
if (!serverId) throw new Error("null serverId");
var server = credentialProvider.credentials().Servers.filter(function(s) {
return s.Id === serverId
});
return server = server.length ? server[0] : null, new Promise(function(resolve, reject) {
function onDone() {
var credentials = credentialProvider.credentials();
credentials.Servers = credentials.Servers.filter(function(s) {
return s.Id !== serverId
}), credentialProvider.credentials(credentials), resolve()
}
if (!server.ConnectServerId) return void onDone();
var connectToken = self.connectToken(),
connectUserId = self.connectUserId();
if (!connectToken || !connectUserId) return void onDone();
ajax({
type: "DELETE",
url: "https://connect.emby.media/service/serverAuthorizations?serverId=" + server.ConnectServerId + "&userId=" + connectUserId,
headers: {
"X-Connect-UserToken": connectToken,
"X-Application": appName + "/" + appVersion
}
}).then(onDone, onDone)
})
}, self.rejectServer = function(serverId) {
var connectToken = self.connectToken();
if (!serverId) throw new Error("null serverId");
if (!connectToken) throw new Error("null connectToken");
if (!self.connectUserId()) throw new Error("null connectUserId");
var url = "https://connect.emby.media/service/serverAuthorizations?serverId=" + serverId + "&userId=" + self.connectUserId();
return fetch(url, {
method: "DELETE",
headers: {
"X-Connect-UserToken": connectToken,
"X-Application": appName + "/" + appVersion
}
})
}, self.acceptServer = function(serverId) {
var connectToken = self.connectToken();
if (!serverId) throw new Error("null serverId");
if (!connectToken) throw new Error("null connectToken");
if (!self.connectUserId()) throw new Error("null connectUserId");
return ajax({
type: "GET",
url: "https://connect.emby.media/service/ServerAuthorizations/accept?serverId=" + serverId + "&userId=" + self.connectUserId(),
headers: {
"X-Connect-UserToken": connectToken,
"X-Application": appName + "/" + appVersion
}
})
}, self.resetRegistrationInfo = function(apiClient) {
var cacheKey = getCacheKey("themes", apiClient, {
viewOnly: !0
});
appStorage.removeItem(cacheKey), cacheKey = getCacheKey("themes", apiClient, {
viewOnly: !1
}), appStorage.removeItem(cacheKey)
}, self.getRegistrationInfo = function(feature, apiClient, options) {
var cacheKey = getCacheKey(feature, apiClient, options);
appStorage.setItem(cacheKey, JSON.stringify({
lastValidDate: new Date().getTime(),
deviceId: self.deviceId()
}));
return Promise.resolve();
}, self.createPin = function() {
var request = {
type: "POST",
url: getConnectUrl("pin"),
data: {
deviceId: deviceId
},
dataType: "json"
};
return addAppInfoToConnectRequest(request), ajax(request)
}, self.getPinStatus = function(pinInfo) {
if (!pinInfo) throw new Error("pinInfo cannot be null");
var queryString = {
deviceId: pinInfo.DeviceId,
pin: pinInfo.Pin
},
request = {
type: "GET",
url: getConnectUrl("pin") + "?" + paramsToString(queryString),
dataType: "json"
};
return addAppInfoToConnectRequest(request), ajax(request)
}, self.exchangePin = function(pinInfo) {
if (!pinInfo) throw new Error("pinInfo cannot be null");
return exchangePin(pinInfo).then(function(result) {
var credentials = credentialProvider.credentials();
return credentials.ConnectAccessToken = result.AccessToken, credentials.ConnectUserId = result.UserId, credentialProvider.credentials(credentials), ensureConnectUser(credentials)
})
}
};
return ConnectionManager.prototype.connect = function(options) {
console.log("Begin connect");
var instance = this;
return instance.getAvailableServers().then(function(servers) {
return instance.connectToServers(servers, options)
})
}, ConnectionManager.prototype.isLoggedIntoConnect = function() {
return !(!this.connectToken() || !this.connectUserId())
}, ConnectionManager.prototype.getApiClients = function() {
for (var servers = this.getSavedServers(), i = 0, length = servers.length; i < length; i++) {
var server = servers[i];
server.Id && this._getOrAddApiClient(server, getServerAddress(server, server.LastConnectionMode))
}
return this._apiClients
}, ConnectionManager.prototype.getApiClient = function(item) {
if (!item) throw new Error("item or serverId cannot be null");
return item.ServerId && (item = item.ServerId), this._apiClients.filter(function(a) {
var serverInfo = a.serverInfo();
return !serverInfo || serverInfo.Id === item
})[0]
}, ConnectionManager.prototype.minServerVersion = function(val) {
return val && (this._minServerVersion = val), this._minServerVersion
}, ConnectionManager.prototype.handleMessageReceived = function(msg) {
var serverId = msg.ServerId;
if (serverId) {
var apiClient = this.getApiClient(serverId);
if (apiClient) {
if ("string" == typeof msg.Data) try {
msg.Data = JSON.parse(msg.Data)
} catch (err) {}
apiClient.handleMessageReceived(msg)
}
}
}, ConnectionManager
});

View File

@@ -1,22 +0,0 @@
define(["serversync"], function(ServerSync) {
"use strict";
function syncNext(connectionManager, servers, index, options, resolve, reject) {
var length = servers.length;
if (index >= length) return console.log("MultiServerSync.sync complete"), void resolve();
var server = servers[index];
console.log("Creating ServerSync to server: " + server.Id), (new ServerSync).sync(connectionManager, server, options).then(function() {
console.log("ServerSync succeeded to server: " + server.Id), syncNext(connectionManager, servers, index + 1, options, resolve, reject)
}, function(err) {
console.log("ServerSync failed to server: " + server.Id + ". " + err), syncNext(connectionManager, servers, index + 1, options, resolve, reject)
})
}
function MultiServerSync() {}
return MultiServerSync.prototype.sync = function(connectionManager, options) {
return console.log("MultiServerSync.sync starting..."), new Promise(function(resolve, reject) {
var servers = connectionManager.getSavedServers();
syncNext(connectionManager, servers, 0, options, resolve, reject)
})
}, MultiServerSync
});

View File

@@ -1,12 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>testing my-element</title>
<script src="build/document-register-element.js"></script>
<script src="test/my-element.js"></script>
</head>
<body>
<my-element>
some content
</my-element>
</body>

View File

@@ -1,246 +0,0 @@
/*! (C) WebReflection Mit Style License */
(function(e, t, n, r) {
"use strict";
function rt(e, t) {
for (var n = 0, r = e.length; n < r; n++) vt(e[n], t)
}
function it(e) {
for (var t = 0, n = e.length, r; t < n; t++) r = e[t], nt(r, b[ot(r)])
}
function st(e) {
return function(t) {
j(t) && (vt(t, e), rt(t.querySelectorAll(w), e))
}
}
function ot(e) {
var t = e.getAttribute("is"),
n = e.nodeName.toUpperCase(),
r = S.call(y, t ? v + t.toUpperCase() : d + n);
return t && -1 < r && !ut(n, t) ? -1 : r
}
function ut(e, t) {
return -1 < w.indexOf(e + '[is="' + t + '"]')
}
function at(e) {
var t = e.currentTarget,
n = e.attrChange,
r = e.attrName,
i = e.target;
Q && (!i || i === t) && t.attributeChangedCallback && r !== "style" && e.prevValue !== e.newValue && t.attributeChangedCallback(r, n === e[a] ? null : e.prevValue, n === e[l] ? null : e.newValue)
}
function ft(e) {
var t = st(e);
return function(e) {
X.push(t, e.target)
}
}
function lt(e) {
K && (K = !1, e.currentTarget.removeEventListener(h, lt)), rt((e.target || t).querySelectorAll(w), e.detail === o ? o : s), B && pt()
}
function ct(e, t) {
var n = this;
q.call(n, e, t), G.call(n, {
target: n
})
}
function ht(e, t) {
D(e, t), et ? et.observe(e, z) : (J && (e.setAttribute = ct, e[i] = Z(e), e.addEventListener(p, G)), e.addEventListener(c, at)), e.createdCallback && Q && (e.created = !0, e.createdCallback(), e.created = !1)
}
function pt() {
for (var e, t = 0, n = F.length; t < n; t++) e = F[t], E.contains(e) || (n--, F.splice(t--, 1), vt(e, o))
}
function dt(e) {
throw new Error("A " + e + " type is already registered")
}
function vt(e, t) {
var n, r = ot(e); - 1 < r && (tt(e, b[r]), r = 0, t === s && !e[s] ? (e[o] = !1, e[s] = !0, r = 1, B && S.call(F, e) < 0 && F.push(e)) : t === o && !e[o] && (e[s] = !1, e[o] = !0, r = 1), r && (n = e[t + "Callback"]) && n.call(e))
}
if (r in t) return;
var i = "__" + r + (Math.random() * 1e5 >> 0),
s = "attached",
o = "detached",
u = "extends",
a = "ADDITION",
f = "MODIFICATION",
l = "REMOVAL",
c = "DOMAttrModified",
h = "DOMContentLoaded",
p = "DOMSubtreeModified",
d = "<",
v = "=",
m = /^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$/,
g = ["ANNOTATION-XML", "COLOR-PROFILE", "FONT-FACE", "FONT-FACE-SRC", "FONT-FACE-URI", "FONT-FACE-FORMAT", "FONT-FACE-NAME", "MISSING-GLYPH"],
y = [],
b = [],
w = "",
E = t.documentElement,
S = y.indexOf || function(e) {
for (var t = this.length; t-- && this[t] !== e;);
return t
},
x = n.prototype,
T = x.hasOwnProperty,
N = x.isPrototypeOf,
C = n.defineProperty,
k = n.getOwnPropertyDescriptor,
L = n.getOwnPropertyNames,
A = n.getPrototypeOf,
O = n.setPrototypeOf,
M = !!n.__proto__,
_ = n.create || function mt(e) {
return e ? (mt.prototype = e, new mt) : this
},
D = O || (M ? function(e, t) {
return e.__proto__ = t, e
} : L && k ? function() {
function e(e, t) {
for (var n, r = L(t), i = 0, s = r.length; i < s; i++) n = r[i], T.call(e, n) || C(e, n, k(t, n))
}
return function(t, n) {
do e(t, n); while ((n = A(n)) && !N.call(n, t));
return t
}
}() : function(e, t) {
for (var n in t) e[n] = t[n];
return e
}),
P = e.MutationObserver || e.WebKitMutationObserver,
H = (e.HTMLElement || e.Element || e.Node).prototype,
B = !N.call(H, E),
j = B ? function(e) {
return e.nodeType === 1
} : function(e) {
return N.call(H, e)
},
F = B && [],
I = H.cloneNode,
q = H.setAttribute,
R = H.removeAttribute,
U = t.createElement,
z = P && {
attributes: !0,
characterData: !0,
attributeOldValue: !0
},
W = P || function(e) {
J = !1, E.removeEventListener(c, W)
},
X, V = e.requestAnimationFrame || e.webkitRequestAnimationFrame || e.mozRequestAnimationFrame || e.msRequestAnimationFrame || function(e) {
setTimeout(e, 10)
},
$ = !1,
J = !0,
K = !0,
Q = !0,
G, Y, Z, et, tt, nt;
O || M ? (tt = function(e, t) {
N.call(t, e) || ht(e, t)
}, nt = ht) : (tt = function(e, t) {
e[i] || (e[i] = n(!0), ht(e, t))
}, nt = tt), B ? (J = !1, function() {
var e = k(H, "addEventListener"),
t = e.value,
n = function(e) {
var t = new CustomEvent(c, {
bubbles: !0
});
t.attrName = e, t.prevValue = this.getAttribute(e), t.newValue = null, t[l] = t.attrChange = 2, R.call(this, e), this.dispatchEvent(t)
},
r = function(e, t) {
var n = this.hasAttribute(e),
r = n && this.getAttribute(e),
i = new CustomEvent(c, {
bubbles: !0
});
q.call(this, e, t), i.attrName = e, i.prevValue = n ? r : null, i.newValue = t, n ? i[f] = i.attrChange = 1 : i[a] = i.attrChange = 0, this.dispatchEvent(i)
},
s = function(e) {
var t = e.currentTarget,
n = t[i],
r = e.propertyName,
s;
n.hasOwnProperty(r) && (n = n[r], s = new CustomEvent(c, {
bubbles: !0
}), s.attrName = n.name, s.prevValue = n.value || null, s.newValue = n.value = t[r] || null, s.prevValue == null ? s[a] = s.attrChange = 0 : s[f] = s.attrChange = 1, t.dispatchEvent(s))
};
e.value = function(e, o, u) {
e === c && this.attributeChangedCallback && this.setAttribute !== r && (this[i] = {
className: {
name: "class",
value: this.className
}
}, this.setAttribute = r, this.removeAttribute = n, t.call(this, "propertychange", s)), t.call(this, e, o, u)
}, C(H, "addEventListener", e)
}()) : P || (E.addEventListener(c, W), E.setAttribute(i, 1), E.removeAttribute(i), J && (G = function(e) {
var t = this,
n, r, s;
if (t === e.target) {
n = t[i], t[i] = r = Z(t);
for (s in r) {
if (!(s in n)) return Y(0, t, s, n[s], r[s], a);
if (r[s] !== n[s]) return Y(1, t, s, n[s], r[s], f)
}
for (s in n)
if (!(s in r)) return Y(2, t, s, n[s], r[s], l)
}
}, Y = function(e, t, n, r, i, s) {
var o = {
attrChange: e,
currentTarget: t,
attrName: n,
prevValue: r,
newValue: i
};
o[s] = e, at(o)
}, Z = function(e) {
for (var t, n, r = {}, i = e.attributes, s = 0, o = i.length; s < o; s++) t = i[s], n = t.name, n !== "setAttribute" && (r[n] = t.value);
return r
})), t[r] = function(n, r) {
c = n.toUpperCase(), $ || ($ = !0, P ? (et = function(e, t) {
function n(e, t) {
for (var n = 0, r = e.length; n < r; t(e[n++]));
}
return new P(function(r) {
for (var i, s, o, u = 0, a = r.length; u < a; u++) i = r[u], i.type === "childList" ? (n(i.addedNodes, e), n(i.removedNodes, t)) : (s = i.target, Q && s.attributeChangedCallback && i.attributeName !== "style" && (o = s.getAttribute(i.attributeName), o !== i.oldValue && s.attributeChangedCallback(i.attributeName, i.oldValue, o)))
})
}(st(s), st(o)), et.observe(t, {
childList: !0,
subtree: !0
})) : (X = [], V(function E() {
while (X.length) X.shift().call(null, X.shift());
V(E)
}), t.addEventListener("DOMNodeInserted", ft(s)), t.addEventListener("DOMNodeRemoved", ft(o))), t.addEventListener(h, lt), t.addEventListener("readystatechange", lt), t.createElement = function(e, n) {
var r = U.apply(t, arguments),
i = "" + e,
s = S.call(y, (n ? v : d) + (n || i).toUpperCase()),
o = -1 < s;
return n && (r.setAttribute("is", n = n.toLowerCase()), o && (o = ut(i.toUpperCase(), n))), Q = !t.createElement.innerHTMLHelper, o && nt(r, b[s]), r
}, H.cloneNode = function(e) {
var t = I.call(this, !!e),
n = ot(t);
return -1 < n && nt(t, b[n]), e && it(t.querySelectorAll(w)), t
}), -2 < S.call(y, v + c) + S.call(y, d + c) && dt(n);
if (!m.test(c) || -1 < S.call(g, c)) throw new Error("The type " + n + " is invalid");
var i = function() {
return f ? t.createElement(l, c) : t.createElement(l)
},
a = r || x,
f = T.call(a, u),
l = f ? r[u].toUpperCase() : c,
c, p;
return f && -1 < S.call(y, d + l) && dt(l), p = y.push((f ? v : d) + c) - 1, w = w.concat(w.length ? "," : "", f ? l + '[is="' + n.toLowerCase() + '"]' : l), i.prototype = b[p] = T.call(a, "prototype") ? a.prototype : _(H), rt(t.querySelectorAll(w), s), i
}
})(window, document, Object, "registerElement");

View File

@@ -1,263 +0,0 @@
! function(self) {
"use strict";
function normalizeName(name) {
if ("string" != typeof name && (name = String(name)), /[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) throw new TypeError("Invalid character in header field name");
return name.toLowerCase()
}
function normalizeValue(value) {
return "string" != typeof value && (value = String(value)), value
}
function iteratorFor(items) {
var iterator = {
next: function() {
var value = items.shift();
return {
done: void 0 === value,
value: value
}
}
};
return support.iterable && (iterator[Symbol.iterator] = function() {
return iterator
}), iterator
}
function Headers(headers) {
this.map = {}, headers instanceof Headers ? headers.forEach(function(value, name) {
this.append(name, value)
}, this) : headers && Object.getOwnPropertyNames(headers).forEach(function(name) {
this.append(name, headers[name])
}, this)
}
function consumed(body) {
if (body.bodyUsed) return Promise.reject(new TypeError("Already read"));
body.bodyUsed = !0
}
function fileReaderReady(reader) {
return new Promise(function(resolve, reject) {
reader.onload = function() {
resolve(reader.result)
}, reader.onerror = function() {
reject(reader.error)
}
})
}
function readBlobAsArrayBuffer(blob) {
var reader = new FileReader,
promise = fileReaderReady(reader);
return reader.readAsArrayBuffer(blob), promise
}
function readBlobAsText(blob) {
var reader = new FileReader,
promise = fileReaderReady(reader);
return reader.readAsText(blob), promise
}
function readArrayBufferAsText(buf) {
for (var view = new Uint8Array(buf), chars = new Array(view.length), i = 0; i < view.length; i++) chars[i] = String.fromCharCode(view[i]);
return chars.join("")
}
function bufferClone(buf) {
if (buf.slice) return buf.slice(0);
var view = new Uint8Array(buf.byteLength);
return view.set(new Uint8Array(buf)), view.buffer
}
function Body() {
return this.bodyUsed = !1, this._initBody = function(body) {
if (this._bodyInit = body, body)
if ("string" == typeof body) this._bodyText = body;
else if (support.blob && Blob.prototype.isPrototypeOf(body)) this._bodyBlob = body;
else if (support.formData && FormData.prototype.isPrototypeOf(body)) this._bodyFormData = body;
else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) this._bodyText = body.toString();
else if (support.arrayBuffer && support.blob && isDataView(body)) this._bodyArrayBuffer = bufferClone(body.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer]);
else {
if (!support.arrayBuffer || !ArrayBuffer.prototype.isPrototypeOf(body) && !isArrayBufferView(body)) throw new Error("unsupported BodyInit type");
this._bodyArrayBuffer = bufferClone(body)
} else this._bodyText = "";
this.headers.get("content-type") || ("string" == typeof body ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : support.searchParams && URLSearchParams.prototype.isPrototypeOf(body) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"))
}, support.blob && (this.blob = function() {
var rejected = consumed(this);
if (rejected) return rejected;
if (this._bodyBlob) return Promise.resolve(this._bodyBlob);
if (this._bodyArrayBuffer) return Promise.resolve(new Blob([this._bodyArrayBuffer]));
if (this._bodyFormData) throw new Error("could not read FormData body as blob");
return Promise.resolve(new Blob([this._bodyText]))
}, this.arrayBuffer = function() {
return this._bodyArrayBuffer ? consumed(this) || Promise.resolve(this._bodyArrayBuffer) : this.blob().then(readBlobAsArrayBuffer)
}), this.text = function() {
var rejected = consumed(this);
if (rejected) return rejected;
if (this._bodyBlob) return readBlobAsText(this._bodyBlob);
if (this._bodyArrayBuffer) return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer));
if (this._bodyFormData) throw new Error("could not read FormData body as text");
return Promise.resolve(this._bodyText)
}, support.formData && (this.formData = function() {
return this.text().then(decode)
}), this.json = function() {
return this.text().then(JSON.parse)
}, this
}
function normalizeMethod(method) {
var upcased = method.toUpperCase();
return methods.indexOf(upcased) > -1 ? upcased : method
}
function Request(input, options) {
options = options || {};
var body = options.body;
if ("string" == typeof input) this.url = input;
else {
if (input.bodyUsed) throw new TypeError("Already read");
this.url = input.url, this.credentials = input.credentials, options.headers || (this.headers = new Headers(input.headers)), this.method = input.method, this.mode = input.mode, body || null == input._bodyInit || (body = input._bodyInit, input.bodyUsed = !0)
}
if (this.credentials = options.credentials || this.credentials || "omit", !options.headers && this.headers || (this.headers = new Headers(options.headers)), this.method = normalizeMethod(options.method || this.method || "GET"), this.mode = options.mode || this.mode || null, this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && body) throw new TypeError("Body not allowed for GET or HEAD requests");
this._initBody(body)
}
function decode(body) {
var form = new FormData;
return body.trim().split("&").forEach(function(bytes) {
if (bytes) {
var split = bytes.split("="),
name = split.shift().replace(/\+/g, " "),
value = split.join("=").replace(/\+/g, " ");
form.append(decodeURIComponent(name), decodeURIComponent(value))
}
}), form
}
function parseHeaders(rawHeaders) {
var headers = new Headers;
return rawHeaders.split("\r\n").forEach(function(line) {
var parts = line.split(":"),
key = parts.shift().trim();
if (key) {
var value = parts.join(":").trim();
headers.append(key, value)
}
}), headers
}
function Response(bodyInit, options) {
options || (options = {}), this.type = "default", this.status = "status" in options ? options.status : 200, this.ok = this.status >= 200 && this.status < 300, this.statusText = "statusText" in options ? options.statusText : "OK", this.headers = new Headers(options.headers), this.url = options.url || "", this._initBody(bodyInit)
}
if (!self.fetch) {
var support = {
searchParams: "URLSearchParams" in self,
iterable: "Symbol" in self && "iterator" in Symbol,
blob: "FileReader" in self && "Blob" in self && function() {
try {
return new Blob, !0
} catch (e) {
return !1
}
}(),
formData: "FormData" in self,
arrayBuffer: "ArrayBuffer" in self
};
if (support.arrayBuffer) var viewClasses = ["[object Int8Array]", "[object Uint8Array]", "[object Uint8ClampedArray]", "[object Int16Array]", "[object Uint16Array]", "[object Int32Array]", "[object Uint32Array]", "[object Float32Array]", "[object Float64Array]"],
isDataView = function(obj) {
return obj && DataView.prototype.isPrototypeOf(obj)
},
isArrayBufferView = ArrayBuffer.isView || function(obj) {
return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
};
Headers.prototype.append = function(name, value) {
name = normalizeName(name), value = normalizeValue(value);
var list = this.map[name];
list || (list = [], this.map[name] = list), list.push(value)
}, Headers.prototype.delete = function(name) {
delete this.map[normalizeName(name)]
}, Headers.prototype.get = function(name) {
var values = this.map[normalizeName(name)];
return values ? values[0] : null
}, Headers.prototype.getAll = function(name) {
return this.map[normalizeName(name)] || []
}, Headers.prototype.has = function(name) {
return this.map.hasOwnProperty(normalizeName(name))
}, Headers.prototype.set = function(name, value) {
this.map[normalizeName(name)] = [normalizeValue(value)]
}, Headers.prototype.forEach = function(callback, thisArg) {
Object.getOwnPropertyNames(this.map).forEach(function(name) {
this.map[name].forEach(function(value) {
callback.call(thisArg, value, name, this)
}, this)
}, this)
}, Headers.prototype.keys = function() {
var items = [];
return this.forEach(function(value, name) {
items.push(name)
}), iteratorFor(items)
}, Headers.prototype.values = function() {
var items = [];
return this.forEach(function(value) {
items.push(value)
}), iteratorFor(items)
}, Headers.prototype.entries = function() {
var items = [];
return this.forEach(function(value, name) {
items.push([name, value])
}), iteratorFor(items)
}, support.iterable && (Headers.prototype[Symbol.iterator] = Headers.prototype.entries);
var methods = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
Request.prototype.clone = function() {
return new Request(this, {
body: this._bodyInit
})
}, Body.call(Request.prototype), Body.call(Response.prototype), Response.prototype.clone = function() {
return new Response(this._bodyInit, {
status: this.status,
statusText: this.statusText,
headers: new Headers(this.headers),
url: this.url
})
}, Response.error = function() {
var response = new Response(null, {
status: 0,
statusText: ""
});
return response.type = "error", response
};
var redirectStatuses = [301, 302, 303, 307, 308];
Response.redirect = function(url, status) {
if (-1 === redirectStatuses.indexOf(status)) throw new RangeError("Invalid status code");
return new Response(null, {
status: status,
headers: {
location: url
}
})
}, self.Headers = Headers, self.Request = Request, self.Response = Response, self.fetch = function(input, init) {
return new Promise(function(resolve, reject) {
var request = new Request(input, init),
xhr = new XMLHttpRequest;
xhr.onload = function() {
var options = {
status: xhr.status,
statusText: xhr.statusText,
headers: parseHeaders(xhr.getAllResponseHeaders() || "")
};
options.url = "responseURL" in xhr ? xhr.responseURL : options.headers.get("X-Request-URL");
var body = "response" in xhr ? xhr.response : xhr.responseText;
resolve(new Response(body, options))
}, xhr.onerror = function() {
reject(new TypeError("Network request failed"))
}, xhr.ontimeout = function() {
reject(new TypeError("Network request failed"))
}, xhr.open(request.method, request.url, !0), "include" === request.credentials && (xhr.withCredentials = !0), "responseType" in xhr && support.blob && (xhr.responseType = "blob"), request.headers.forEach(function(value, name) {
xhr.setRequestHeader(name, value)
}), xhr.send(void 0 === request._bodyInit ? null : request._bodyInit)
})
}, self.fetch.polyfill = !0
}
}("undefined" != typeof self ? self : this);

View File

@@ -1,607 +0,0 @@
var requirejs, require, define;
! function(global, setTimeout) {
function commentReplace(match, singlePrefix) {
return singlePrefix || ""
}
function isFunction(it) {
return "[object Function]" === ostring.call(it)
}
function isArray(it) {
return "[object Array]" === ostring.call(it)
}
function each(ary, func) {
if (ary) {
var i;
for (i = 0; i < ary.length && (!ary[i] || !func(ary[i], i, ary)); i += 1);
}
}
function eachReverse(ary, func) {
if (ary) {
var i;
for (i = ary.length - 1; i > -1 && (!ary[i] || !func(ary[i], i, ary)); i -= 1);
}
}
function hasProp(obj, prop) {
return hasOwn.call(obj, prop)
}
function getOwn(obj, prop) {
return hasProp(obj, prop) && obj[prop]
}
function eachProp(obj, func) {
var prop;
for (prop in obj)
if (hasProp(obj, prop) && func(obj[prop], prop)) break
}
function mixin(target, source, force, deepStringMixin) {
return source && eachProp(source, function(value, prop) {
!force && hasProp(target, prop) || (!deepStringMixin || "object" != typeof value || !value || isArray(value) || isFunction(value) || value instanceof RegExp ? target[prop] = value : (target[prop] || (target[prop] = {}), mixin(target[prop], value, force, deepStringMixin)))
}), target
}
function bind(obj, fn) {
return function() {
return fn.apply(obj, arguments)
}
}
function scripts() {
return document.getElementsByTagName("script")
}
function defaultOnError(err) {
throw err
}
function getGlobal(value) {
if (!value) return value;
var g = global;
return each(value.split("."), function(part) {
g = g[part]
}), g
}
function makeError(id, msg, err, requireModules) {
var e = new Error(msg + "\nhttp://requirejs.org/docs/errors.html#" + id);
return e.requireType = id, e.requireModules = requireModules, err && (e.originalError = err), e
}
function newContext(contextName) {
function trimDots(ary) {
var i, part;
for (i = 0; i < ary.length; i++)
if ("." === (part = ary[i])) ary.splice(i, 1), i -= 1;
else if (".." === part) {
if (0 === i || 1 === i && ".." === ary[2] || ".." === ary[i - 1]) continue;
i > 0 && (ary.splice(i - 1, 2), i -= 2)
}
}
function normalize(name, baseName, applyMap) {
var mapValue, nameParts, i, j, nameSegment, lastIndex, foundMap, foundI, foundStarMap, starI, normalizedBaseParts, baseParts = baseName && baseName.split("/"),
map = config.map,
starMap = map && map["*"];
if (name && (name = name.split("/"), lastIndex = name.length - 1, config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex]) && (name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, "")), "." === name[0].charAt(0) && baseParts && (normalizedBaseParts = baseParts.slice(0, baseParts.length - 1), name = normalizedBaseParts.concat(name)), trimDots(name), name = name.join("/")), applyMap && map && (baseParts || starMap)) {
nameParts = name.split("/");
outerLoop: for (i = nameParts.length; i > 0; i -= 1) {
if (nameSegment = nameParts.slice(0, i).join("/"), baseParts)
for (j = baseParts.length; j > 0; j -= 1)
if ((mapValue = getOwn(map, baseParts.slice(0, j).join("/"))) && (mapValue = getOwn(mapValue, nameSegment))) {
foundMap = mapValue, foundI = i;
break outerLoop
}! foundStarMap && starMap && getOwn(starMap, nameSegment) && (foundStarMap = getOwn(starMap, nameSegment), starI = i)
}!foundMap && foundStarMap && (foundMap = foundStarMap, foundI = starI), foundMap && (nameParts.splice(0, foundI, foundMap), name = nameParts.join("/"))
}
return getOwn(config.pkgs, name) || name
}
function removeScript(name) {
isBrowser && each(scripts(), function(scriptNode) {
if (scriptNode.getAttribute("data-requiremodule") === name && scriptNode.getAttribute("data-requirecontext") === context.contextName) return scriptNode.parentNode.removeChild(scriptNode), !0
})
}
function hasPathFallback(id) {
var pathConfig = getOwn(config.paths, id);
if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) return pathConfig.shift(), context.require.undef(id), context.makeRequire(null, {
skipMap: !0
})([id]), !0
}
function splitPrefix(name) {
var prefix, index = name ? name.indexOf("!") : -1;
return index > -1 && (prefix = name.substring(0, index), name = name.substring(index + 1, name.length)), [prefix, name]
}
function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) {
var url, pluginModule, suffix, nameParts, prefix = null,
parentName = parentModuleMap ? parentModuleMap.name : null,
originalName = name,
isDefine = !0,
normalizedName = "";
return name || (isDefine = !1, name = "_@r" + (requireCounter += 1)), nameParts = splitPrefix(name), prefix = nameParts[0], name = nameParts[1], prefix && (prefix = normalize(prefix, parentName, applyMap), pluginModule = getOwn(defined, prefix)), name && (prefix ? normalizedName = isNormalized ? name : pluginModule && pluginModule.normalize ? pluginModule.normalize(name, function(name) {
return normalize(name, parentName, applyMap)
}) : -1 === name.indexOf("!") ? normalize(name, parentName, applyMap) : name : (normalizedName = normalize(name, parentName, applyMap), nameParts = splitPrefix(normalizedName), prefix = nameParts[0], normalizedName = nameParts[1], isNormalized = !0, url = context.nameToUrl(normalizedName))), suffix = !prefix || pluginModule || isNormalized ? "" : "_unnormalized" + (unnormalizedCounter += 1), {
prefix: prefix,
name: normalizedName,
parentMap: parentModuleMap,
unnormalized: !!suffix,
url: url,
originalName: originalName,
isDefine: isDefine,
id: (prefix ? prefix + "!" + normalizedName : normalizedName) + suffix
}
}
function getModule(depMap) {
var id = depMap.id,
mod = getOwn(registry, id);
return mod || (mod = registry[id] = new context.Module(depMap)), mod
}
function on(depMap, name, fn) {
var id = depMap.id,
mod = getOwn(registry, id);
!hasProp(defined, id) || mod && !mod.defineEmitComplete ? (mod = getModule(depMap), mod.error && "error" === name ? fn(mod.error) : mod.on(name, fn)) : "defined" === name && fn(defined[id])
}
function onError(err, errback) {
var ids = err.requireModules,
notified = !1;
errback ? errback(err) : (each(ids, function(id) {
var mod = getOwn(registry, id);
mod && (mod.error = err, mod.events.error && (notified = !0, mod.emit("error", err)))
}), notified || req.onError(err))
}
function takeGlobalQueue() {
globalDefQueue.length && (each(globalDefQueue, function(queueItem) {
var id = queueItem[0];
"string" == typeof id && (context.defQueueMap[id] = !0), defQueue.push(queueItem)
}), globalDefQueue = [])
}
function cleanRegistry(id) {
delete registry[id], delete enabledRegistry[id]
}
function breakCycle(mod, traced, processed) {
var id = mod.map.id;
mod.error ? mod.emit("error", mod.error) : (traced[id] = !0, each(mod.depMaps, function(depMap, i) {
var depId = depMap.id,
dep = getOwn(registry, depId);
!dep || mod.depMatched[i] || processed[depId] || (getOwn(traced, depId) ? (mod.defineDep(i, defined[depId]), mod.check()) : breakCycle(dep, traced, processed))
}), processed[id] = !0)
}
function checkLoaded() {
var err, usingPathFallback, waitInterval = 1e3 * config.waitSeconds,
expired = waitInterval && context.startTime + waitInterval < (new Date).getTime(),
noLoads = [],
reqCalls = [],
stillLoading = !1,
needCycleCheck = !0;
if (!inCheckLoaded) {
if (inCheckLoaded = !0, eachProp(enabledRegistry, function(mod) {
var map = mod.map,
modId = map.id;
if (mod.enabled && (map.isDefine || reqCalls.push(mod), !mod.error))
if (!mod.inited && expired) hasPathFallback(modId) ? (usingPathFallback = !0, stillLoading = !0) : (noLoads.push(modId), removeScript(modId));
else if (!mod.inited && mod.fetched && map.isDefine && (stillLoading = !0, !map.prefix)) return needCycleCheck = !1
}), expired && noLoads.length) return err = makeError("timeout", "Load timeout for modules: " + noLoads, null, noLoads), err.contextName = context.contextName, onError(err);
needCycleCheck && each(reqCalls, function(mod) {
breakCycle(mod, {}, {})
}), expired && !usingPathFallback || !stillLoading || !isBrowser && !isWebWorker || checkLoadedTimeoutId || (checkLoadedTimeoutId = setTimeout(function() {
checkLoadedTimeoutId = 0, checkLoaded()
}, 50)), inCheckLoaded = !1
}
}
function callGetModule(args) {
hasProp(defined, args[0]) || getModule(makeModuleMap(args[0], null, !0)).init(args[1], args[2])
}
function removeListener(node, func, name, ieName) {
node.detachEvent && !isOpera ? ieName && node.detachEvent(ieName, func) : node.removeEventListener(name, func, !1)
}
function getScriptData(evt) {
var node = evt.currentTarget || evt.srcElement;
return removeListener(node, context.onScriptLoad, "load", "onreadystatechange"), removeListener(node, context.onScriptError, "error"), {
node: node,
id: node && node.getAttribute("data-requiremodule")
}
}
function intakeDefines() {
var args;
for (takeGlobalQueue(); defQueue.length;) {
if (args = defQueue.shift(), null === args[0]) return onError(makeError("mismatch", "Mismatched anonymous define() module: " + args[args.length - 1]));
callGetModule(args)
}
context.defQueueMap = {}
}
var inCheckLoaded, Module, context, handlers, checkLoadedTimeoutId, config = {
waitSeconds: 7,
baseUrl: "./",
paths: {},
bundles: {},
pkgs: {},
shim: {},
config: {}
},
registry = {},
enabledRegistry = {},
undefEvents = {},
defQueue = [],
defined = {},
urlFetched = {},
bundlesMap = {},
requireCounter = 1,
unnormalizedCounter = 1;
return handlers = {
require: function(mod) {
return mod.require ? mod.require : mod.require = context.makeRequire(mod.map)
},
exports: function(mod) {
if (mod.usingExports = !0, mod.map.isDefine) return mod.exports ? defined[mod.map.id] = mod.exports : mod.exports = defined[mod.map.id] = {}
},
module: function(mod) {
return mod.module ? mod.module : mod.module = {
id: mod.map.id,
uri: mod.map.url,
config: function() {
return getOwn(config.config, mod.map.id) || {}
},
exports: mod.exports || (mod.exports = {})
}
}
}, Module = function(map) {
this.events = getOwn(undefEvents, map.id) || {}, this.map = map, this.shim = getOwn(config.shim, map.id), this.depExports = [], this.depMaps = [], this.depMatched = [], this.pluginMaps = {}, this.depCount = 0
}, Module.prototype = {
init: function(depMaps, factory, errback, options) {
options = options || {}, this.inited || (this.factory = factory, errback ? this.on("error", errback) : this.events.error && (errback = bind(this, function(err) {
this.emit("error", err)
})), this.depMaps = depMaps && depMaps.slice(0), this.errback = errback, this.inited = !0, this.ignore = options.ignore, options.enabled || this.enabled ? this.enable() : this.check())
},
defineDep: function(i, depExports) {
this.depMatched[i] || (this.depMatched[i] = !0, this.depCount -= 1, this.depExports[i] = depExports)
},
fetch: function() {
if (!this.fetched) {
this.fetched = !0, context.startTime = (new Date).getTime();
var map = this.map;
if (!this.shim) return map.prefix ? this.callPlugin() : this.load();
context.makeRequire(this.map, {
enableBuildCallback: !0
})(this.shim.deps || [], bind(this, function() {
return map.prefix ? this.callPlugin() : this.load()
}))
}
},
load: function() {
var url = this.map.url;
urlFetched[url] || (urlFetched[url] = !0, context.load(this.map.id, url))
},
check: function() {
if (this.enabled && !this.enabling) {
var err, cjsModule, id = this.map.id,
depExports = this.depExports,
exports = this.exports,
factory = this.factory;
if (this.inited) {
if (this.error) this.emit("error", this.error);
else if (!this.defining) {
if (this.defining = !0, this.depCount < 1 && !this.defined) {
if (isFunction(factory)) {
if (this.events.error && this.map.isDefine || req.onError !== defaultOnError) try {
exports = context.execCb(id, factory, depExports, exports)
} catch (e) {
err = e
} else exports = context.execCb(id, factory, depExports, exports);
if (this.map.isDefine && void 0 === exports && (cjsModule = this.module, cjsModule ? exports = cjsModule.exports : this.usingExports && (exports = this.exports)), err) return err.requireMap = this.map, err.requireModules = this.map.isDefine ? [this.map.id] : null, err.requireType = this.map.isDefine ? "define" : "require", onError(this.error = err)
} else exports = factory;
if (this.exports = exports, this.map.isDefine && !this.ignore && (defined[id] = exports, req.onResourceLoad)) {
var resLoadMaps = [];
each(this.depMaps, function(depMap) {
resLoadMaps.push(depMap.normalizedMap || depMap)
}), req.onResourceLoad(context, this.map, resLoadMaps)
}
cleanRegistry(id), this.defined = !0
}
this.defining = !1, this.defined && !this.defineEmitted && (this.defineEmitted = !0, this.emit("defined", this.exports), this.defineEmitComplete = !0)
}
} else hasProp(context.defQueueMap, id) || this.fetch()
}
},
callPlugin: function() {
var map = this.map,
id = map.id,
pluginMap = makeModuleMap(map.prefix);
this.depMaps.push(pluginMap), on(pluginMap, "defined", bind(this, function(plugin) {
var load, normalizedMap, normalizedMod, bundleId = getOwn(bundlesMap, this.map.id),
name = this.map.name,
parentName = this.map.parentMap ? this.map.parentMap.name : null,
localRequire = context.makeRequire(map.parentMap, {
enableBuildCallback: !0
});
return this.map.unnormalized ? (plugin.normalize && (name = plugin.normalize(name, function(name) {
return normalize(name, parentName, !0)
}) || ""), normalizedMap = makeModuleMap(map.prefix + "!" + name, this.map.parentMap, !0), on(normalizedMap, "defined", bind(this, function(value) {
this.map.normalizedMap = normalizedMap, this.init([], function() {
return value
}, null, {
enabled: !0,
ignore: !0
})
})), void((normalizedMod = getOwn(registry, normalizedMap.id)) && (this.depMaps.push(normalizedMap), this.events.error && normalizedMod.on("error", bind(this, function(err) {
this.emit("error", err)
})), normalizedMod.enable()))) : bundleId ? (this.map.url = context.nameToUrl(bundleId), void this.load()) : (load = bind(this, function(value) {
this.init([], function() {
return value
}, null, {
enabled: !0
})
}), load.error = bind(this, function(err) {
this.inited = !0, this.error = err, err.requireModules = [id], eachProp(registry, function(mod) {
0 === mod.map.id.indexOf(id + "_unnormalized") && cleanRegistry(mod.map.id)
}), onError(err)
}), load.fromText = bind(this, function(text, textAlt) {
var moduleName = map.name,
moduleMap = makeModuleMap(moduleName),
hasInteractive = useInteractive;
textAlt && (text = textAlt), hasInteractive && (useInteractive = !1), getModule(moduleMap), hasProp(config.config, id) && (config.config[moduleName] = config.config[id]);
try {
req.exec(text)
} catch (e) {
return onError(makeError("fromtexteval", "fromText eval for " + id + " failed: " + e, e, [id]))
}
hasInteractive && (useInteractive = !0), this.depMaps.push(moduleMap), context.completeLoad(moduleName), localRequire([moduleName], load)
}), void plugin.load(map.name, localRequire, load, config))
})), context.enable(pluginMap, this), this.pluginMaps[pluginMap.id] = pluginMap
},
enable: function() {
enabledRegistry[this.map.id] = this, this.enabled = !0, this.enabling = !0, each(this.depMaps, bind(this, function(depMap, i) {
var id, mod, handler;
if ("string" == typeof depMap) {
if (depMap = makeModuleMap(depMap, this.map.isDefine ? this.map : this.map.parentMap, !1, !this.skipMap), this.depMaps[i] = depMap, handler = getOwn(handlers, depMap.id)) return void(this.depExports[i] = handler(this));
this.depCount += 1, on(depMap, "defined", bind(this, function(depExports) {
this.undefed || (this.defineDep(i, depExports), this.check())
})), this.errback ? on(depMap, "error", bind(this, this.errback)) : this.events.error && on(depMap, "error", bind(this, function(err) {
this.emit("error", err)
}))
}
id = depMap.id, mod = registry[id], hasProp(handlers, id) || !mod || mod.enabled || context.enable(depMap, this)
})), eachProp(this.pluginMaps, bind(this, function(pluginMap) {
var mod = getOwn(registry, pluginMap.id);
mod && !mod.enabled && context.enable(pluginMap, this)
})), this.enabling = !1, this.check()
},
on: function(name, cb) {
var cbs = this.events[name];
cbs || (cbs = this.events[name] = []), cbs.push(cb)
},
emit: function(name, evt) {
each(this.events[name], function(cb) {
cb(evt)
}), "error" === name && delete this.events[name]
}
}, context = {
config: config,
contextName: contextName,
registry: registry,
defined: defined,
urlFetched: urlFetched,
defQueue: defQueue,
defQueueMap: {},
Module: Module,
makeModuleMap: makeModuleMap,
nextTick: req.nextTick,
onError: onError,
configure: function(cfg) {
if (cfg.baseUrl && "/" !== cfg.baseUrl.charAt(cfg.baseUrl.length - 1) && (cfg.baseUrl += "/"), "string" == typeof cfg.urlArgs) {
var urlArgs = cfg.urlArgs;
cfg.urlArgs = function(id, url) {
return (-1 === url.indexOf("?") ? "?" : "&") + urlArgs
}
}
var shim = config.shim,
objs = {
paths: !0,
bundles: !0,
config: !0,
map: !0
};
eachProp(cfg, function(value, prop) {
objs[prop] ? (config[prop] || (config[prop] = {}), mixin(config[prop], value, !0, !0)) : config[prop] = value
}), cfg.bundles && eachProp(cfg.bundles, function(value, prop) {
each(value, function(v) {
v !== prop && (bundlesMap[v] = prop)
})
}), cfg.shim && (eachProp(cfg.shim, function(value, id) {
isArray(value) && (value = {
deps: value
}), !value.exports && !value.init || value.exportsFn || (value.exportsFn = context.makeShimExports(value)), shim[id] = value
}), config.shim = shim), cfg.packages && each(cfg.packages, function(pkgObj) {
var location, name;
pkgObj = "string" == typeof pkgObj ? {
name: pkgObj
} : pkgObj, name = pkgObj.name, location = pkgObj.location, location && (config.paths[name] = pkgObj.location), config.pkgs[name] = pkgObj.name + "/" + (pkgObj.main || "main").replace(currDirRegExp, "").replace(jsSuffixRegExp, "")
}), eachProp(registry, function(mod, id) {
mod.inited || mod.map.unnormalized || (mod.map = makeModuleMap(id, null, !0))
}), (cfg.deps || cfg.callback) && context.require(cfg.deps || [], cfg.callback)
},
makeShimExports: function(value) {
function fn() {
var ret;
return value.init && (ret = value.init.apply(global, arguments)), ret || value.exports && getGlobal(value.exports)
}
return fn
},
makeRequire: function(relMap, options) {
function localRequire(deps, callback, errback) {
var id, map, requireMod;
return options.enableBuildCallback && callback && isFunction(callback) && (callback.__requireJsBuild = !0), "string" == typeof deps ? isFunction(callback) ? onError(makeError("requireargs", "Invalid require call"), errback) : relMap && hasProp(handlers, deps) ? handlers[deps](registry[relMap.id]) : req.get ? req.get(context, deps, relMap, localRequire) : (map = makeModuleMap(deps, relMap, !1, !0), id = map.id, hasProp(defined, id) ? defined[id] : onError(makeError("notloaded", 'Module name "' + id + '" has not been loaded yet for context: ' + contextName + (relMap ? "" : ". Use require([])")))) : (intakeDefines(), context.nextTick(function() {
intakeDefines(), requireMod = getModule(makeModuleMap(null, relMap)), requireMod.skipMap = options.skipMap, requireMod.init(deps, callback, errback, {
enabled: !0
}), checkLoaded()
}), localRequire)
}
return options = options || {}, mixin(localRequire, {
isBrowser: isBrowser,
toUrl: function(moduleNamePlusExt) {
var ext, index = moduleNamePlusExt.lastIndexOf("."),
segment = moduleNamePlusExt.split("/")[0],
isRelative = "." === segment || ".." === segment;
return -1 !== index && (!isRelative || index > 1) && (ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length), moduleNamePlusExt = moduleNamePlusExt.substring(0, index)), context.nameToUrl(normalize(moduleNamePlusExt, relMap && relMap.id, !0), ext, !0)
},
defined: function(id) {
return hasProp(defined, makeModuleMap(id, relMap, !1, !0).id)
},
specified: function(id) {
return id = makeModuleMap(id, relMap, !1, !0).id, hasProp(defined, id) || hasProp(registry, id)
}
}), relMap || (localRequire.undef = function(id) {
takeGlobalQueue();
var map = makeModuleMap(id, relMap, !0),
mod = getOwn(registry, id);
mod.undefed = !0, removeScript(id), delete defined[id], delete urlFetched[map.url], delete undefEvents[id], eachReverse(defQueue, function(args, i) {
args[0] === id && defQueue.splice(i, 1)
}), delete context.defQueueMap[id], mod && (mod.events.defined && (undefEvents[id] = mod.events), cleanRegistry(id))
}), localRequire
},
enable: function(depMap) {
getOwn(registry, depMap.id) && getModule(depMap).enable()
},
completeLoad: function(moduleName) {
var found, args, mod, shim = getOwn(config.shim, moduleName) || {},
shExports = shim.exports;
for (takeGlobalQueue(); defQueue.length;) {
if (args = defQueue.shift(), null === args[0]) {
if (args[0] = moduleName, found) break;
found = !0
} else args[0] === moduleName && (found = !0);
callGetModule(args)
}
if (context.defQueueMap = {}, mod = getOwn(registry, moduleName), !found && !hasProp(defined, moduleName) && mod && !mod.inited) {
if (!(!config.enforceDefine || shExports && getGlobal(shExports))) return hasPathFallback(moduleName) ? void 0 : onError(makeError("nodefine", "No define call for " + moduleName, null, [moduleName]));
callGetModule([moduleName, shim.deps || [], shim.exportsFn])
}
checkLoaded()
},
nameToUrl: function(moduleName, ext, skipExt) {
var paths, syms, i, parentModule, url, parentPath, bundleId, pkgMain = getOwn(config.pkgs, moduleName);
if (pkgMain && (moduleName = pkgMain), bundleId = getOwn(bundlesMap, moduleName)) return context.nameToUrl(bundleId, ext, skipExt);
if (req.jsExtRegExp.test(moduleName)) url = moduleName + (ext || "");
else {
for (paths = config.paths, syms = moduleName.split("/"), i = syms.length; i > 0; i -= 1)
if (parentModule = syms.slice(0, i).join("/"), parentPath = getOwn(paths, parentModule)) {
isArray(parentPath) && (parentPath = parentPath[0]), syms.splice(0, i, parentPath);
break
} url = syms.join("/"), url += ext || (/^data\:|^blob\:|\?/.test(url) || skipExt ? "" : ".js"), url = ("/" === url.charAt(0) || url.match(/^[\w\+\.\-]+:/) ? "" : config.baseUrl) + url
}
return config.urlArgs && !/^blob\:/.test(url) ? url + config.urlArgs(moduleName, url) : url
},
load: function(id, url) {
req.load(context, id, url)
},
execCb: function(name, callback, args, exports) {
return callback.apply(exports, args)
},
onScriptLoad: function(evt) {
if ("load" === evt.type || readyRegExp.test((evt.currentTarget || evt.srcElement).readyState)) {
interactiveScript = null;
var data = getScriptData(evt);
context.completeLoad(data.id)
}
},
onScriptError: function(evt) {
var data = getScriptData(evt);
if (!hasPathFallback(data.id)) {
var parents = [];
return eachProp(registry, function(value, key) {
0 !== key.indexOf("_@r") && each(value.depMaps, function(depMap) {
if (depMap.id === data.id) return parents.push(key), !0
})
}), onError(makeError("scripterror", 'Script error for "' + data.id + (parents.length ? '", needed by: ' + parents.join(", ") : '"'), evt, [data.id]))
}
}
}, context.require = context.makeRequire(), context
}
function getInteractiveScript() {
return interactiveScript && "interactive" === interactiveScript.readyState ? interactiveScript : (eachReverse(scripts(), function(script) {
if ("interactive" === script.readyState) return interactiveScript = script
}), interactiveScript)
}
var req, s, head, baseElement, dataMain, src, interactiveScript, currentlyAddingScript, mainScript, subPath, version = "2.3.5",
commentRegExp = /\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/gm,
cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
jsSuffixRegExp = /\.js$/,
currDirRegExp = /^\.\//,
op = Object.prototype,
ostring = op.toString,
hasOwn = op.hasOwnProperty,
isBrowser = !("undefined" == typeof window || "undefined" == typeof navigator || !window.document),
isWebWorker = !isBrowser && "undefined" != typeof importScripts,
readyRegExp = isBrowser && "PLAYSTATION 3" === navigator.platform ? /^complete$/ : /^(complete|loaded)$/,
defContextName = "_",
isOpera = "undefined" != typeof opera && "[object Opera]" === opera.toString(),
contexts = {},
cfg = {},
globalDefQueue = [],
useInteractive = !1;
if (void 0 === define) {
if (void 0 !== requirejs) {
if (isFunction(requirejs)) return;
cfg = requirejs, requirejs = void 0
}
void 0 === require || isFunction(require) || (cfg = require, require = void 0), req = requirejs = function(deps, callback, errback, optional) {
var context, config, contextName = defContextName;
return isArray(deps) || "string" == typeof deps || (config = deps, isArray(callback) ? (deps = callback, callback = errback, errback = optional) : deps = []), config && config.context && (contextName = config.context), context = getOwn(contexts, contextName), context || (context = contexts[contextName] = req.s.newContext(contextName)), config && context.configure(config), context.require(deps, callback, errback)
}, req.config = function(config) {
return req(config)
}, req.nextTick = void 0 !== setTimeout ? function(fn) {
setTimeout(fn, 4)
} : function(fn) {
fn()
}, require || (require = req), req.version = version, req.jsExtRegExp = /^\/|:|\?|\.js$/, req.isBrowser = isBrowser, s = req.s = {
contexts: contexts,
newContext: newContext
}, req({}), each(["toUrl", "undef", "defined", "specified"], function(prop) {
req[prop] = function() {
var ctx = contexts[defContextName];
return ctx.require[prop].apply(ctx, arguments)
}
}), isBrowser && (head = s.head = document.getElementsByTagName("head")[0], (baseElement = document.getElementsByTagName("base")[0]) && (head = s.head = baseElement.parentNode)), req.onError = defaultOnError, req.createNode = function(config, moduleName, url) {
var node = config.xhtml ? document.createElementNS("http://www.w3.org/1999/xhtml", "html:script") : document.createElement("script");
return node.type = config.scriptType || "text/javascript", node.charset = "utf-8", node.async = !0, node
}, req.load = function(context, moduleName, url) {
var node, config = context && context.config || {};
if (isBrowser) return node = req.createNode(config, moduleName, url), node.setAttribute("data-requirecontext", context.contextName), node.setAttribute("data-requiremodule", moduleName), !node.attachEvent || node.attachEvent.toString && node.attachEvent.toString().indexOf("[native code") < 0 || isOpera ? (node.addEventListener("load", context.onScriptLoad, !1), node.addEventListener("error", context.onScriptError, !1)) : (useInteractive = !0, node.attachEvent("onreadystatechange", context.onScriptLoad)), node.src = url, config.onNodeCreated && config.onNodeCreated(node, config, moduleName, url), currentlyAddingScript = node, baseElement ? head.insertBefore(node, baseElement) : head.appendChild(node), currentlyAddingScript = null, node;
if (isWebWorker) try {
setTimeout(function() {}, 0), importScripts(url), context.completeLoad(moduleName)
} catch (e) {
context.onError(makeError("importscripts", "importScripts failed for " + moduleName + " at " + url, e, [moduleName]))
}
}, isBrowser && !cfg.skipDataMain && eachReverse(scripts(), function(script) {
if (head || (head = script.parentNode), dataMain = script.getAttribute("data-main")) return mainScript = dataMain, cfg.baseUrl || -1 !== mainScript.indexOf("!") || (src = mainScript.split("/"), mainScript = src.pop(), subPath = src.length ? src.join("/") + "/" : "./", cfg.baseUrl = subPath), mainScript = mainScript.replace(jsSuffixRegExp, ""), req.jsExtRegExp.test(mainScript) && (mainScript = dataMain), cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript], !0
}), define = function(name, deps, callback) {
var node, context;
"string" != typeof name && (callback = deps, deps = name, name = null), isArray(deps) || (callback = deps, deps = null), !deps && isFunction(callback) && (deps = [], callback.length && (callback.toString().replace(commentRegExp, commentReplace).replace(cjsRequireRegExp, function(match, dep) {
deps.push(dep)
}), deps = (1 === callback.length ? ["require"] : ["require", "exports", "module"]).concat(deps))), useInteractive && (node = currentlyAddingScript || getInteractiveScript()) && (name || (name = node.getAttribute("data-requiremodule")), context = contexts[node.getAttribute("data-requirecontext")]), context ? (context.defQueue.push([name, deps, callback]), context.defQueueMap[name] = !0) : globalDefQueue.push([name, deps, callback])
}, define.amd = {
jQuery: !0
}, req.exec = function(text) {
return eval(text)
}, req(cfg)
}
}(this, "undefined" == typeof setTimeout ? void 0 : setTimeout);

File diff suppressed because it is too large Load Diff

View File

@@ -4,33 +4,100 @@
// Use define from require.js not webpack's define
var _define = window.define;
// document-register-element
var docRegister = require("document-register-element");
_define("document-register-element", function() {
return docRegister;
});
// fetch
var fetch = require("whatwg-fetch");
_define("fetch", function() {
return fetch
});
// flvjs
var flvjs = require("flv.js/dist/flv").default;
_define("flvjs", function() {
return flvjs;
});
// jstree
var jstree = require("jstree");
require("jstree/dist/themes/default/style.css");
_define("jstree", function() { return jstree; });
_define("jstree", function() {
return jstree;
});
// jquery
var jquery = require("jquery");
_define("jQuery", function() { return jquery; });
_define("jQuery", function() {
return jquery;
});
// hlsjs
var hlsjs = require("hls.js");
_define("hlsjs", function() { return hlsjs; });
_define("hlsjs", function() {
return hlsjs;
});
// howler
var howler = require("howler");
_define("howler", function() { return howler; });
_define("howler", function() {
return howler;
});
// resize-observer-polyfill
var resize = require("resize-observer-polyfill").default;
_define("resize-observer-polyfill", function() {
return resize;
});
// shaka
var shaka = require("shaka-player");
_define("shaka", function() {
return shaka;
});
// swiper
var swiper = require("swiper");
require("swiper/dist/css/swiper.min.css");
_define("swiper", function() { return swiper; });
var swiper = require("swiper/js/swiper");
require("swiper/css/swiper.min.css");
_define("swiper", function() {
return swiper;
});
// sortable
var sortable = require("sortablejs");
_define("sortable", function() { return sortable; });
var sortable = require("sortablejs").default;
_define("sortable", function() {
return sortable;
});
// webcomponents
var webcomponents = require("webcomponents.js/webcomponents-lite");
_define("webcomponents", function() {
return webcomponents
});
// libjass
var libjass = require("libjass");
require("libjass/libjass.css");
_define("libjass", function() { return libjass; });
_define("libjass", function() {
return libjass;
});
// libass-wasm
var libass_wasm = require("libass-wasm");
_define("JavascriptSubtitlesOctopus", function() {
return libass_wasm;
});
// material-icons
var material_icons = require("material-design-icons-iconfont/dist/material-design-icons.css");
_define("material-icons", function() {
return material_icons;
});
var jellyfin_noto = require("jellyfin-noto");
_define("jellyfin-noto", function () {
return jellyfin_noto;
});

View File

@@ -1,19 +1,33 @@
define(["dialogHelper", "datetime", "emby-select", "paper-icon-button-light", "formDialogStyle"], function(dialogHelper, datetime) {
define(["dialogHelper", "datetime", "emby-select", "paper-icon-button-light", "formDialogStyle"], function (dialogHelper, datetime) {
"use strict";
function getDisplayTime(hours) {
var minutes = 0,
pct = hours % 1;
return pct && (minutes = parseInt(60 * pct)), datetime.getDisplayTime(new Date(2e3, 1, 1, hours, minutes, 0, 0))
var minutes = 0;
var pct = hours % 1;
if (pct) {
minutes = parseInt(60 * pct);
}
return datetime.getDisplayTime(new Date(2000, 1, 1, hours, minutes, 0, 0));
}
function populateHours(context) {
for (var html = "", i = 0; i < 24; i++) html += '<option value="' + i + '">' + getDisplayTime(i) + "</option>";
html += '<option value="24">' + getDisplayTime(0) + "</option>", context.querySelector("#selectStart").innerHTML = html, context.querySelector("#selectEnd").innerHTML = html
var html = "";
for (var i = 0; i < 24; i++) {
html += '<option value="' + i + '">' + getDisplayTime(i) + "</option>";
}
html += '<option value="24">' + getDisplayTime(0) + "</option>";
context.querySelector("#selectStart").innerHTML = html;
context.querySelector("#selectEnd").innerHTML = html;
}
function loadSchedule(context, schedule) {
context.querySelector("#selectDay").value = schedule.DayOfWeek || "Sunday", context.querySelector("#selectStart").value = schedule.StartHour || 0, context.querySelector("#selectEnd").value = schedule.EndHour || 0
context.querySelector("#selectDay").value = schedule.DayOfWeek || "Sunday";
context.querySelector("#selectStart").value = schedule.StartHour || 0;
context.querySelector("#selectEnd").value = schedule.EndHour || 0;
}
function submitSchedule(context, options) {
@@ -22,30 +36,54 @@ define(["dialogHelper", "datetime", "emby-select", "paper-icon-button-light", "f
StartHour: context.querySelector("#selectStart").value,
EndHour: context.querySelector("#selectEnd").value
};
if (parseFloat(updatedSchedule.StartHour) >= parseFloat(updatedSchedule.EndHour)) return void alert(Globalize.translate("ErrorMessageStartHourGreaterThanEnd"));
context.submitted = !0, options.schedule = Object.assign(options.schedule, updatedSchedule), dialogHelper.close(context)
if (parseFloat(updatedSchedule.StartHour) >= parseFloat(updatedSchedule.EndHour)) {
return void alert(Globalize.translate("ErrorMessageStartHourGreaterThanEnd"));
}
context.submitted = true;
options.schedule = Object.assign(options.schedule, updatedSchedule);
dialogHelper.close(context);
}
return {
show: function(options) {
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest;
xhr.open("GET", "components/accessschedule/accessschedule.template.html", !0), xhr.onload = function(e) {
var template = this.response,
dlg = dialogHelper.createDialog({
removeOnClose: !0,
size: "small"
});
show: function (options) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open("GET", "components/accessschedule/accessschedule.template.html", true);
xhr.onload = function (e) {
var template = this.response;
var dlg = dialogHelper.createDialog({
removeOnClose: true,
size: "small"
});
dlg.classList.add("formDialog");
var html = "";
html += Globalize.translateDocument(template), dlg.innerHTML = html, populateHours(dlg), loadSchedule(dlg, options.schedule), dialogHelper.open(dlg), dlg.addEventListener("close", function() {
dlg.submitted ? resolve(options.schedule) : reject()
}), dlg.querySelector(".btnCancel").addEventListener("click", function(e) {
dialogHelper.close(dlg)
}), dlg.querySelector("form").addEventListener("submit", function(e) {
return submitSchedule(dlg, options), e.preventDefault(), !1
})
}, xhr.send()
})
html += Globalize.translateDocument(template);
dlg.innerHTML = html;
populateHours(dlg);
loadSchedule(dlg, options.schedule);
dialogHelper.open(dlg);
dlg.addEventListener("close", function () {
if (dlg.submitted) {
resolve(options.schedule);
} else {
reject();
}
});
dlg.querySelector(".btnCancel").addEventListener("click", function (e) {
dialogHelper.close(dlg);
});
dlg.querySelector("form").addEventListener("submit", function (e) {
submitSchedule(dlg, options);
e.preventDefault();
return false;
});
};
xhr.send();
});
}
}
});
};
});

View File

@@ -1,5 +1,7 @@
<div class="formDialogHeader">
<button is="paper-icon-button-light" class="btnCancel autoSize" tabindex="-1"><i class="md-icon">&#xE5C4;</i></button>
<button is="paper-icon-button-light" class="btnCancel autoSize" tabindex="-1">
<i class="material-icons arrow_back"></i>
</button>
<h3 class="formDialogHeaderTitle">
${HeaderAccessSchedule}
</h3>
@@ -36,4 +38,4 @@
</div>
</form>
</div>
</div>
</div>

View File

@@ -4,7 +4,7 @@
padding: 0;
border: none;
max-height: 84%;
border-radius: .1em !important;
border-radius: 0.1em !important;
}
.actionsheet-not-fullscreen {
@@ -24,7 +24,7 @@
.actionSheetContent {
margin: 0 !important;
padding: .4em 0 !important;
padding: 0.4em 0 !important;
flex-direction: column;
display: flex;
justify-content: center;
@@ -37,14 +37,15 @@
box-shadow: none;
flex-shrink: 0;
border-radius: 0;
margin: 0;
}
.actionSheetMenuItem:focus {
transform: none !important;
}
.actionSheetMenuItem:focus {
transform: none !important;
}
.actionsheetListItemBody {
padding: .4em 1em .4em .6em !important;
padding: 0.4em 1em 0.4em 0.6em !important;
}
.actionSheetItemText {
@@ -58,13 +59,13 @@
}
.actionSheetItemAsideText {
opacity: .7;
opacity: 0.7;
font-size: 90%;
display: flex;
justify-content: flex-end;
flex-shrink: 0;
margin-left: 5em;
margin-right: .5em;
margin-right: 0.5em;
}
.actionSheetScroller {
@@ -82,14 +83,14 @@
}
.actionsheetDivider {
height: .07em;
margin: .25em 0;
height: 0.07em;
margin: 0.25em 0;
flex-shrink: 0;
}
.actionSheetTitle {
margin: .6em 0 .7em !important;
padding: 0 .9em;
margin: 0.6em 0 0.7em !important;
padding: 0 0.9em;
flex-grow: 0;
}
@@ -99,16 +100,16 @@
}
.actionsheetMenuItemIcon {
margin: 0 .85em 0 .45em !important;
margin: 0 0.85em 0 0.45em !important;
padding: 0 !important;
}
.actionsheet-xlargeFont {
font-size: 112%!important;
font-size: 112% !important;
}
.btnCloseActionSheet {
position: fixed;
top: .75em;
left: .5em;
top: 0.75em;
left: 0.5em;
}

View File

@@ -139,7 +139,9 @@ define(['dialogHelper', 'layoutManager', 'globalize', 'browser', 'dom', 'emby-bu
style += "min-width:" + minWidth + "px;";
}
var i, length, option;
var i;
var length;
var option;
var renderIcon = false;
var icons = [];
var itemIcon;
@@ -156,7 +158,7 @@ define(['dialogHelper', 'layoutManager', 'globalize', 'browser', 'dom', 'emby-bu
}
if (layoutManager.tv) {
html += '<button is="paper-icon-button-light" class="btnCloseActionSheet hide-mouse-idle-tv" tabindex="-1"><i class="md-icon">&#xE5C4;</i></button>';
html += '<button is="paper-icon-button-light" class="btnCloseActionSheet hide-mouse-idle-tv" tabindex="-1"><i class="material-icons arrow_back"></i></button>';
}
// If any items have an icon, give them all an icon just to make sure they're all lined up evenly
@@ -224,10 +226,9 @@ define(['dialogHelper', 'layoutManager', 'globalize', 'browser', 'dom', 'emby-bu
if (itemIcon) {
html += '<i class="actionsheetMenuItemIcon listItemIcon listItemIcon-transparent md-icon">' + itemIcon + '</i>';
}
else if (renderIcon && !center) {
html += '<i class="actionsheetMenuItemIcon listItemIcon listItemIcon-transparent md-icon" style="visibility:hidden;">check</i>';
html += '<i class="actionsheetMenuItemIcon listItemIcon listItemIcon-transparent material-icons">' + itemIcon + '</i>';
} else if (renderIcon && !center) {
html += '<i class="actionsheetMenuItemIcon listItemIcon listItemIcon-transparent material-icons" style="visibility:hidden;">check</i>';
}
html += '<div class="listItemBody actionsheetListItemBody">';
@@ -356,4 +357,4 @@ define(['dialogHelper', 'layoutManager', 'globalize', 'browser', 'dom', 'emby-bu
return {
show: show
};
});
});

View File

@@ -1,3 +0,0 @@
{
"main": "actionsheet.js"
}

View File

@@ -1,96 +1,157 @@
define(["events", "globalize", "dom", "datetime", "userSettings", "serverNotifications", "connectionManager", "emby-button", "listViewStyle"], function(events, globalize, dom, datetime, userSettings, serverNotifications, connectionManager) {
define(["events", "globalize", "dom", "datetime", "userSettings", "serverNotifications", "connectionManager", "emby-button", "listViewStyle"], function (events, globalize, dom, datetime, userSettings, serverNotifications, connectionManager) {
"use strict";
function getEntryHtml(entry, apiClient) {
var html = "";
html += '<div class="listItem listItem-border">';
var color = "#00a4dc";
var icon = "notifications";
var icon = "notifications";
if ("Error" == entry.Severity || "Fatal" == entry.Severity || "Warn" == entry.Severity) {
color = "#cc0000";
icon = "notification_important";
}
if (entry.UserId && entry.UserPrimaryImageTag) {
html += '<i class="listItemIcon md-icon" style="width:2em!important;height:2em!important;padding:0;color:transparent;background-color:' + color + ";background-image:url('" + apiClient.getUserImageUrl(entry.UserId, {
html += '<i class="listItemIcon material-icons" style="width:2em!important;height:2em!important;padding:0;color:transparent;background-color:' + color + ";background-image:url('" + apiClient.getUserImageUrl(entry.UserId, {
type: "Primary",
tag: entry.UserPrimaryImageTag,
height: 40
tag: entry.UserPrimaryImageTag
}) + "');background-repeat:no-repeat;background-position:center center;background-size: cover;\">dvr</i>"
} else {
html += '<i class="listItemIcon md-icon" style="background-color:' + color + '">' + icon + '</i>';
html += '<i class="listItemIcon material-icons" style="background-color:' + color + '">' + icon + '</i>';
}
html += '<div class="listItemBody three-line">', html += '<div class="listItemBodyText">', html += entry.Name, html += "</div>", html += '<div class="listItemBodyText secondary">';
var date = datetime.parseISO8601Date(entry.Date, !0);
return html += datetime.toLocaleString(date).toLowerCase(), html += "</div>", html += '<div class="listItemBodyText secondary listItemBodyText-nowrap">', html += entry.ShortOverview || "", html += "</div>", html += "</div>", entry.Overview && (html += '<button type="button" is="paper-icon-button-light" class="btnEntryInfo" data-id="' + entry.Id + '" title="' + globalize.translate("Info") + '"><i class="md-icon">info</i></button>'), html += "</div>"
html += '<div class="listItemBody three-line">';
html += '<div class="listItemBodyText">';
html += entry.Name;
html += "</div>";
html += '<div class="listItemBodyText secondary">';
var date = datetime.parseISO8601Date(entry.Date, true);
html += datetime.toLocaleString(date).toLowerCase();
html += "</div>";
html += '<div class="listItemBodyText secondary listItemBodyText-nowrap">';
html += entry.ShortOverview || "";
html += "</div>";
html += "</div>";
if (entry.Overview) {
html += '<button type="button" is="paper-icon-button-light" class="btnEntryInfo" data-id="' + entry.Id + '" title="' + globalize.translate("Info") + '"><i class="material-icons">info</i></button>';
}
return html += "</div>";
}
function renderList(elem, apiClient, result, startIndex, limit) {
elem.innerHTML = result.Items.map(function(i) {
return getEntryHtml(i, apiClient)
}).join("")
elem.innerHTML = result.Items.map(function (i) {
return getEntryHtml(i, apiClient);
}).join("");
}
function reloadData(instance, elem, apiClient, startIndex, limit) {
null == startIndex && (startIndex = parseInt(elem.getAttribute("data-activitystartindex") || "0")), limit = limit || parseInt(elem.getAttribute("data-activitylimit") || "7");
var minDate = new Date,
hasUserId = "false" !== elem.getAttribute("data-useractivity");
hasUserId ? minDate.setTime(minDate.getTime() - 864e5) : minDate.setTime(minDate.getTime() - 6048e5), ApiClient.getJSON(ApiClient.getUrl("System/ActivityLog/Entries", {
if (null == startIndex) {
startIndex = parseInt(elem.getAttribute("data-activitystartindex") || "0");
}
limit = limit || parseInt(elem.getAttribute("data-activitylimit") || "7");
var minDate = new Date();
var hasUserId = "false" !== elem.getAttribute("data-useractivity");
if (hasUserId) {
minDate.setTime(minDate.getTime() - 24 * 60 * 60 * 1000); // one day back
} else {
minDate.setTime(minDate.getTime() - 7 * 24 * 60 * 60 * 1000); // one week back
}
ApiClient.getJSON(ApiClient.getUrl("System/ActivityLog/Entries", {
startIndex: startIndex,
limit: limit,
minDate: minDate.toISOString(),
hasUserId: hasUserId
})).then(function(result) {
if (elem.setAttribute("data-activitystartindex", startIndex), elem.setAttribute("data-activitylimit", limit), !startIndex) {
})).then(function (result) {
elem.setAttribute("data-activitystartindex", startIndex);
elem.setAttribute("data-activitylimit", limit);
if (!startIndex) {
var activityContainer = dom.parentWithClass(elem, "activityContainer");
activityContainer && (result.Items.length ? activityContainer.classList.remove("hide") : activityContainer.classList.add("hide"))
if (activityContainer) {
if (result.Items.length) {
activityContainer.classList.remove("hide");
} else {
activityContainer.classList.add("hide");
}
}
}
instance.items = result.Items, renderList(elem, apiClient, result, startIndex, limit)
})
instance.items = result.Items;
renderList(elem, apiClient, result, startIndex, limit);
});
}
function onActivityLogUpdate(e, apiClient, data) {
var options = this.options;
options && options.serverId === apiClient.serverId() && reloadData(this, options.element, apiClient)
if (options && options.serverId === apiClient.serverId()) {
reloadData(this, options.element, apiClient);
}
}
function onListClick(e) {
var btnEntryInfo = dom.parentWithClass(e.target, "btnEntryInfo");
if (btnEntryInfo) {
var id = btnEntryInfo.getAttribute("data-id"),
items = this.items;
var id = btnEntryInfo.getAttribute("data-id");
var items = this.items;
if (items) {
var item = items.filter(function(i) {
return i.Id.toString() === id
var item = items.filter(function (i) {
return i.Id.toString() === id;
})[0];
item && showItemOverview(item)
if (item) {
showItemOverview(item);
}
}
}
}
function showItemOverview(item) {
require(["alert"], function(alert) {
require(["alert"], function (alert) {
alert({
text: item.Overview
})
})
});
});
}
function ActivityLog(options) {
this.options = options;
var element = options.element;
element.classList.add("activityLogListWidget"), element.addEventListener("click", onListClick.bind(this));
element.classList.add("activityLogListWidget");
element.addEventListener("click", onListClick.bind(this));
var apiClient = connectionManager.getApiClient(options.serverId);
reloadData(this, element, apiClient);
var onUpdate = onActivityLogUpdate.bind(this);
this.updateFn = onUpdate, events.on(serverNotifications, "ActivityLogEntry", onUpdate), apiClient.sendMessage("ActivityLogEntryStart", "0,1500")
this.updateFn = onUpdate;
events.on(serverNotifications, "ActivityLogEntry", onUpdate);
apiClient.sendMessage("ActivityLogEntryStart", "0,1500");
}
return ActivityLog.prototype.destroy = function() {
ActivityLog.prototype.destroy = function () {
var options = this.options;
if (options) {
options.element.classList.remove("activityLogListWidget");
connectionManager.getApiClient(options.serverId).sendMessage("ActivityLogEntryStop", "0,1500")
connectionManager.getApiClient(options.serverId).sendMessage("ActivityLogEntryStop", "0,1500");
}
var onUpdate = this.updateFn;
onUpdate && events.off(serverNotifications, "ActivityLogEntry", onUpdate), this.items = null, this.options = null
}, ActivityLog
if (onUpdate) {
events.off(serverNotifications, "ActivityLogEntry", onUpdate);
}
this.items = null;
this.options = null;
};
return ActivityLog;
});

View File

@@ -35,11 +35,11 @@ define(['browser', 'dialog', 'globalize'], function (browser, dialog, globalize)
if (result === 'ok') {
return Promise.resolve();
}
return Promise.reject();
});
}
return Promise.resolve();
};
});
});

View File

@@ -10,7 +10,7 @@ define(['dom', 'focusManager'], function (dom, focusManager) {
if (e.ctrlKey) {
return;
}
if (!!e.shiftKey) {
if (e.shiftKey) {
return;
}
if (e.altKey) {
@@ -127,4 +127,4 @@ define(['dom', 'focusManager'], function (dom, focusManager) {
};
return AlphaNumericShortcuts;
});
});

View File

@@ -50,9 +50,7 @@ define(['focusManager', 'layoutManager', 'dom', 'css!./style.css', 'paper-icon-b
var vertical = element.classList.contains('alphaPicker-vertical');
if (vertical) {
} else {
if (!vertical) {
element.classList.add('focuscontainer-x');
}
@@ -69,8 +67,7 @@ define(['focusManager', 'layoutManager', 'dom', 'css!./style.css', 'paper-icon-b
html += '<div class="' + rowClassName + '">';
if (options.mode === 'keyboard') {
// space_bar icon
html += '<button data-value=" " is="paper-icon-button-light" class="' + alphaPickerButtonClassName + '"><i class="md-icon alphaPickerButtonIcon">&#xE256;</i></button>';
html += '<button data-value=" " is="paper-icon-button-light" class="' + alphaPickerButtonClassName + '"><i class="material-icons alphaPickerButtonIcon space_bar"></i></button>';
} else {
letters = ['#'];
html += mapLetters(letters, vertical).join('');
@@ -80,8 +77,7 @@ define(['focusManager', 'layoutManager', 'dom', 'css!./style.css', 'paper-icon-b
html += mapLetters(letters, vertical).join('');
if (options.mode === 'keyboard') {
// backspace icon
html += '<button data-value="backspace" is="paper-icon-button-light" class="' + alphaPickerButtonClassName + '"><i class="md-icon alphaPickerButtonIcon">&#xE14A;</i></button>';
html += '<button data-value="backspace" is="paper-icon-button-light" class="' + alphaPickerButtonClassName + '"><i class="material-icons alphaPickerButtonIcon">backspace</i></button>';
html += '</div>';
letters = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
@@ -230,7 +226,8 @@ define(['focusManager', 'layoutManager', 'dom', 'css!./style.css', 'paper-icon-b
AlphaPicker.prototype.value = function (value, applyValue) {
var element = this.options.element;
var btn, selected;
var btn;
var selected;
if (value !== undefined) {
if (value != null) {
@@ -244,7 +241,7 @@ define(['focusManager', 'layoutManager', 'dom', 'css!./style.css', 'paper-icon-b
try {
btn = element.querySelector('.alphaPickerButton[data-value=\'' + value + '\']');
} catch (err) {
console.log('Error in querySelector: ' + err);
console.error('error in querySelector: ' + err);
}
if (btn && btn !== selected) {
@@ -321,4 +318,4 @@ define(['focusManager', 'layoutManager', 'dom', 'css!./style.css', 'paper-icon-b
};
return AlphaPicker;
});
});

View File

@@ -35,16 +35,15 @@
font-size: inherit;
min-width: initial;
margin: 0;
padding: .1em .4em;
padding: 0.1em 0.4em;
width: auto;
border-radius: .1em;
border-radius: 0.1em;
font-weight: normal;
flex-shrink: 0;
flex-grow: 1;
}
@media all and (max-height: 50em) {
.alphaPicker-fixed {
bottom: 5em;
}
@@ -56,14 +55,12 @@
}
@media all and (max-height: 49em) {
.alphaPicker-vertical {
font-size: 94%;
}
}
@media all and (max-height: 44em) {
.alphaPicker-vertical {
font-size: 90%;
}
@@ -75,14 +72,12 @@
}
@media all and (max-height: 37em) {
.alphaPicker-vertical {
font-size: 82%;
}
}
@media all and (max-height: 32em) {
.alphaPicker-vertical {
font-size: 74%;
}
@@ -112,27 +107,17 @@
bottom: 1%;
}
.alphaPicker-fixed-left {
left: .4em;
}
.alphaPicker-fixed-right {
right: .4em;
right: 0.4em;
}
@media all and (min-width: 62.5em) {
.alphaPicker-fixed-left {
left: 1em;
}
.alphaPicker-fixed-right {
right: 1em;
}
}
@media all and (max-height: 31.25em) {
.alphaPicker-fixed {
display: none !important;
}

View File

@@ -14,6 +14,9 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
},
showSettings: function () {
show('/settings/settings.html');
},
showNowPlaying: function () {
show("/nowplaying.html");
}
};
@@ -387,13 +390,13 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
var apiClient = connectionManager.currentApiClient();
var pathname = ctx.pathname.toLowerCase();
console.log('appRouter - processing path request ' + pathname);
console.debug('appRouter - processing path request ' + pathname);
var isCurrentRouteStartup = currentRouteInfo ? currentRouteInfo.route.startup : true;
var shouldExitApp = ctx.isBack && route.isDefaultRoute && isCurrentRouteStartup;
if (!shouldExitApp && (!apiClient || !apiClient.isLoggedIn()) && !route.anonymous) {
console.log('appRouter - route does not allow anonymous access, redirecting to login');
console.debug('appRouter - route does not allow anonymous access, redirecting to login');
beginConnectionWizard();
return;
}
@@ -408,10 +411,10 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
if (apiClient && apiClient.isLoggedIn()) {
console.log('appRouter - user is authenticated');
console.debug('appRouter - user is authenticated');
if (route.isDefaultRoute) {
console.log('appRouter - loading skin home page');
console.debug('appRouter - loading skin home page');
loadUserSkinWithOptions(ctx);
return;
} else if (route.roles) {
@@ -425,18 +428,13 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
}
}
console.log('appRouter - proceeding to ' + pathname);
console.debug('appRouter - proceeding to ' + pathname);
callback();
}
function loadUserSkinWithOptions(ctx) {
require(['queryString'], function (queryString) {
//var url = options.url;
//var index = url.indexOf('?');
var params = queryString.parse(ctx.querystring);
skinManager.loadUserSkin({
start: params.start
});
@@ -444,16 +442,13 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
}
function validateRoles(apiClient, roles) {
return Promise.all(roles.split(',').map(function (role) {
return validateRole(apiClient, role);
}));
}
function validateRole(apiClient, role) {
if (role === 'admin') {
return apiClient.getCurrentUser().then(function (user) {
if (user.Policy.IsAdministrator) {
return Promise.resolve();
@@ -480,7 +475,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
route: route,
path: ctx.path
};
//next();
ctx.handled = true;
}
@@ -503,7 +497,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
}
function endsWith(str, srch) {
return str.lastIndexOf(srch) === srch.length - 1;
}
@@ -513,6 +506,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
if (endsWith(baseRoute, '/') && !endsWith(baseRoute, '://')) {
baseRoute = baseRoute.substring(0, baseRoute.length - 1);
}
function baseUrl() {
return baseRoute;
}
@@ -551,19 +545,21 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
}
function back() {
page.back();
}
/**
* Pages of "no return" (when "Go back" should behave differently, probably quitting the application).
*/
var startPages = ['home', 'login', 'selectserver'];
function canGoBack() {
var curr = current();
if (!curr) {
return false;
}
if (curr.type === 'home') {
if (!document.querySelector('.dialogContainer') && startPages.indexOf(curr.type) !== -1) {
return false;
}
return page.canGoBack();
@@ -576,7 +572,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
}
function show(path, options) {
if (path.indexOf('/') !== 0 && path.indexOf('://') === -1) {
path = '/' + path;
}
@@ -585,7 +580,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
path = path.replace(baseRoute, '');
if (currentRouteInfo && currentRouteInfo.path === path) {
// can't use this with home right now due to the back menu
if (currentRouteInfo.route.type !== 'home') {
loading.hide();
@@ -594,7 +588,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
}
return new Promise(function (resolve, reject) {
resolveOnNextShow = resolve;
page.show(path, options);
});
@@ -615,14 +608,12 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
}
function showItem(item, serverId, options) {
if (typeof (item) === 'string') {
var apiClient = serverId ? connectionManager.getApiClient(serverId) : connectionManager.currentApiClient();
apiClient.getItem(apiClient.getCurrentUserId(), item).then(function (item) {
appRouter.showItem(item, options);
});
} else {
if (arguments.length === 2) {
options = arguments[1];
}
@@ -637,7 +628,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
var allRoutes = [];
function addRoute(path, newRoute) {
page(path, getHandler(newRoute));
allRoutes.push(newRoute);
}
@@ -649,7 +639,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
var backdropContainer;
var backgroundContainer;
function setTransparency(level) {
if (!backdropContainer) {
backdropContainer = document.querySelector('.backdropContainer');
}
@@ -662,8 +651,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
document.documentElement.classList.add('transparentDocument');
backgroundContainer.classList.add('backgroundContainer-transparent');
backdropContainer.classList.add('hide');
}
else if (level === 'backdrop' || level === 1) {
} else if (level === 'backdrop' || level === 1) {
backdrop.externalBackdrop(true);
document.documentElement.classList.add('transparentDocument');
backgroundContainer.classList.add('backgroundContainer-transparent');
@@ -677,9 +665,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
}
function pushState(state, title, url) {
state.navigate = false;
page.pushState(state, title, url);
}
@@ -689,41 +675,25 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
baseRoute = baseRoute.substring(0, baseRoute.length - 1);
}
console.log('Setting page base to ' + baseRoute);
console.debug('setting page base to ' + baseRoute);
page.base(baseRoute);
}
setBaseRoute();
function syncNow() {
require(['localsync'], function (localSync) {
localSync.sync();
});
}
function invokeShortcut(id) {
if (id.indexOf('library-') === 0) {
id = id.replace('library-', '');
id = id.split('_');
appRouter.showItem(id[0], id[1]);
} else if (id.indexOf('item-') === 0) {
id = id.replace('item-', '');
id = id.split('_');
appRouter.showItem(id[0], id[1]);
} else {
id = id.split('_');
appRouter.show(appRouter.getRouteUrl(id[0], {
serverId: id[1]
}));
@@ -740,6 +710,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
appRouter.canGoBack = canGoBack;
appRouter.current = current;
appRouter.beginConnectionWizard = beginConnectionWizard;
appRouter.invokeShortcut = invokeShortcut;
appRouter.showItem = showItem;
appRouter.setTransparency = setTransparency;
appRouter.getRoutes = getRoutes;
@@ -751,7 +722,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
Backdrop: 1,
Full: 2
};
appRouter.invokeShortcut = invokeShortcut;
return appRouter;
});

View File

@@ -2,12 +2,12 @@
position: fixed;
left: 0;
right: 0;
z-index: 1;
z-index: 10;
bottom: 0;
transition: transform 180ms linear;
contain: layout style;
}
.appfooter.headroom--unpinned {
transform: translateY(100%)!important;
}
.appfooter.headroom--unpinned {
transform: translateY(100%) !important;
}

View File

@@ -2,24 +2,18 @@ define(['browser', 'css!./appfooter'], function (browser) {
'use strict';
function render(options) {
var elem = document.createElement('div');
elem.classList.add('appfooter');
elem.classList.add('appfooter-blurred');
document.body.appendChild(elem);
return elem;
}
function appFooter(options) {
var self = this;
self.element = render(options);
self.add = function (elem) {
self.element.appendChild(elem);
};

View File

@@ -104,7 +104,7 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
function getDeviceName() {
var deviceName;
deviceName = browser.tizen ? "Samsung Smart TV" : browser.web0s ? "LG Smart TV" : browser.operaTv ? "Opera TV" : browser.xboxOne ? "Xbox One" : browser.ps4 ? "Sony PS4" : browser.chrome ? "Chrome" : browser.edge ? "Edge" : browser.firefox ? "Firefox" : browser.msie ? "Internet Explorer" : browser.opera ? "Opera" : "Web Browser";
deviceName = browser.tizen ? "Samsung Smart TV" : browser.web0s ? "LG Smart TV" : browser.operaTv ? "Opera TV" : browser.xboxOne ? "Xbox One" : browser.ps4 ? "Sony PS4" : browser.chrome ? "Chrome" : browser.edge ? "Edge" : browser.firefox ? "Firefox" : browser.msie ? "Internet Explorer" : browser.opera ? "Opera" : browser.safari ? "Safari" : "Web Browser";
if (browser.ipad) {
deviceName += " iPad";
@@ -168,23 +168,25 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
return false;
}
var savedResult = appSettings.get(htmlMediaAutoplayAppStorageKey);
return "true" === savedResult || "false" !== savedResult && null;
return true;
}
function cueSupported() {
function supportsCue() {
try {
var video = document.createElement("video");
var style = document.createElement("style");
style.textContent = "video::cue {background: inherit}";
document.body.appendChild(style);
document.body.appendChild(video);
var cue = window.getComputedStyle(video, "::cue").background;
document.body.removeChild(style);
document.body.removeChild(video);
return !!cue.length;
} catch (err) {
console.log("Error detecting cue support:" + err);
console.error("error detecting cue support: " + err);
return false;
}
}
@@ -192,7 +194,7 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
function onAppVisible() {
if (isHidden) {
isHidden = false;
console.log("triggering app resume event");
console.debug("triggering app resume event");
events.trigger(appHost, "resume");
}
}
@@ -200,12 +202,10 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
function onAppHidden() {
if (!isHidden) {
isHidden = true;
console.log("app is hidden");
console.debug("app is hidden");
}
}
var htmlMediaAutoplayAppStorageKey = "supportshtmlmediaautoplay0";
var supportedFeatures = function () {
var features = [];
@@ -278,8 +278,9 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
features.push("targetblank");
// allows users to connect to more than one server
//features.push("multiserver");
features.push("screensaver");
if (!browser.orsay && !browser.tizen && !browser.msie && (browser.firefox || browser.ps4 || browser.edge || cueSupported())) {
if (!browser.orsay && !browser.tizen && !browser.msie && (browser.firefox || browser.ps4 || browser.edge || supportsCue())) {
features.push("subtitleappearancesettings");
}
@@ -298,14 +299,48 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
return features;
}();
if (supportedFeatures.indexOf("htmlvideoautoplay") === -1 && supportsHtmlMediaAutoplay() !== false) {
require(["autoPlayDetect"], function (autoPlayDetect) {
autoPlayDetect.supportsHtmlMediaAutoplay().then(function () {
appSettings.set(htmlMediaAutoplayAppStorageKey, "true");
supportedFeatures.push("htmlvideoautoplay");
supportedFeatures.push("htmlaudioautoplay");
}, function () {
appSettings.set(htmlMediaAutoplayAppStorageKey, "false");
/**
* Do exit according to platform
*/
function doExit() {
try {
if (window.NativeShell) {
window.NativeShell.AppHost.exit();
} else if (browser.tizen) {
tizen.application.getCurrentApplication().exit();
} else if (browser.web0s) {
webOS.platformBack();
} else {
window.close();
}
} catch (err) {
console.error("error closing application: " + err);
}
}
var exitPromise;
/**
* Ask user for exit
*/
function askForExit() {
if (exitPromise) {
return;
}
require(["actionsheet"], function (actionsheet) {
exitPromise = actionsheet.show({
title: Globalize.translate("MessageConfirmAppExit"),
items: [
{id: "yes", name: Globalize.translate("Yes")},
{id: "no", name: Globalize.translate("No")}
]
}).then(function (value) {
if (value === "yes") {
doExit();
}
}).finally(function () {
exitPromise = null;
});
});
}
@@ -313,7 +348,7 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
var deviceId;
var deviceName;
var appName = "Jellyfin Web";
var appVersion = "10.4.0";
var appVersion = "10.5.5";
var visibilityChange;
var visibilityState;
@@ -325,16 +360,10 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
alert("setWindowState is not supported and should not be called");
},
exit: function () {
if (window.NativeShell) {
window.NativeShell.AppHost.exit();
} else if (browser.tizen) {
try {
tizen.application.getCurrentApplication().exit();
} catch (err) {
console.log("error closing application: " + err);
}
if (!!window.appMode && browser.tizen) {
askForExit();
} else {
window.close();
doExit();
}
},
supports: function (command) {
@@ -345,7 +374,7 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
return -1 !== supportedFeatures.indexOf(command.toLowerCase());
},
preferVisualCards: browser.android || browser.chrome,
moreIcon: browser.android ? "dots-vert" : "dots-horiz",
moreIcon: browser.android ? "more_vert" : "more_horiz",
getSyncProfile: getSyncProfile,
getDefaultLayout: function () {
if (window.NativeShell) {
@@ -394,7 +423,9 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
}
}
};
var doc = self.document;
var isHidden = false;
if (doc) {
if (void 0 !== doc.visibilityState) {
@@ -418,8 +449,6 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
}
}
var isHidden = false;
if (doc) {
doc.addEventListener(visibilityChange, function () {
if (document[visibilityState]) {

View File

@@ -0,0 +1,101 @@
define(["focusManager", "layoutManager"], function (focusManager, layoutManager) {
"use strict";
/**
* Previously selected element.
*/
var activeElement;
/**
* Returns true if AutoFocuser is enabled.
*/
function isEnabled() {
return layoutManager.tv;
}
/**
* Start AutoFocuser
*/
function enable() {
if (!isEnabled()) {
return;
}
window.addEventListener("focusin", function (e) {
activeElement = e.target;
});
console.debug("AutoFocuser enabled");
}
/**
* Create an array from some source.
*/
var arrayFrom = Array.prototype.from || function (src) {
return Array.prototype.slice.call(src);
}
/**
* Set focus on a suitable element, taking into account the previously selected.
*/
function autoFocus(container) {
if (!isEnabled()) {
return;
}
container = container || document.body;
var candidates = [];
if (activeElement) {
// These elements are recreated
if (activeElement.classList.contains("btnPreviousPage")) {
candidates.push(container.querySelector(".btnPreviousPage"));
candidates.push(container.querySelector(".btnNextPage"));
} else if (activeElement.classList.contains("btnNextPage")) {
candidates.push(container.querySelector(".btnNextPage"));
candidates.push(container.querySelector(".btnPreviousPage"));
} else if (activeElement.classList.contains("btnSelectView")) {
candidates.push(container.querySelector(".btnSelectView"));
}
candidates.push(activeElement);
}
candidates = candidates.concat(arrayFrom(container.querySelectorAll(".btnResume")));
candidates = candidates.concat(arrayFrom(container.querySelectorAll(".btnPlay")));
var focusedElement;
candidates.every(function (element) {
if (focusManager.isCurrentlyFocusable(element)) {
focusManager.focus(element);
focusedElement = element;
return false;
}
return true;
});
if (!focusedElement) {
// FIXME: Multiple itemsContainers
var itemsContainer = container.querySelector(".itemsContainer");
if (itemsContainer) {
focusedElement = focusManager.autoFocus(itemsContainer);
}
}
if (!focusedElement) {
focusedElement = focusManager.autoFocus(container);
}
return focusedElement;
}
return {
isEnabled: isEnabled,
enable: enable,
autoFocus: autoFocus
};
});

View File

@@ -1,8 +1,7 @@
define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style'], function (browser, connectionManager, playbackManager, dom) {
define(['browser', 'connectionManager', 'playbackManager', 'dom', "userSettings", 'css!./backdrop'], function (browser, connectionManager, playbackManager, dom, userSettings) {
'use strict';
function enableAnimation(elem) {
if (browser.slow) {
return false;
}
@@ -11,7 +10,6 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
}
function enableRotation() {
if (browser.tv) {
return false;
}
@@ -25,17 +23,13 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
}
function Backdrop() {
}
Backdrop.prototype.load = function (url, parent, existingBackdropImage) {
var img = new Image();
var self = this;
img.onload = function () {
if (self.isDestroyed) {
return;
}
@@ -75,6 +69,7 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
internalBackdrop(true);
};
img.src = url;
};
@@ -87,14 +82,12 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
};
Backdrop.prototype.destroy = function () {
this.isDestroyed = true;
this.cancelAnimation();
};
var backdropContainer;
function getBackdropContainer() {
if (!backdropContainer) {
backdropContainer = document.querySelector('.backdropContainer');
}
@@ -109,7 +102,6 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
}
function clearBackdrop(clearAll) {
clearRotation();
if (currentLoadingBackdrop) {
@@ -123,6 +115,7 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
if (clearAll) {
hasExternalBackdrop = false;
}
internalBackdrop(false);
}
@@ -133,8 +126,8 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
}
return backgroundContainer;
}
function setBackgroundContainerBackgroundEnabled() {
function setBackgroundContainerBackgroundEnabled() {
if (hasInternalBackdrop || hasExternalBackdrop) {
getBackgroundContainer().classList.add('withBackdrop');
} else {
@@ -160,7 +153,6 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
var currentLoadingBackdrop;
function setBackdropImage(url) {
if (currentLoadingBackdrop) {
currentLoadingBackdrop.destroy();
currentLoadingBackdrop = null;
@@ -181,48 +173,27 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
currentLoadingBackdrop = instance;
}
var standardWidths = [480, 720, 1280, 1440, 1920];
function getBackdropMaxWidth() {
var width = dom.getWindowSize().innerWidth;
if (standardWidths.indexOf(width) !== -1) {
return width;
}
var roundScreenTo = 100;
width = Math.floor(width / roundScreenTo) * roundScreenTo;
return Math.min(width, 1920);
}
function getItemImageUrls(item, imageOptions) {
imageOptions = imageOptions || {};
var apiClient = connectionManager.getApiClient(item.ServerId);
if (item.BackdropImageTags && item.BackdropImageTags.length > 0) {
return item.BackdropImageTags.map(function (imgTag, index) {
return apiClient.getScaledImageUrl(item.BackdropItemId || item.Id, Object.assign(imageOptions, {
type: "Backdrop",
tag: imgTag,
maxWidth: getBackdropMaxWidth(),
maxWidth: dom.getScreenWidth(),
index: index
}));
});
}
if (item.ParentBackdropItemId && item.ParentBackdropImageTags && item.ParentBackdropImageTags.length) {
return item.ParentBackdropImageTags.map(function (imgTag, index) {
return apiClient.getScaledImageUrl(item.ParentBackdropItemId, Object.assign(imageOptions, {
type: "Backdrop",
tag: imgTag,
maxWidth: getBackdropMaxWidth(),
maxWidth: dom.getScreenWidth(),
index: index
}));
});
@@ -232,17 +203,13 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
}
function getImageUrls(items, imageOptions) {
var list = [];
var onImg = function (img) {
list.push(img);
};
for (var i = 0, length = items.length; i < length; i++) {
var itemImages = getItemImageUrls(items[i], imageOptions);
itemImages.forEach(onImg);
}
@@ -262,33 +229,35 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
// If you don't care about the order of the elements inside
// the array, you should sort both arrays here.
for (var i = 0; i < a.length; ++i) {
if (a[i] !== b[i]) {
return false;
}
}
return true;
}
function enabled() {
return userSettings.enableBackdrops();
}
var rotationInterval;
var currentRotatingImages = [];
var currentRotationIndex = -1;
function setBackdrops(items, imageOptions, enableImageRotation) {
if (enabled()) {
var images = getImageUrls(items, imageOptions);
var images = getImageUrls(items, imageOptions);
if (images.length) {
startRotation(images, enableImageRotation);
} else {
clearBackdrop();
if (images.length) {
startRotation(images, enableImageRotation);
} else {
clearBackdrop();
}
}
}
function startRotation(images, enableImageRotation) {
if (arraysEqual(images, currentRotatingImages)) {
return;
}
@@ -301,11 +270,11 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
if (images.length > 1 && enableImageRotation !== false && enableRotation()) {
rotationInterval = setInterval(onRotationInterval, 24000);
}
onRotationInterval();
}
function onRotationInterval() {
if (playbackManager.isPlayingLocally(['Video'])) {
return;
}
@@ -324,35 +293,29 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
if (interval) {
clearInterval(interval);
}
rotationInterval = null;
currentRotatingImages = [];
currentRotationIndex = -1;
}
function setBackdrop(url, imageOptions) {
if (url) {
if (typeof url !== 'string') {
url = getImageUrls([url], imageOptions)[0];
}
if (url && typeof url !== 'string') {
url = getImageUrls([url], imageOptions)[0];
}
if (url) {
clearRotation();
setBackdropImage(url);
} else {
clearBackdrop();
}
}
return {
setBackdrops: setBackdrops,
setBackdrop: setBackdrop,
clear: clearBackdrop,
externalBackdrop: externalBackdrop
};
});
});

View File

@@ -1,3 +0,0 @@
{
"main": "backdrop.js"
}

View File

@@ -0,0 +1,56 @@
define(["connectionManager"], function (connectionManager) {
return function () {
var self = this;
self.name = "Backdrop ScreenSaver";
self.type = "screensaver";
self.id = "backdropscreensaver";
self.supportsAnonymous = false;
var currentSlideshow;
self.show = function () {
var query = {
ImageTypes: "Backdrop",
EnableImageTypes: "Backdrop",
IncludeItemTypes: "Movie,Series,MusicArtist",
SortBy: "Random",
Recursive: true,
Fields: "Taglines",
ImageTypeLimit: 1,
StartIndex: 0,
Limit: 200
};
var apiClient = connectionManager.currentApiClient();
apiClient.getItems(apiClient.getCurrentUserId(), query).then(function (result) {
if (result.Items.length) {
require(["slideshow"], function (slideshow) {
var newSlideShow = new slideshow({
showTitle: true,
cover: true,
items: result.Items
});
newSlideShow.show();
currentSlideshow = newSlideShow;
});
}
});
};
self.hide = function () {
if (currentSlideshow) {
currentSlideshow.hide();
currentSlideshow = null;
}
};
}
});

View File

@@ -1,24 +1,24 @@
button {
-webkit-border-fit: border !important;
}
button::-moz-focus-inner {
padding: 0;
border: 0;
}
button {
-webkit-border-fit: border !important;
}
.card {
border: 0;
font-size: inherit !important;
font-family: inherit !important;
text-transform: none;
background-color: transparent !important;
background: none !important;
background-color: transparent !important;
margin: 0;
padding: 0;
display: block;
color: inherit !important;
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
outline: none !important;
cursor: pointer;
contain: layout style;
@@ -26,24 +26,12 @@ button {
font-weight: inherit !important;
}
.card-nofocustransform {
.card:not(.show-animation) {
contain: layout style paint;
}
.itemsContainer {
display: flex;
margin-left: -0.6em;
margin-right: -0.6em;
}
/* TODO replace this with a proper fix */
/* doesnt work on mobile devices */
/* negative margin fixes annoying misalignment with cards and title */
@media all and (max-width:50em) {
.itemsContainer {
margin-left: 0;
margin-right: 0;
}
}
.vertical-list {
@@ -67,17 +55,27 @@ button {
contain: layout style;
}
.cardPadder-backdrop, .cardPadder-mixedBackdrop, .cardPadder-smallBackdrop, .cardPadder-overflowBackdrop, .cardPadder-overflowSmallBackdrop {
.cardPadder-backdrop,
.cardPadder-mixedBackdrop,
.cardPadder-smallBackdrop,
.cardPadder-overflowBackdrop,
.cardPadder-overflowSmallBackdrop {
padding-bottom: 56.25%;
contain: strict;
}
.cardPadder-square, .cardPadder-mixedSquare, .cardPadder-overflowSquare, .overflowSquareCard-textCardPadder {
.cardPadder-square,
.cardPadder-mixedSquare,
.cardPadder-overflowSquare,
.overflowSquareCard-textCardPadder {
padding-bottom: 100%;
contain: strict;
}
.cardPadder-portrait, .cardPadder-mixedPortrait, .cardPadder-overflowPortrait, .overflowPortraitCard-textCardPadder {
.cardPadder-portrait,
.cardPadder-mixedPortrait,
.cardPadder-overflowPortrait,
.overflowPortraitCard-textCardPadder {
padding-bottom: 150%;
contain: strict;
}
@@ -92,26 +90,29 @@ button {
margin: 0.6em;
transition: none;
border: 0 solid transparent;
/* These both are needed in case cardBox is a button */
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
outline: none !important;
contain: layout style;
contain: layout;
contain: style;
}
.cardBox-withfocuscontent-large {
margin: .4em;
}
.card-focuscontent-large {
border: .5em solid transparent;
}
.cardBox-focustransform {
.card.show-animation .cardBox {
will-change: transform;
transition: transform 200ms ease-out;
}
.card:focus > .cardBox-focustransform {
.card.show-focus:not(.show-animation) .cardBox {
margin: 0.4em;
}
.card.show-focus:not(.show-animation) .cardBox.visualCardBox,
.card.show-focus:not(.show-animation) .cardBox:not(.visualCardBox) .cardScalable {
border: 0.5em solid transparent;
}
.card.show-animation:focus > .cardBox {
transform: scale(1.18, 1.18);
}
@@ -133,7 +134,7 @@ button {
.btnCardOptions {
position: absolute;
bottom: .25em;
bottom: 0.25em;
right: 0;
margin: 0 !important;
z-index: 1;
@@ -144,8 +145,8 @@ button {
position: absolute;
align-items: center;
justify-content: center;
top: .3em;
left: .3em;
top: 0.3em;
left: 0.3em;
text-align: center;
vertical-align: middle;
width: 1.6em;
@@ -156,7 +157,7 @@ button {
}
.cardImageContainer {
background-size: contain;
background-size: cover;
background-repeat: no-repeat;
background-position: center center;
display: -webkit-flex;
@@ -166,6 +167,7 @@ button {
position: relative;
background-clip: content-box !important;
color: inherit;
/* This is only needed for scalable cards */
height: 100%;
contain: strict;
@@ -187,13 +189,16 @@ button {
left: 0;
right: 0;
bottom: 0;
/* Needed in case this is a button */
display: block;
/* Needed in case this is a button */
margin: 0 !important;
/* Needed in safari */
height: 100%;
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
outline: none !important;
contain: strict;
}
@@ -222,24 +227,22 @@ button {
box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37);
}
.cardImageContainer {
display: flex;
}
.cardImage {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-size: contain;
background-size: cover;
background-repeat: no-repeat;
background-position: center bottom;
background-position: center;
border: none;
}
.cardImage-img {
max-height: 100%;
max-width: 100%;
/* This is simply for lazy image purposes, to ensure the image is visible sooner when scrolling */
min-height: 70%;
min-width: 70%;
@@ -257,7 +260,7 @@ button {
}
.coveredImage {
background-size: 100% 100%;
background-size: cover;
background-position: center center;
}
@@ -266,17 +269,17 @@ button {
}
.cardFooter {
padding: .3em .3em .5em .3em;
padding: 0.3em 0.3em 0.5em 0.3em;
position: relative;
}
.visualCardBox {
box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37);
border-radius: .145em;
border-radius: 0.145em;
}
.innerCardFooter {
background: rgba(0,0,0,.7);
background: rgba(0, 0, 0, 0.7);
position: absolute;
bottom: 0;
left: 0;
@@ -296,7 +299,7 @@ button {
}
.cardText {
padding: .06em .5em;
padding: 0.06em 0.5em;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
@@ -308,7 +311,24 @@ button {
}
.cardText-first {
padding-top: .24em;
padding-top: 0.24em;
}
.textActionButton {
border: 0 !important;
background: transparent;
padding: 0 !important;
cursor: pointer;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
outline: none !important;
color: inherit;
vertical-align: middle;
font-family: inherit;
font-size: inherit;
}
.textActionButton:hover {
text-decoration: underline;
}
.cardText > .textActionButton {
@@ -318,7 +338,7 @@ button {
}
.innerCardFooter > .cardText {
padding: .3em .5em;
padding: 0.3em 0.5em;
}
.cardFooter-withlogo {
@@ -350,40 +370,19 @@ button {
text-align: center;
}
.textActionButton {
border: 0 !important;
background: transparent;
border: 0 !important;
padding: 0 !important;
cursor: pointer;
-webkit-tap-highlight-color: rgba(0,0,0,0);
outline: none !important;
color: inherit;
vertical-align: middle;
font-family: inherit;
font-size: inherit;
/*display: flex;
align-items: center;
justify-content: center;*/
}
.textActionButton:hover {
text-decoration: underline;
}
.cardImageIcon {
.cardImageContainer .cardImageIcon {
font-size: 5em;
color: inherit;
}
.cardImageIcon-small {
font-size: 3em;
margin-bottom: .1em;
font-size: 3em !important;
margin-bottom: 0.1em;
}
.cardIndicators {
right: .225em;
top: .225em;
right: 0.225em;
top: 0.225em;
position: absolute;
display: flex;
align-items: center;
@@ -400,16 +399,16 @@ button {
}
.programAttributeIndicator {
padding: .18em .5em;
padding: 0.18em 0.5em;
color: #fff;
font-weight: 500;
}
.cardOverlayButton {
color: rgba(255, 255, 255, .76);
color: rgba(255, 255, 255, 0.76);
margin: 0;
z-index: 1;
padding: .75em;
padding: 0.75em;
font-size: 88%;
}
@@ -420,7 +419,7 @@ button {
}
.cardOverlayButtonIcon {
background-color: rgba(0,0,0,.7) !important;
background-color: rgba(0, 0, 0, 0.7) !important;
border-radius: 100em;
width: 1.5em !important;
height: 1.5em !important;
@@ -430,6 +429,12 @@ button {
font-size: 1.66956521739130434em !important;
}
.cardOverlayButtonIcon.material-icons {
/* material-icons override display, so we need to
make a better matching selector to set it to flex */
display: flex;
}
.cardOverlayButton-centered {
bottom: initial;
right: initial;
@@ -442,10 +447,10 @@ button {
height: 2.6em;
top: 50%;
left: 50%;
background-color: rgba(0,0,0,.5) !important;
border: .06em solid rgba(255,255,255,.6);
padding: .38em !important;
color: rgba(255, 255, 255, .76);
background-color: rgba(0, 0, 0, 0.5) !important;
border: 0.06em solid rgba(255, 255, 255, 0.6);
padding: 0.38em !important;
color: rgba(255, 255, 255, 0.76);
transition: transform 200ms ease-out;
}
@@ -492,13 +497,15 @@ button {
width: 33.333333333333333333333333333333%;
}
.squareCard, .portraitCard {
.squareCard,
.portraitCard {
width: 33.333333333333333333333333333333%;
}
}
@media (min-width: 43.75em) {
.squareCard, .portraitCard {
.squareCard,
.portraitCard {
width: 25%;
}
}
@@ -514,7 +521,8 @@ button {
width: 50%;
}
.squareCard, .portraitCard {
.squareCard,
.portraitCard {
width: 20%;
}
@@ -534,7 +542,8 @@ button {
width: 25%;
}
.squareCard, .portraitCard {
.squareCard,
.portraitCard {
width: 16.666666666666666666666666666667%;
}
@@ -547,9 +556,9 @@ button {
}
}
@media (min-width: 87.5em) {
.squareCard, .portraitCard {
.squareCard,
.portraitCard {
width: 14.285714285714285714285714285714%;
}
@@ -567,13 +576,15 @@ button {
width: 20%;
}
.squareCard, .portraitCard {
.squareCard,
.portraitCard {
width: 12.5%;
}
}
@media (min-width: 120em) {
.squareCard, .portraitCard {
.squareCard,
.portraitCard {
width: 11.111111111111111111111111111111%;
}
}
@@ -583,7 +594,8 @@ button {
width: 25%;
}
.squareCard, .portraitCard {
.squareCard,
.portraitCard {
width: 10%;
}
}
@@ -614,7 +626,8 @@ button {
width: 72vw;
}
.overflowSquareCard, .overflowPortraitCard {
.overflowSquareCard,
.overflowPortraitCard {
width: 40vw;
}
@@ -639,30 +652,35 @@ button {
}
@media (min-width: 43.75em) {
.overflowSquareCard, .overflowPortraitCard {
width: 23.3vw;
.overflowSquareCard,
.overflowPortraitCard {
width: 23.1vw;
}
}
@media (min-width: 48.125em) {
.overflowBackdropCard, .overflowSmallBackdropCard {
.overflowBackdropCard,
.overflowSmallBackdropCard {
width: 30vw;
}
}
@media (orientation: landscape) {
.overflowBackdropCard, .overflowSmallBackdropCard {
.overflowBackdropCard,
.overflowSmallBackdropCard {
width: 30vw;
}
.overflowSquareCard, .overflowPortraitCard {
width: 23.3vw;
.overflowSquareCard,
.overflowPortraitCard {
width: 23.1vw;
}
}
@media (orientation: landscape) and (min-width: 48.125em) {
.overflowBackdropCard, .overflowSmallBackdropCard {
width: 23.3vw;
.overflowBackdropCard,
.overflowSmallBackdropCard {
width: 23.1vw;
}
}
@@ -673,55 +691,60 @@ button {
}
@media (min-width: 50em) {
.overflowSquareCard, .overflowPortraitCard {
width: 18.4vw;
.overflowSquareCard,
.overflowPortraitCard {
width: 18.5vw;
}
}
@media (min-width: 75em) {
.overflowBackdropCard, .overflowSmallBackdropCard {
width: 23.3vw;
.overflowBackdropCard,
.overflowSmallBackdropCard {
width: 23.1vw;
}
.overflowSquareCard, .overflowPortraitCard {
.overflowSquareCard,
.overflowPortraitCard {
width: 15.5vw;
}
}
@media (min-width: 87.5em) {
.overflowSquareCard, .overflowPortraitCard {
.overflowSquareCard,
.overflowPortraitCard {
width: 13.3vw;
}
}
@media (min-width: 100em) {
.overflowBackdropCard, .overflowSmallBackdropCard {
.overflowBackdropCard,
.overflowSmallBackdropCard {
width: 18.7vw;
}
.overflowSquareCard, .overflowPortraitCard {
.overflowSquareCard,
.overflowPortraitCard {
width: 11.6vw;
}
}
@media (min-width: 120em) {
.overflowSquareCard, .overflowPortraitCard {
width: 10.3vw;
.overflowSquareCard,
.overflowPortraitCard {
width: 10.41vw;
}
}
@media (min-width: 131.25em) {
.overflowSquareCard, .overflowPortraitCard {
.overflowSquareCard,
.overflowPortraitCard {
width: 9.3vw;
}
}
@media (min-width: 156.25em) {
.overflowBackdropCard, .overflowSmallBackdropCard {
.overflowBackdropCard,
.overflowSmallBackdropCard {
width: 15.6vw;
}
}
@@ -738,7 +761,8 @@ button {
padding-bottom: 87.75%;
}
.itemsContainer-tv > .overflowSquareCard, .itemsContainer-tv > .overflowPortraitCard {
.itemsContainer-tv > .overflowSquareCard,
.itemsContainer-tv > .overflowPortraitCard {
width: 15.6vw;
}
@@ -747,9 +771,9 @@ button {
}
.cardOverlayContainer {
background: rgba(0,0,0,0.5);
background: rgba(0, 0, 0, 0.5);
opacity: 0;
transition: opacity .2s;
transition: opacity 0.2s;
position: absolute;
top: 0;
left: 0;
@@ -766,7 +790,7 @@ button {
opacity: 0;
transition: 0.2s;
background: transparent;
padding: 0.5em;
padding: 0.25em;
}
.cardOverlayButtonIcon-hover {
@@ -778,7 +802,7 @@ button {
}
.cardOverlayFab-primary {
background-color: rgba(0,0,0,0.7);
background-color: rgba(0, 0, 0, 0.7);
font-size: 130%;
padding: 0;
width: 3em;
@@ -793,4 +817,4 @@ button {
.cardOverlayFab-primary:hover {
transform: scale(1.4, 1.4);
transition: 0.2s;
}
}

View File

@@ -2,8 +2,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
function (datetime, imageLoader, connectionManager, itemHelper, focusManager, indicators, globalize, layoutManager, appHost, dom, browser, playbackManager, itemShortcuts, imageHelper) {
'use strict';
var devicePixelRatio = window.devicePixelRatio || 1;
var enableFocusTransfrom = !browser.slow && !browser.edge;
var enableFocusTransform = !browser.slow && !browser.edge;
function getCardsHtml(items, options) {
if (arguments.length === 1) {
@@ -140,7 +139,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
}
return 100 / 72;
}
break;
case 'overflowPortrait':
if (layoutManager.tv) {
@@ -166,7 +164,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
}
return 100 / 42;
}
break;
case 'overflowSquare':
if (layoutManager.tv) {
return 100 / 15.5;
@@ -191,7 +188,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
}
return 100 / 42;
}
break;
case 'overflowBackdrop':
if (layoutManager.tv) {
return 100 / 23.3;
@@ -216,7 +212,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
}
return 100 / 72;
}
break;
default:
return 4;
}
@@ -237,9 +232,9 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
function getImageWidth(shape, screenWidth, isOrientationLandscape) {
var imagesPerRow = getPostersPerRow(shape, screenWidth, isOrientationLandscape);
var shapeWidth = screenWidth / imagesPerRow;
var shapeWidth = Math.round(screenWidth / imagesPerRow) * 2;
return Math.round(shapeWidth);
return shapeWidth;
}
function setCardData(items, options) {
@@ -321,7 +316,8 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
var apiClient;
var lastServerId;
var i, length;
var i;
var length;
for (i = 0, length = items.length; i < length; i++) {
@@ -339,19 +335,14 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
if (options.indexBy === 'PremiereDate') {
if (item.PremiereDate) {
try {
newIndexValue = datetime.toLocaleDateString(datetime.parseISO8601Date(item.PremiereDate), { weekday: 'long', month: 'long', day: 'numeric' });
} catch (err) {
console.error('error parsing timestamp for premiere date');
}
}
}
else if (options.indexBy === 'ProductionYear') {
} else if (options.indexBy === 'ProductionYear') {
newIndexValue = item.ProductionYear;
}
else if (options.indexBy === 'CommunityRating') {
} else if (options.indexBy === 'CommunityRating') {
newIndexValue = item.CommunityRating ? (Math.floor(item.CommunityRating) + (item.CommunityRating % 1 >= 0.5 ? 0.5 : 0)) + '+' : null;
}
@@ -584,26 +575,23 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
coverImage = (Math.abs(primaryImageAspectRatio - uiAspect) / uiAspect) <= 0.2;
}
}
}
else if (item.ParentPrimaryImageTag) {
} else if (item.ParentPrimaryImageTag) {
imgUrl = apiClient.getScaledImageUrl(item.ParentPrimaryImageItemId, {
type: "Primary",
maxWidth: width,
tag: item.ParentPrimaryImageTag
});
}
else if (item.SeriesPrimaryImageTag) {
} else if (item.SeriesPrimaryImageTag) {
imgUrl = apiClient.getScaledImageUrl(item.SeriesId, {
type: "Primary",
maxWidth: width,
tag: item.SeriesPrimaryImageTag
});
}
else if (item.AlbumId && item.AlbumPrimaryImageTag) {
} else if (item.AlbumId && item.AlbumPrimaryImageTag) {
width = primaryImageAspectRatio ? Math.round(height * primaryImageAspectRatio) : null;
height = width && primaryImageAspectRatio ? Math.round(width / primaryImageAspectRatio) : null;
imgUrl = apiClient.getScaledImageUrl(item.AlbumId, {
type: "Primary",
@@ -618,8 +606,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
coverImage = (Math.abs(primaryImageAspectRatio - uiAspect) / uiAspect) <= 0.2;
}
}
}
else if (item.Type === 'Season' && item.ImageTags && item.ImageTags.Thumb) {
} else if (item.Type === 'Season' && item.ImageTags && item.ImageTags.Thumb) {
imgUrl = apiClient.getScaledImageUrl(item.Id, {
type: "Thumb",
@@ -627,8 +614,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
tag: item.ImageTags.Thumb
});
}
else if (item.BackdropImageTags && item.BackdropImageTags.length) {
} else if (item.BackdropImageTags && item.BackdropImageTags.length) {
imgUrl = apiClient.getScaledImageUrl(item.Id, {
type: "Backdrop",
@@ -704,7 +690,8 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
var html = '';
var valid = 0;
var i, length;
var i;
var length;
for (i = 0, length = lines.length; i < length; i++) {
@@ -768,9 +755,8 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
date = datetime.parseISO8601Date(item.EndDate);
airTimeText += ' - ' + datetime.getDisplayTime(date);
}
}
catch (e) {
console.log("Error parsing date: " + item.StartDate);
} catch (e) {
console.error("error parsing date: " + item.StartDate);
}
}
@@ -790,7 +776,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
if (isOuterFooter && options.cardLayout && layoutManager.mobile) {
if (options.cardFooterAside !== 'none') {
html += '<button is="paper-icon-button-light" class="itemAction btnCardOptions cardText-secondary" data-action="menu"><i class="md-icon">&#xE5D3;</i></button>';
html += '<button is="paper-icon-button-light" class="itemAction btnCardOptions cardText-secondary" data-action="menu"><i class="material-icons more_horiz"></i></button>';
}
}
@@ -817,8 +803,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
} else {
lines.push(item.SeriesName);
}
}
else {
} else {
if (isUsingLiveTvNaming(item)) {
@@ -903,9 +888,10 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
if (item.PremiereDate) {
try {
lines.push(getPremiereDateText(item));
lines.push(datetime.toLocaleDateString(
datetime.parseISO8601Date(item.PremiereDate),
{ weekday: 'long', month: 'long', day: 'numeric' }
));
} catch (err) {
lines.push('');
@@ -925,7 +911,8 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
} else {
if (item.EndDate && item.ProductionYear) {
lines.push(item.ProductionYear + ' - ' + datetime.parseISO8601Date(item.EndDate).getFullYear());
var endYear = datetime.parseISO8601Date(item.EndDate).getFullYear();
lines.push(item.ProductionYear + ((endYear === item.ProductionYear) ? '' : (' - ' + endYear)));
} else {
lines.push(item.ProductionYear || '');
}
@@ -999,8 +986,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
if (options.showSeriesTimerChannel) {
if (item.RecordAnyChannel) {
lines.push(globalize.translate('AllChannels'));
}
else {
} else {
lines.push(item.ChannelName || globalize.translate('OneChannel'));
}
}
@@ -1008,8 +994,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
if (options.showPersonRoleOrType) {
if (item.Role) {
lines.push('as ' + item.Role);
}
else if (item.Type) {
} else if (item.Type) {
lines.push(globalize.translate('' + item.Type));
} else {
lines.push('');
@@ -1052,7 +1037,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
return text;
}
var html = '<button ' + itemShortcuts.getShortcutAttributesHtml(item, serverId) + ' type="button" class="itemAction textActionButton" data-action="link">';
var html = '<button ' + itemShortcuts.getShortcutAttributesHtml(item, serverId) + ' type="button" class="itemAction textActionButton" title="' + text + '" data-action="link">';
html += text;
html += '</button>';
@@ -1083,8 +1068,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
counts.push(childText);
}
else if (item.Type === 'Genre' || item.Type === 'Studio') {
} else if (item.Type === 'Genre' || item.Type === 'Studio') {
if (item.MovieCount) {
@@ -1163,8 +1147,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
if (item.IsPremiere) {
html += '<div class="premiereTvProgram programAttributeIndicator">' + globalize.translate('Premiere') + '</div>';
}
else if (item.IsSeries && !item.IsRepeat) {
} else if (item.IsSeries && !item.IsRepeat) {
html += '<div class="newTvProgram programAttributeIndicator">' + globalize.translate('AttributeNew') + '</div>';
}
//else if (item.IsRepeat) {
@@ -1199,8 +1182,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
if (action === 'play' && item.IsFolder) {
// If this hard-coding is ever removed make sure to test nested photo albums
action = 'link';
}
else if (item.MediaType === 'Photo') {
} else if (item.MediaType === 'Photo') {
action = 'play';
}
@@ -1226,6 +1208,8 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
shape = shape || 'mixedSquare';
}
// TODO move card creation code to Card component
var className = 'card';
if (shape) {
@@ -1244,8 +1228,12 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
className += ' card-hoverable';
}
if (!enableFocusTransfrom || !layoutManager.tv) {
className += ' card-nofocustransform';
if (layoutManager.tv) {
className += ' show-focus';
if (enableFocusTransform) {
className += ' show-animation';
}
}
var imgInfo = getCardImageUrl(item, apiClient, options, shape);
@@ -1273,23 +1261,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
var cardBoxClass = options.cardLayout ? 'cardBox visualCardBox' : 'cardBox';
if (layoutManager.tv) {
if (enableFocusTransfrom) {
cardBoxClass += ' cardBox-focustransform cardBox-withfocuscontent';
} else {
cardBoxClass += ' cardBox-withfocuscontent-large';
}
if (options.cardLayout) {
cardBoxClass += ' card-focuscontent';
if (!enableFocusTransfrom) {
cardBoxClass += ' card-focuscontent-large';
}
}
}
var footerCssClass;
var progressHtml = indicators.getProgressBarHtml(item);
@@ -1306,8 +1277,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
height: logoHeight,
tag: item.ChannelPrimaryImageTag
});
}
else if (options.showLogo && item.ParentLogoImageTag) {
} else if (options.showLogo && item.ParentLogoImageTag) {
logoUrl = apiClient.getScaledImageUrl(item.ParentLogoItemId, {
type: "Logo",
height: logoHeight,
@@ -1322,8 +1292,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
footerCssClass = progressHtml ? 'innerCardFooter fullInnerCardFooter' : 'innerCardFooter';
innerCardFooter += getCardFooterText(item, apiClient, options, showTitle, forceName, overlayText, imgUrl, footerCssClass, progressHtml, logoUrl, false);
footerOverlayed = true;
}
else if (progressHtml) {
} else if (progressHtml) {
innerCardFooter += '<div class="innerCardFooter fullInnerCardFooter innerCardFooterClear">';
innerCardFooter += progressHtml;
innerCardFooter += '</div>';
@@ -1366,15 +1335,15 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
var btnCssClass = 'cardOverlayButton cardOverlayButton-br itemAction';
if (options.centerPlayButton) {
overlayButtons += '<button is="paper-icon-button-light" class="' + btnCssClass + ' cardOverlayButton-centered" data-action="play"><i class="md-icon cardOverlayButtonIcon">&#xE037;</i></button>';
overlayButtons += '<button is="paper-icon-button-light" class="' + btnCssClass + ' cardOverlayButton-centered" data-action="play"><i class="material-icons cardOverlayButtonIcon play_arrow"></i></button>';
}
if (overlayPlayButton && !item.IsPlaceHolder && (item.LocationType !== 'Virtual' || !item.MediaType || item.Type === 'Program') && item.Type !== 'Person') {
overlayButtons += '<button is="paper-icon-button-light" class="' + btnCssClass + '" data-action="play"><i class="md-icon cardOverlayButtonIcon">&#xE037;</i></button>';
overlayButtons += '<button is="paper-icon-button-light" class="' + btnCssClass + '" data-action="play"><i class="material-icons cardOverlayButtonIcon play_arrow"></i></button>';
}
if (options.overlayMoreButton) {
overlayButtons += '<button is="paper-icon-button-light" class="' + btnCssClass + '" data-action="menu"><i class="md-icon cardOverlayButtonIcon">&#xE5D3;</i></button>';
overlayButtons += '<button is="paper-icon-button-light" class="' + btnCssClass + '" data-action="menu"><i class="material-icons cardOverlayButtonIcon more_horiz"></i></button>';
}
}
@@ -1408,15 +1377,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
var cardScalableClass = 'cardScalable';
if (layoutManager.tv && !options.cardLayout) {
cardScalableClass += ' card-focuscontent';
if (!enableFocusTransfrom) {
cardScalableClass += ' card-focuscontent-large';
}
}
cardImageContainerOpen = '<div class="' + cardBoxClass + '"><div class="' + cardScalableClass + '"><div class="cardPadder-' + shape + '"></div>' + cardImageContainerOpen;
cardBoxClose = '</div>';
cardScalableClose = '</div>';
@@ -1437,13 +1397,12 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
indicatorsHtml += indicators.getChildCountIndicatorHtml(item, {
minCount: 1
});
}
else {
} else {
indicatorsHtml += indicators.getPlayedIndicatorHtml(item);
}
if (item.Type === 'CollectionFolder' || item.CollectionType) {
var refreshClass = item.RefreshProgress || (item.RefreshStatus && virtualFolder.item !== 'Idle') ? '' : ' class="hide"';
var refreshClass = item.RefreshProgress ? '' : ' class="hide"';
indicatorsHtml += '<div is="emby-itemrefreshindicator"' + refreshClass + ' data-progress="' + (item.RefreshProgress || 0) + '" data-status="' + item.RefreshStatus + '"></div>';
requireRefreshIndicator();
}
@@ -1457,7 +1416,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
//}
if (!imgUrl) {
cardImageContainerOpen += getCardDefaultText(item, options);
cardImageContainerOpen += getDefaultText(item, options);
}
var tagName = (layoutManager.tv) && !overlayButtons ? 'button' : 'div';
@@ -1517,16 +1476,16 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
var btnCssClass = 'cardOverlayButton cardOverlayButton-hover itemAction paper-icon-button-light';
if (playbackManager.canPlay(item)) {
html += '<button is="paper-icon-button-light" class="' + btnCssClass + ' cardOverlayFab-primary" data-action="resume"><i class="md-icon cardOverlayButtonIcon cardOverlayButtonIcon-hover">&#xE037;</i></button>';
html += '<button is="paper-icon-button-light" class="' + btnCssClass + ' cardOverlayFab-primary" data-action="resume"><i class="material-icons cardOverlayButtonIcon cardOverlayButtonIcon-hover play_arrow"></i></button>';
}
html += '<div class="cardOverlayButton-br">';
html += '<div class="cardOverlayButton-br flex">';
var userData = item.UserData || {};
if (itemHelper.canMarkPlayed(item)) {
require(['emby-playstatebutton']);
html += '<button is="emby-playstatebutton" type="button" data-action="none" class="' + btnCssClass + '" data-id="' + item.Id + '" data-serverid="' + item.ServerId + '" data-itemtype="' + item.Type + '" data-played="' + (userData.Played) + '"><i class="md-icon cardOverlayButtonIcon cardOverlayButtonIcon-hover">&#xE5CA;</i></button>';
html += '<button is="emby-playstatebutton" type="button" data-action="none" class="' + btnCssClass + '" data-id="' + item.Id + '" data-serverid="' + item.ServerId + '" data-itemtype="' + item.Type + '" data-played="' + (userData.Played) + '"><i class="material-icons cardOverlayButtonIcon cardOverlayButtonIcon-hover">check</i></button>';
}
if (itemHelper.canRate(item)) {
@@ -1534,10 +1493,10 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
var likes = userData.Likes == null ? '' : userData.Likes;
require(['emby-ratingbutton']);
html += '<button is="emby-ratingbutton" type="button" data-action="none" class="' + btnCssClass + '" data-id="' + item.Id + '" data-serverid="' + item.ServerId + '" data-itemtype="' + item.Type + '" data-likes="' + likes + '" data-isfavorite="' + (userData.IsFavorite) + '"><i class="md-icon cardOverlayButtonIcon cardOverlayButtonIcon-hover">&#xE87D;</i></button>';
html += '<button is="emby-ratingbutton" type="button" data-action="none" class="' + btnCssClass + '" data-id="' + item.Id + '" data-serverid="' + item.ServerId + '" data-itemtype="' + item.Type + '" data-likes="' + likes + '" data-isfavorite="' + (userData.IsFavorite) + '"><i class="material-icons cardOverlayButtonIcon cardOverlayButtonIcon-hover">favorite</i></button>';
}
html += '<button is="paper-icon-button-light" class="' + btnCssClass + '" data-action="menu"><i class="md-icon cardOverlayButtonIcon cardOverlayButtonIcon-hover">&#xE5D3;</i></button>';
html += '<button is="paper-icon-button-light" class="' + btnCssClass + '" data-action="menu"><i class="material-icons cardOverlayButtonIcon cardOverlayButtonIcon-hover more_horiz"></i></button>';
html += '</div>';
html += '</div>';
@@ -1545,18 +1504,29 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
return html;
}
function getCardDefaultText(item, options) {
function getDefaultText(item, options) {
if (item.CollectionType) {
return '<i class="cardImageIcon md-icon">' + imageHelper.getLibraryIcon(item.CollectionType) + '</i>'
return '<i class="cardImageIcon material-icons ' + imageHelper.getLibraryIcon(item.CollectionType) + '"></i>'
}
if (item.Type === 'MusicAlbum') {
return '<i class="cardImageIcon md-icon">&#xE019;</i>';
switch (item.Type) {
case 'MusicAlbum':
return '<i class="cardImageIcon material-icons">album</i>';
case 'MusicArtist':
case 'Person':
return '<i class="cardImageIcon material-icons">person</i>';
case 'Movie':
return '<i class="cardImageIcon material-icons">movie</i>';
case 'Series':
return '<i class="cardImageIcon material-icons">tv</i>';
case 'Book':
return '<i class="cardImageIcon material-icons">book</i>';
case 'Folder':
return '<i class="cardImageIcon material-icons">folder</i>';
}
if (item.Type === 'MusicArtist' || item.Type === 'Person') {
return '<i class="cardImageIcon md-icon">&#xE7FD;</i>';
}
if (options.defaultCardImageIcon) {
return '<i class="cardImageIcon md-icon">' + options.defaultCardImageIcon + '</i>';
if (options && options.defaultCardImageIcon) {
return '<i class="cardImageIcon material-icons">' + options.defaultCardImageIcon + '</i>';
}
var defaultName = isUsingLiveTvNaming(item) ? item.Name : itemHelper.getDisplayName(item);
@@ -1645,7 +1615,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
indicatorsElem = ensureIndicators(card, indicatorsElem);
indicatorsElem.appendChild(playedIndicator);
}
playedIndicator.innerHTML = '<i class="md-icon indicatorIcon">&#xE5CA;</i>';
playedIndicator.innerHTML = '<i class="material-icons indicatorIcon">check</i>';
} else {
playedIndicator = card.querySelector('.playedIndicator');
@@ -1699,8 +1669,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
}
itemProgressBar.innerHTML = progressHtml;
}
else {
} else {
itemProgressBar = card.querySelector('.itemProgressBar');
if (itemProgressBar) {
@@ -1727,7 +1696,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
var icon = cell.querySelector('.timerIndicator');
if (!icon) {
var indicatorsElem = ensureIndicators(cell);
indicatorsElem.insertAdjacentHTML('beforeend', '<i class="md-icon timerIndicator indicatorIcon">&#xE061;</i>');
indicatorsElem.insertAdjacentHTML('beforeend', '<i class="material-icons timerIndicator indicatorIcon fiber_manual_record"></i>');
}
cell.setAttribute('data-timerid', newTimerId);
}
@@ -1763,6 +1732,8 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
return {
getCardsHtml: getCardsHtml,
getDefaultBackgroundClass: getDefaultBackgroundClass,
getDefaultText: getDefaultText,
buildCards: buildCards,
onUserDataChanged: onUserDataChanged,
onTimerCreated: onTimerCreated,

View File

@@ -1,12 +1,20 @@
define(['datetime', 'imageLoader', 'connectionManager', 'layoutManager', 'browser'], function (datetime, imageLoader, connectionManager, layoutManager, browser) {
'use strict';
var enableFocusTransform = !browser.slow && !browser.edge;
function buildChapterCardsHtml(item, chapters, options) {
// TODO move card creation code to Card component
var className = 'card itemAction chapterCard';
if (layoutManager.tv && (browser.animate || browser.edge)) {
className += ' card-focusscale';
if (layoutManager.tv) {
className += ' show-focus';
if (enableFocusTransform) {
className += ' show-animation';
}
}
var mediaStreams = ((item.MediaSources || [])[0] || {}).MediaStreams || [];
@@ -60,7 +68,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'layoutManager', 'browse
return apiClient.getScaledImageUrl(item.Id, {
maxWidth: maxWidth,
maxWidth: maxWidth * 2,
tag: chapter.ImageTag,
type: "Chapter",
index: index
@@ -82,7 +90,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'layoutManager', 'browse
var cardImageContainer = imgUrl ? ('<div class="' + cardImageContainerClass + ' lazy" data-src="' + imgUrl + '">') : ('<div class="' + cardImageContainerClass + '">');
if (!imgUrl) {
cardImageContainer += '<i class="md-icon cardImageIcon">local_movies</i>';
cardImageContainer += '<i class="material-icons cardImageIcon local_movies"></i>';
}
var nameHtml = '';
@@ -92,19 +100,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'layoutManager', 'browse
var cardBoxCssClass = 'cardBox';
var cardScalableClass = 'cardScalable';
if (layoutManager.tv) {
var enableFocusTransfrom = !browser.slow && !browser.edge;
cardScalableClass += ' card-focuscontent';
if (enableFocusTransfrom) {
cardBoxCssClass += ' cardBox-focustransform cardBox-withfocuscontent';
} else {
cardBoxCssClass += ' cardBox-withfocuscontent-large';
cardScalableClass += ' card-focuscontent-large';
}
}
var html = '<button type="button" class="' + className + '"' + dataAttributes + '><div class="' + cardBoxCssClass + '"><div class="' + cardScalableClass + '"><div class="cardPadder-' + shape + '"></div>' + cardImageContainer + '</div><div class="innerCardFooter">' + nameHtml + '</div></div></div></button>';
return html;
@@ -137,4 +132,4 @@ define(['datetime', 'imageLoader', 'connectionManager', 'layoutManager', 'browse
buildChapterCards: buildChapterCards
};
});
});

Some files were not shown because too many files have changed in this diff Show More